12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- discard """
- cmd: "nim $target --threads:on $options $file"
- errormsg: "illegal recursion in type 'TIRC'"
- line: 16
- """
- import events
- import sockets
- import strutils
- import os
- type
- TMessageReceivedEventArgs = object of EventArgs
- Nick*: string
- Message*: string
- TIRC = object
- EventEmitter: EventEmitter
- MessageReceivedHandler*: EventHandler
- Socket: Socket
- Thread: Thread[TIRC]
- proc initIRC*(): TIRC =
- result.Socket = socket()
- result.EventEmitter = initEventEmitter()
- result.MessageReceivedHandler = initEventHandler("MessageReceived")
- proc IsConnected*(irc: var TIRC): bool =
- return running(irc.Thread)
- proc sendRaw*(irc: var TIRC, message: string) =
- irc.Socket.send(message & "\r\L")
- proc handleData(irc: TIRC) {.thread.} =
- var connected = False
- while connected:
- var tup = @[irc.Socket]
- var o = select(tup, 200)
- echo($o)
- echo($len(tup))
- if len(tup) == 1:
- #Connected
- connected = True
- #Parse data here
- else:
- #Disconnected
- connected = False
- return
- proc Connect*(irc: var TIRC, nick: string, host: string, port: int = 6667) =
- connect(irc.Socket, host, TPort(port), TDomain.AF_INET)
- send(irc.Socket,"USER " & nick & " " & nick & " " & nick & " " & nick & "\r\L")
- send(irc.Socket,"NICK " & nick & "\r\L")
- var thread: Thread[TIRC]
- createThread(thread, handleData, irc)
- irc.Thread = thread
- when isMainModule:
- var irc = initIRC()
- irc.Connect("AmryBot[Nim]","irc.freenode.net",6667)
- irc.sendRaw("JOIN #nim")
- os.Sleep(4000)
|