diff options
-rw-r--r-- | lib/pure/irc.nim | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/lib/pure/irc.nim b/lib/pure/irc.nim index c546b25db..81a1befb5 100644 --- a/lib/pure/irc.nim +++ b/lib/pure/irc.nim @@ -33,7 +33,12 @@ type address: string port: TPort nick, user, realname, serverPass: string - sock: TSocket + case isAsync: bool + of false: + sock: TSocket + of true: + handleEvent: proc (irc: var TAsyncIRC, ev: TIRCEvent) {.closure.} + asyncSock: PAsyncSocket status: TInfo lastPing: float lastPong: float @@ -44,8 +49,6 @@ type PAsyncIRC* = ref TAsyncIRC TAsyncIRC* = object of TIRC - handleEvent: proc (irc: var TAsyncIRC, ev: TIRCEvent) {.closure.} - asyncSock: PAsyncSocket TIRCMType* = enum MUnknown, @@ -92,7 +95,10 @@ proc send*(irc: var TIRC, message: string, sendImmediately = false) = if sendMsg: try: - irc.sock.send(message & "\c\L") + if irc.isAsync: + irc.asyncSock.send(message & "\c\L") + else: + irc.sock.send(message & "\c\L") except EOS: # Assuming disconnection of every EOS could be bad, # but I can't exactly check for EBrokenPipe. @@ -359,10 +365,10 @@ proc handleRead(s: PAsyncSocket, irc: PAsyncIRC) = var ev: TIRCEvent irc[].close() ev.typ = EvDisconnected - irc.handleEvent(irc[], ev) + irc[].handleEvent(irc[], ev) else: var ev = irc[].processLine(line.string) - irc.handleEvent(irc[], ev) + irc[].handleEvent(irc[], ev) discard """proc handleRead(h: PObject) = var irc = PAsyncIRC(h) @@ -409,6 +415,7 @@ proc asyncIRC*(address: string, port: TPort = 6667.TPort, ## synchronous IRC client implementation, use ``irc`` for that. new(result) + result.isAsync = true result.address = address result.port = port result.nick = nick |