private void ReadLoop() { while (true) { if (tcpClient.Available > 0) { var bytes = new byte[tcpClient.ReceiveBufferSize]; stream.Read(bytes, 0, tcpClient.Available); var messages = IRCMessage.Factory(bytes); foreach (IRCMessage message in messages) { //Console.WriteLine("> " + message.RawTrimmed); //Console.WriteLine($"{message.User}: {message.RawParameters}"); MessageHandler(message); OnRawMessage?.Invoke(message); } } if (sendQueue.TryDequeue(out var msg)) { writer.WriteLine(msg); writer.Flush(); Console.WriteLine("< " + msg); } } }
void _Connection_HandleMessage(Command cmd) { OnRawMessage?.Invoke(this, new CommandEventArgs(cmd)); bool preRun = false; Channel preChannel = null; // Run initial join before calling the handler if (cmd.Token == "JCH" && ((preChannel = _Channels .FirstOrDefault(c => c.ID .Equals((cmd as Server_JCH_ChannelJoin).Channel , StringComparison.CurrentCultureIgnoreCase))) == null || (preChannel != null && !preChannel.Joined))) { var chan = GetOrCreateChannel((cmd as Server_JCH_ChannelJoin).Channel); chan.PushCommand(cmd); preRun = true; } if (_Handlers.ContainsKey(cmd.Token)) { _Handlers[cmd.Token]?.Invoke(this, cmd); } else { Debug.WriteLine(string.Format("Unhandled command; {0}", cmd.Token)); } if (!preRun && cmd is Command.IChannelCommand && !string.IsNullOrEmpty((cmd as Command.IChannelCommand).Channel)) { var channel = GetOrCreateChannel((cmd as Command.IChannelCommand).Channel); channel.PushCommand(cmd); if (channel.IsDisposed) { _Channels.Remove(channel); } } }
public void Receive(byte[] payload) { string incomingObject = Encoding.UTF8.GetString(payload); OnRawMessage?.Invoke(incomingObject); try { var t = JsonConvert.DeserializeObject <Msg>(incomingObject); if (t.Type == Msg.Types.Ping) { //Log.Info("PING"); _pingEvent.Set(); return; } else { } OnMessage?.Invoke(t); } catch (Exception e) { OnError?.Invoke(e); } }
protected override void OnMessage(WebSocketSharp.MessageEventArgs e) { OnRawMessage?.Invoke(e.Data); }