Skip to content

Instantly share code, notes, and snippets.

@AzureKitsune
Created August 11, 2011 20:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save AzureKitsune/1140601 to your computer and use it in GitHub Desktop.
Save AzureKitsune/1140601 to your computer and use it in GitHub Desktop.
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 =
var irc: TIRC
irc.Socket = socket()
irc.EventEmitter = initEventEmitter()
irc.MessageReceivedHandler = initEventHandler("MessageReceived")
proc IsConnected*(irc: var TIRC): bool =
return not running(irc.Thread) #Implements finish so using NOT
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)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment