66 lines
1.7 KiB
Nim
66 lines
1.7 KiB
Nim
discard """
|
|
cmd: "nimrod $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 TEventArgs
|
|
Nick*: string
|
|
Message*: string
|
|
TIRC = object
|
|
EventEmitter: TEventEmitter
|
|
MessageReceivedHandler*: TEventHandler
|
|
Socket: TSocket
|
|
Thread: TThread[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: TThread[TIRC]
|
|
createThread(thread, handleData, irc)
|
|
irc.Thread = thread
|
|
|
|
|
|
|
|
|
|
when isMainModule:
|
|
var irc = initIRC()
|
|
irc.Connect("AmryBot[Nim]","irc.freenode.net",6667)
|
|
irc.sendRaw("JOIN #nimrod")
|
|
os.Sleep(4000)
|