diff options
Diffstat (limited to 'lib/pure/irc.nim')
-rw-r--r-- | lib/pure/irc.nim | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/lib/pure/irc.nim b/lib/pure/irc.nim index 09e85f234..6e9e30281 100644 --- a/lib/pure/irc.nim +++ b/lib/pure/irc.nim @@ -46,6 +46,7 @@ type TAsyncIRC* = object of TIRC userArg: PObject handleEvent: proc (irc: var TAsyncIRC, ev: TIRCEvent, userArg: PObject) + lineBuffer: TaintedString TIRCMType* = enum MUnknown, @@ -281,7 +282,7 @@ proc poll*(irc: var TIRC, ev: var TIRCEvent, var ret = socks.select(timeout) if socks.len() == 0 and ret != 0: if irc.sock.recvLine(line): - ev = irc.processLine(line) + ev = irc.processLine(line.string) result = true if processOther(irc, ev): result = true @@ -320,11 +321,22 @@ proc handleConnect(h: PObject) = proc handleRead(h: PObject) = var irc = PAsyncIRC(h) - var line = "" - if irc.sock.recvLine(line): - var ev = irc[].processLine(line) + var line = "".TaintedString + var ret = irc.sock.recvLineAsync(line) + case ret + of RecvFullLine: + var ev = irc[].processLine(irc.lineBuffer.string & line.string) irc.handleEvent(irc[], ev, irc.userArg) - + irc.lineBuffer = "".TaintedString + of RecvPartialLine: + if line.string != "": + string(irc.lineBuffer).add(line.string) + of RecvDisconnected: + var ev: TIRCEvent + ev.typ = EvDisconnected + irc.handleEvent(irc[], ev, irc.userArg) + of RecvFail: nil + proc handleTask(h: PObject) = var irc = PAsyncIRC(h) var ev: TIRCEvent |