Ejemplo n.º 1
0
        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);
                }
            }
        }
Ejemplo n.º 2
0
        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);
                }
            }
        }
Ejemplo n.º 3
0
        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);
            }
        }
Ejemplo n.º 4
0
 protected override void OnMessage(WebSocketSharp.MessageEventArgs e)
 {
     OnRawMessage?.Invoke(e.Data);
 }
Ejemplo n.º 5
0
 public async Task InvokeRawMessage(RawMessageEventArgs e)
 {
     await OnRawMessage.InvokeAsync(this, e);
 }
Ejemplo n.º 6
0
 private async Task _InvokeRawMessage(RawMessageEventArgs e)
 {
     await OnRawMessage.InvokeAsync(this, e);
 }