Exemplo n.º 1
0
        private void Peer_ReadLine(object sender, ReadLineEventArgs e)
        {
            var type   = peerManager.GetType();
            var method = type.GetMethod("Peer_ReadLine", BindingFlags.NonPublic | BindingFlags.Instance);

            method.Invoke(peerManager, new object[] { sender, e });
        }
Exemplo n.º 2
0
 internal void HandleOnReadLine(object sender, ReadLineEventArgs e)
 {
     if (OnReadLine != null)
     {
         OnReadLine(this, e);
     }
 }
Exemplo n.º 3
0
        public void PeerReadLineDuplicateRemoving()
        {
            var peerManager = new PeerManager()
            {
                PeerCount    = () => 100,
                PeerId       = () => 1,
                ProtocolTime = () => DateTime.Now,
            };

            peerManager.ConnectionsChanged += (s, e) => { };

            var count = 0;

            peerManager.OnAreapeers += (s, e) => { count++; };

            var line      = "561 1 ABC:2022/01/01 00-00-00:001,100";
            var packet    = Packet.Parse(line);
            var eventArgs = new ReadLineEventArgs()
            {
                line = line, packet = packet
            };

            var readLine = peerManager.GetType().GetMethod("Peer_ReadLine", BindingFlags.Instance | BindingFlags.NonPublic);

            Enumerable.Range(0, 5).ToList().ForEach(x => readLine.Invoke(peerManager, new object[] { null, eventArgs }));

            Assert.AreEqual(1, count);
        }
Exemplo n.º 4
0
 void ClientOnReadLine(object sender, ReadLineEventArgs e)
 {
     _events.Enqueue(new IrcEvent {
         Type = IrcEvent.EventType.ReadLine, Event = e
     });
     _waitHandle.Set();
 }
Exemplo n.º 5
0
        private void Relay(Manager.Peer peer, CRLFSocket socket, Packet packet)
        {
            ReadLineEventArgs eventArgs = new ReadLineEventArgs();

            eventArgs.packet = packet;

            ReadLine(this, eventArgs);
        }
Exemplo n.º 6
0
 public static void IrcConnectionListCallback(object sender, ReadLineEventArgs e)
 {
     string[] linear = e.Line.Split(new char[] { ' ' });
     if (linear.Length >= 5 && linear[1] == "322")
     {
         Console.WriteLine("On the IRC channel " + CHANNEL + " are " + linear[4] + " users");
         ((IrcConnection)sender).Disconnect();
     }
 }
Exemplo n.º 7
0
 private void ReadLine(object sender, ReadLineEventArgs e)
 {
     if (_logging)
     {
         Common.Log($"Received: {e.Line}");
     }
     OnSendReceiveData?.Invoke(this, new OnSendReceiveDataArgs {
         Direction = Enums.SendReceiveDirection.Received, Data = e.Line
     });
     ParseIrcMessage(e.Line);
 }
Exemplo n.º 8
0
        private bool ProcessNetworkInquiry(object sender, ReadLineEventArgs e)
        {
            // 調査エコー
            if (e.packet.Code == 615)
            {
                if (e.packet.Data == null || e.packet.Data.Length < 2)
                {
                    return(true);
                }

                Send(e.packet, (Peer)sender);

                // リプライ送信
                var packet = new Packet();
                packet.Code = 635;
                packet.Hop  = 1;
                packet.Data = new string[]
                {
                    e.packet.Data[0],
                    e.packet.Data[1],
                    PeerId().ToString(),
                    string.Join(",", peerList.Select(peer => peer.PeerData.PeerId)),
                    (e.packet.Hop - 1).ToString()
                };
                ((Peer)sender).Send(packet);

                return(true);
            }

            // 調査エコーリプライ
            if (e.packet.Code == 635)
            {
                if (e.packet.Data == null || e.packet.Data.Length < 5)
                {
                    return(true);
                }

                var peer = networkInquiryManager.FindPeer(e.packet.Data[0], e.packet.Data[1]);
                if (peer == null || !peer.IsConnected)
                {
                    Send(e.packet, (Peer)sender);
                }
                else
                {
                    peer.Send(e.packet);
                }
                return(true);
            }

            return(false);
        }
Exemplo n.º 9
0
        private void Invoke(Packet packet)
        {
            var eventArgs = new ReadLineEventArgs();

            eventArgs.packet = packet;

            var type = peer.GetType();

            type.InvokeMember(
                "Socket_ReadLine",
                BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.InvokeMethod,
                null,
                peer,
                new object[] { this, eventArgs }
                );
        }
Exemplo n.º 10
0
        void Socket_ReadLine(object sender, ReadLineEventArgs e)
        {
            Packet packet     = e.packet;
            string methodName = PeerConst.GetCodeName(packet.Code);

            if (methodName == null)
            {
                return;
            }

            Type       type       = state.GetType();
            MethodInfo methodInfo = type.GetMethod(methodName);

            object[] args = { this, socket, packet };

            methodInfo.Invoke(state, args);
        }
Exemplo n.º 11
0
        /// <summary>
        /// Handles the IRC OnReadLine event.
        /// </summary>
        /// <param name="sender">Sender.</param>
        /// <param name="e">EventArgs.</param>
        void OnReadLine(object sender, ReadLineEventArgs e)
        {
            string command = e.Line.Split(' ')[1];

            if (command.Equals("PING"))
            {
                string server = e.Line.Split(' ')[2];
                irc.WriteLine("PONG " + server, Priority.Critical);
            }
            else if (command.Equals("422") || command.Equals("376"))              // 422: motd missing // 376: end of motd
            {
                if (OpList != null)
                {
                    OpList.Clear();
                }
                irc.RfcJoin(channel);
            }
        }
Exemplo n.º 12
0
        /// <summary>
        /// データを処理します。
        /// </summary>
        /// <param name="socket"></param>
        /// <param name="packet"></param>
        private void ProcessData(Object sender, ReadLineEventArgs e)
        {
            Logger.GetLog().Debug("現在の状態: " + State.GetType().Name);

            CRLFSocket socket     = (CRLFSocket)sender;
            Packet     packet     = e.packet;
            string     methodName = ClientConst.GetCodeName(packet.Code);

            Logger.GetLog().Debug("実行するメソッド: " + methodName);

            // HACK: こんなところでリフレクションを無駄に使うのはいかんでしょう。
            Type       type       = State.GetType();
            MethodInfo methodInfo = type.GetMethod(methodName);

            object[] args = { this, socket, packet };

            methodInfo.Invoke(State, args);

            Logger.GetLog().Debug("実行後の状態: " + State.GetType().Name);

            State.Process(this, socket);
        }
Exemplo n.º 13
0
        /// <summary>
        ///     Read line callback
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void OnReadLine(object sender, ReadLineEventArgs e)
        {
            try
            {
                var command = e.Line.Split(' ')[1];

                if (command.Equals("PING"))
                {
                    var server = e.Line.Split(' ')[2];

                    _irc.WriteLine("PONG " + server, Priority.Critical);
                }
                else if (command.Equals("422") || command.Equals("376")) // 422: motd missing // 376: end of motd
                {
                    _irc.RfcJoin(_ircChannel);
                }
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
            }
        }
Exemplo n.º 14
0
        internal void OnReadLineRequested(string prompt, string defaultValue, string[] options)
        {
            lock (this._locker)
            {
                if (this._cancelRequest)
                {
                    return;
                }
            }
            EventHandler <ReadLineEventArgs> readLineRequested = this.ReadLineRequested;

            if (readLineRequested != null)
            {
                ReadLineEventArgs e = new ReadLineEventArgs {
                    Client       = this,
                    Prompt       = prompt,
                    DefaultValue = defaultValue,
                    Options      = options
                };
                readLineRequested(this, e);
            }
        }
Exemplo n.º 15
0
        void Peer_ReadLine(object sender, ReadLineEventArgs e)
        {
            if (duplicateRemover.isDuplicate(e.packet))
            {
                return;
            }

            if (e.packet.Hop > Math.Max(10, Math.Sqrt(PeerCount())))
            {
                return;
            }

            RaiseDataEvent(e.packet);

            e.packet.Hop++;

            if (ProcessNetworkInquiry(sender, e))
            {
                return;
            }

            Send(e.packet, (Peer)sender);
        }
Exemplo n.º 16
0
 private void irc_OnReadLine(object sender, ReadLineEventArgs e)
 {
     //this.AddChatMsg(e.Line);
 }
Exemplo n.º 17
0
 void State_ReadLine(object sender, ReadLineEventArgs e)
 {
     ReadLine(this, e);
 }
Exemplo n.º 18
0
        private void OnReadLine(object sender, ReadLineEventArgs e)
        {
            if (_logging)
            {
                Console.WriteLine(e.Line);
            }
            if (e.Line.Split(':').Length > 2)
            {
                if (e.Line.Split(':')[2] == "You are in a maze of twisty passages, all alike.")
                {
                    _connected = true;
                    OnConnected?.Invoke(null, new OnConnectedArgs {
                        Channel = _channel, Username = TwitchUsername
                    });
                }
            }
            if (e.Line.Contains($"#{_channel}"))
            {
                var splitter = Regex.Split(e.Line, $" #{_channel}");
                var readType = splitter[0].Split(' ')[splitter[0].Split(' ').Length - 1];
                switch (readType)
                {
                case "PRIVMSG":
                    if (e.Line.Split('!')[0] == ":twitchnotify" &&
                        (e.Line.Contains("just subscribed!") || e.Line.Contains("subscribed for")))
                    {
                        var subscriber = new Subscriber(e.Line);
                        OnSubscriber?.Invoke(null,
                                             new OnSubscriberArgs {
                            Subscriber = subscriber, Channel = _channel
                        });
                    }
                    else
                    {
                        var chatMessage = new ChatMessage(e.Line);
                        _previousMessage = chatMessage;
                        OnMessageReceived?.Invoke(null, new OnMessageReceivedArgs {
                            ChatMessage = chatMessage
                        });
                        if (_commandIdentifier != '\0' && chatMessage.Message[0] == _commandIdentifier)
                        {
                            string command;
                            var    argumentsAsString = "";
                            var    argumentsAsList   = new List <string>();
                            if (chatMessage.Message.Contains(" "))
                            {
                                command = chatMessage.Message.Split(' ')[0].Substring(1,
                                                                                      chatMessage.Message.Split(' ')[0].Length - 1);
                                argumentsAsList.AddRange(
                                    chatMessage.Message.Split(' ').Where(arg => arg != _commandIdentifier + command));
                                argumentsAsString =
                                    chatMessage.Message.Replace(chatMessage.Message.Split(' ')[0] + " ", "");
                            }
                            else
                            {
                                command = chatMessage.Message.Substring(1, chatMessage.Message.Length - 1);
                            }
                            OnCommandReceived?.Invoke(null,
                                                      new OnCommandReceivedArgs
                            {
                                Command           = command,
                                ChatMessage       = chatMessage,
                                Channel           = _channel,
                                ArgumentsAsList   = argumentsAsList,
                                ArgumentsAsString = argumentsAsString
                            });
                        }
                    }
                    break;

                case "JOIN":
                    //:the_kraken_bot!the_kraken_bot@the_kraken_bot.tmi.twitch.tv JOIN #swiftyspiffy
                    OnViewerJoined?.Invoke(null,
                                           new OnViewerJoinedArgs {
                        Username = e.Line.Split('!')[1].Split('@')[0], Channel = _channel
                    });
                    break;

                case "MODE":
                    //:jtv MODE #swiftyspiffy +o swiftyspiffy
                    if (e.Line.Split(' ').Length == 4)
                    {
                        OnModeratorJoined?.Invoke(null,
                                                  new OnModeratorJoinedArgs {
                            Username = e.Line.Split(' ')[4], Channel = _channel
                        });
                    }
                    else
                    {
                        if (_logging)
                        {
                            Console.WriteLine("FAILED PARSE: " + e.Line);
                        }
                    }
                    break;

                case "NOTICE":
                    if (e.Line.Contains("Error logging in"))
                    {
                        _client.Disconnect();
                        OnIncorrectLogin?.Invoke(null,
                                                 new OnIncorrectLoginArgs
                        {
                            Exception =
                                new ErrorLoggingInException(e.Line, _credentials.TwitchUsername)
                        });
                    }
                    if (e.Line.Contains("has gone offline"))
                    {
                        OnHostLeft?.Invoke(null, null);
                    }
                    break;

                case "ROOMSTATE":
                    _state = new ChannelState(e.Line);
                    OnChannelStateChanged?.Invoke(null, new OnChannelStateChangedArgs {
                        ChannelState = _state
                    });
                    break;

                case "USERSTATE":
                    //@color=#8A2BE2;display-name=The_Kraken_Bot;emote-sets=0,5628;subscriber=0;turbo=0;user-type=mod :tmi.twitch.tv USERSTATE #swiftyspiffy
                    var userState = new UserState(e.Line);
                    OnUserStateChanged?.Invoke(null, new OnUserStateChangedArgs {
                        UserState = userState
                    });
                    break;

                default:
                    if (_logging)
                    {
                        Console.WriteLine("Unaccounted for: {0}", e.Line);
                    }
                    break;
                }
            }
            else
            {
                //Special cases
                if (e.Line == ":tmi.twitch.tv NOTICE * :Error logging in")
                {
                    _client.Disconnect();
                    OnIncorrectLogin?.Invoke(null,
                                             new OnIncorrectLoginArgs
                    {
                        Exception = new ErrorLoggingInException(e.Line, _credentials.TwitchUsername)
                    });
                }
                else
                {
                    if (_logging)
                    {
                        Console.WriteLine("Not registered: " + e.Line);
                    }
                }
            }
        }
Exemplo n.º 19
0
        private void OnReadLine(object sender, ReadLineEventArgs e)
        {
            // Hack to accomodate at least cyrillic characters, possibly more
            string decodedMessage = Encoding.UTF8.GetString(Encoding.Default.GetBytes(e.Line));

            if (_logging)
            {
                Console.WriteLine(decodedMessage);
            }
            if (decodedMessage.Split(':').Length > 2)
            {
                if (decodedMessage.Split(':')[2] == "You are in a maze of twisty passages, all alike.")
                {
                    _connected = true;
                    OnConnected?.Invoke(null, new OnConnectedArgs {
                        Channel = _channel, Username = TwitchUsername
                    });
                }
            }
            if (decodedMessage.Contains($"#{_channel}"))
            {
                var splitter = Regex.Split(decodedMessage, $" #{_channel}");
                var readType = splitter[0].Split(' ')[splitter[0].Split(' ').Length - 1];
                switch (readType)
                {
                case "PRIVMSG":
                    if (decodedMessage.Split('!')[0] == ":twitchnotify" &&
                        (decodedMessage.Contains("just subscribed!")))
                    {
                        var subscriber = new NewSubscriber(decodedMessage);
                        OnNewSubscriber?.Invoke(null,
                                                new OnNewSubscriberArgs {
                            Subscriber = subscriber, Channel = _channel
                        });
                    }
                    else
                    {
                        var chatMessage = new ChatMessage(decodedMessage);
                        _previousMessage = chatMessage;
                        OnMessageReceived?.Invoke(null, new OnMessageReceivedArgs {
                            ChatMessage = chatMessage
                        });
                        if (_commandIdentifier != '\0' && chatMessage.Message[0] == _commandIdentifier)
                        {
                            string command;
                            var    argumentsAsString = "";
                            var    argumentsAsList   = new List <string>();
                            if (chatMessage.Message.Contains(" "))
                            {
                                command = chatMessage.Message.Split(' ')[0].Substring(1,
                                                                                      chatMessage.Message.Split(' ')[0].Length - 1);
                                argumentsAsList.AddRange(
                                    chatMessage.Message.Split(' ').Where(arg => arg != _commandIdentifier + command));
                                argumentsAsString =
                                    chatMessage.Message.Replace(chatMessage.Message.Split(' ')[0] + " ", "");
                            }
                            else
                            {
                                command = chatMessage.Message.Substring(1, chatMessage.Message.Length - 1);
                            }
                            OnCommandReceived?.Invoke(null,
                                                      new OnCommandReceivedArgs
                            {
                                Command           = command,
                                ChatMessage       = chatMessage,
                                Channel           = _channel,
                                ArgumentsAsList   = argumentsAsList,
                                ArgumentsAsString = argumentsAsString
                            });
                        }
                    }
                    break;

                case "JOIN":
                    //:the_kraken_bot!the_kraken_bot@the_kraken_bot.tmi.twitch.tv JOIN #swiftyspiffy
                    OnViewerJoined?.Invoke(null,
                                           new OnViewerJoinedArgs {
                        Username = decodedMessage.Split('!')[1].Split('@')[0], Channel = _channel
                    });
                    break;

                case "MODE":
                    //:jtv MODE #swiftyspiffy +o swiftyspiffy
                    if (decodedMessage.Split(' ').Length == 4)
                    {
                        OnModeratorJoined?.Invoke(null,
                                                  new OnModeratorJoinedArgs {
                            Username = decodedMessage.Split(' ')[4], Channel = _channel
                        });
                    }
                    else
                    {
                        if (_logging)
                        {
                            Console.WriteLine("FAILED PARSE: " + decodedMessage);
                        }
                    }
                    break;

                case "NOTICE":
                    if (decodedMessage.Contains("Error logging in"))
                    {
                        _client.Disconnect();
                        OnIncorrectLogin?.Invoke(null,
                                                 new OnIncorrectLoginArgs
                        {
                            Exception =
                                new ErrorLoggingInException(decodedMessage, _credentials.TwitchUsername)
                        });
                    }
                    if (decodedMessage.Contains("has gone offline"))
                    {
                        OnHostLeft?.Invoke(null, null);
                    }
                    break;

                case "ROOMSTATE":
                    _state = new ChannelState(decodedMessage);
                    OnChannelStateChanged?.Invoke(null, new OnChannelStateChangedArgs {
                        ChannelState = _state
                    });
                    break;

                case "USERSTATE":
                    //@color=#8A2BE2;display-name=The_Kraken_Bot;emote-sets=0,5628;subscriber=0;turbo=0;user-type=mod :tmi.twitch.tv USERSTATE #swiftyspiffy
                    var userState = new UserState(decodedMessage);
                    OnUserStateChanged?.Invoke(null, new OnUserStateChangedArgs {
                        UserState = userState
                    });
                    break;

                case "USERNOTICE":
                    //@badges=subscriber/1,turbo/1;color=#2B119C;display-name=JustFunkIt;emotes=;login=justfunkit;mod=0;msg-id=resub;msg-param-months=2;room-id=44338537;subscriber=1;system-msg=JustFunkIt\ssubscribed\sfor\s2\smonths\sin\sa\srow!;turbo=1;user-id=26526370;user-type= :tmi.twitch.tv USERNOTICE #burkeblack :AVAST YEE SCURVY DOG
                    switch (decodedMessage.Split(';')[6].Split('=')[1])
                    {
                    case "resub":
                        var resubObj = new ReSubscriber(decodedMessage);
                        OnReSubscriber?.Invoke(null, new OnReSubscriberArgs {
                            ReSubscriber = resubObj
                        });
                        break;

                    default:
                        break;
                    }
                    break;

                default:
                    if (_logging)
                    {
                        Console.WriteLine("Unaccounted for: {0}", decodedMessage);
                    }
                    break;
                }
            }
            else
            {
                //Special cases
                if (decodedMessage == ":tmi.twitch.tv NOTICE * :Error logging in")
                {
                    _client.Disconnect();
                    OnIncorrectLogin?.Invoke(null,
                                             new OnIncorrectLoginArgs
                    {
                        Exception = new ErrorLoggingInException(decodedMessage, _credentials.TwitchUsername)
                    });
                }
                else
                {
                    if (_logging)
                    {
                        Console.WriteLine("Not registered: " + decodedMessage);
                    }
                }
            }
        }
 public void PluginsOnReadLine(object sender, ReadLineEventArgs e)
 {
     OnReadLine(this, e);
 }
Exemplo n.º 21
0
        private void OnReadLine(object sender, ReadLineEventArgs e)
        {
            // Hack to accomodate at least cyrillic characters, possibly more
            string decodedMessage = Encoding.UTF8.GetString(Encoding.Default.GetBytes(e.Line));

            if (_logging)
            {
                Console.WriteLine(decodedMessage);
            }

            #region Chat Parsing
            // On Connected
            if (ChatParsing.detectConnected(decodedMessage))
            {
                _connected = true;
                OnConnected?.Invoke(null, new OnConnectedArgs {
                    Channel = _channel, Username = TwitchUsername
                });
                return;
            }

            // On New Subscriber
            if (ChatParsing.detectNewSubscriber(decodedMessage, _channel))
            {
                OnNewSubscriber?.Invoke(null, new OnNewSubscriberArgs {
                    Subscriber = new NewSubscriber(decodedMessage), Channel = _channel
                });
                return;
            }

            // On Command Received (PURPOSELY DROP THROUGH WITHOUT RETURN)
            if (ChatParsing.detectCommandReceived(decodedMessage, _channel, _channelEmotes, WillReplaceEmotes, _chatCommandIdentifiers))
            {
                var    chatMessage       = new ChatMessage(decodedMessage, ref _channelEmotes, WillReplaceEmotes);
                string command           = chatMessage.Message.Split(' ')?[0].Substring(1, chatMessage.Message.Split(' ')[0].Length - 1) ?? chatMessage.Message.Substring(1, chatMessage.Message.Length - 1);
                var    argumentsAsList   = chatMessage.Message.Split(' ')?.Where(arg => arg != chatMessage.Message[0] + command).ToList <string>() ?? new List <string>();
                string argumentsAsString = chatMessage.Message.Replace(chatMessage.Message.Split(' ')?[0] +" ", "") ?? "";
                OnChatCommandReceived?.Invoke(null, new OnChatCommandReceivedArgs {
                    Command = command, ChatMessage = chatMessage, Channel = _channel, ArgumentsAsList = argumentsAsList, ArgumentsAsString = argumentsAsString
                });
                // purposely drop through without return
            }

            // On Message Received
            if (ChatParsing.detectMessageReceived(decodedMessage, _channel))
            {
                var chatMessage = new ChatMessage(decodedMessage, ref _channelEmotes, WillReplaceEmotes);
                _previousMessage = chatMessage;
                OnMessageReceived?.Invoke(null, new OnMessageReceivedArgs {
                    ChatMessage = chatMessage
                });
                return;
            }

            // On Viewer Joined
            if (ChatParsing.detectViewerJoined(decodedMessage, _channel))
            {
                OnViewerJoined?.Invoke(null, new OnViewerJoinedArgs {
                    Username = decodedMessage.Split('!')[1].Split('@')[0], Channel = _channel
                });
                return;
            }

            // On Viewer Left
            if (ChatParsing.detectedViewerLeft(decodedMessage, _channel))
            {
                OnViewerLeft?.Invoke(null, new OnViewerLeftArgs {
                    Username = decodedMessage.Split(':')[1].Split('!')[0], Channel = _channel
                });
                return;
            }

            // On Moderator Joined
            if (ChatParsing.detectedModeratorJoined(decodedMessage, _channel))
            {
                OnModeratorJoined?.Invoke(null, new OnModeratorJoinedArgs {
                    Username = decodedMessage.Split(' ')[4], Channel = _channel
                });
                return;
            }

            // On Moderator Left
            if (ChatParsing.detectedModeatorLeft(decodedMessage, _channel))
            {
                OnModeratorLeft?.Invoke(null, new OnModeratorLeftArgs {
                    Username = decodedMessage.Split(' ')[4], Channel = _channel
                });
                return;
            }

            // On Incorrect login
            if (ChatParsing.detectedIncorrectLogin(decodedMessage, _channel))
            {
                _client.Disconnect();
                OnIncorrectLogin?.Invoke(null, new OnIncorrectLoginArgs {
                    Exception = new ErrorLoggingInException(decodedMessage, _credentials.TwitchUsername)
                });
                return;
            }

            // On Host Left
            if (ChatParsing.detectedHostLeft(decodedMessage, _channel))
            {
                OnHostLeft?.Invoke(null, null);
                return;
            }

            // On Channel State Changed
            if (ChatParsing.detectedChannelStateChanged(decodedMessage, _channel))
            {
                OnChannelStateChanged?.Invoke(null, new OnChannelStateChangedArgs {
                    ChannelState = new ChannelState(decodedMessage)
                });
                return;
            }

            // On User State Changed
            if (ChatParsing.detectedUserStateChanged(decodedMessage, _channel))
            {
                OnUserStateChanged?.Invoke(null, new OnUserStateChangedArgs {
                    UserState = new UserState(decodedMessage)
                });
                return;
            }

            // On ReSubscriber
            if (ChatParsing.detectedReSubscriber(decodedMessage, _channel))
            {
                OnReSubscriber?.Invoke(null, new OnReSubscriberArgs {
                    ReSubscriber = new ReSubscriber(decodedMessage)
                });
                return;
            }

            // On PING received
            if (ChatParsing.detectedPing(decodedMessage) && !DisableAutoPong)
            {
                SendRaw("PONG :tmi.twitch.tv");
                return;
            }

            // On Hosting Stopped
            if (ChatParsing.detectedHostingStopped(decodedMessage))
            {
                int viewers;
                int.TryParse(decodedMessage.Split(' ')[4], out viewers);
                OnHostingStopped?.Invoke(null, new OnHostingStoppedArgs()
                {
                    Viewers = viewers, HostingChannel = decodedMessage.Split(' ')[2].Remove(0, 1)
                });
                return;
            }

            // On Hosting Started
            if (ChatParsing.detectedHostingStarted(decodedMessage))
            {
                int viewers;
                int.TryParse(decodedMessage.Split(' ')[4], out viewers);
                OnHostingStarted?.Invoke(null, new OnHostingStartedArgs()
                {
                    Viewers = viewers, HostingChannel = decodedMessage.Split(' ')[2].Remove(0, 1), TargetChannel = decodedMessage.Split(' ')[3].Remove(0, 1)
                });
                return;
            }

            // On Existing Users Detected
            if (ChatParsing.detectedExistingUsers(decodedMessage, _credentials.TwitchUsername))
            {
                var parsedUsers = decodedMessage.Replace($":{_credentials.TwitchUsername}.tmi.twitch.tv 353 {_credentials.TwitchUsername} = #{_channel} :", "").Split(' ');
                OnExistingUsersDetected?.Invoke(null, new OnExistingUsersDetectedArgs {
                    Channel       = _channel,
                    ExistingUsers = decodedMessage.Replace($":{_credentials.TwitchUsername}.tmi.twitch.tv 353 {_credentials.TwitchUsername} = #{_channel} :", "").Split(' ').ToList <string>()
                });
                return;
            }
            #endregion

            #region Whisper Parsing
            if (decodedMessage.Split(' ').Count() > 2 && (decodedMessage.Split(' ')[1] == "WHISPER" || decodedMessage.Split(' ')[2] == "WHISPER"))
            {
                // On Whisper Message Received
                if (WhisperParsing.detectedWhisperReceived(decodedMessage, _credentials.TwitchUsername))
                {
                    OnWhisperReceived?.Invoke(null, new OnWhisperReceivedArgs {
                        WhisperMessage = new WhisperMessage(decodedMessage, _credentials.TwitchUsername)
                    });
                    return;
                }

                // On Whisper Command Received
                if (WhisperParsing.detectedWhisperCommandReceived(decodedMessage, _credentials.TwitchUsername, _whisperCommandIdentifiers))
                {
                    var    whisperMessage    = new WhisperMessage(decodedMessage, _credentials.TwitchUsername);
                    string command           = whisperMessage.Message.Split(' ')?[0].Substring(1, whisperMessage.Message.Split(' ')[0].Length - 1) ?? whisperMessage.Message.Substring(1, whisperMessage.Message.Length - 1);
                    var    argumentsAsList   = whisperMessage.Message.Split(' ')?.Where(arg => arg != whisperMessage.Message[0] + command).ToList <string>() ?? new List <string>();
                    string argumentsAsString = whisperMessage.Message.Replace(whisperMessage.Message.Split(' ')?[0] +" ", "") ?? "";
                    OnWhisperCommandReceived?.Invoke(null, new OnWhisperCommandReceivedArgs {
                        Command = command, WhisperMessage = whisperMessage, ArgumentsAsList = argumentsAsList, ArgumentsAsString = argumentsAsString
                    });
                }
            }
            #endregion

            // Any other messages here
            if (_logging)
            {
                Console.WriteLine($"Unaccounted for: {decodedMessage}");
            }
        }
Exemplo n.º 22
0
 private void OnReadLine(object sender, ReadLineEventArgs e)
 {
     if (_logging)
     {
         Console.WriteLine(e.Line);
     }
     if (e.Line.Split(':').Length > 2)
     {
         if (e.Line.Split(':')[2] == "You are in a maze of twisty passages, all alike.")
         {
             _connected = true;
             OnConnected?.Invoke(null, new OnConnectedArgs {
                 Username = TwitchUsername
             });
         }
     }
     if (e.Line.Split(' ').Length > 3 && e.Line.Split(' ')[2] == "WHISPER")
     {
         var whisperMessage = new WhisperMessage(e.Line, _credentials.TwitchUsername);
         _previousWhisper = whisperMessage;
         OnWhisperReceived?.Invoke(null, new OnWhisperReceivedArgs {
             WhisperMessage = whisperMessage
         });
         if (_commandIdentifier == '\0' || whisperMessage.Message[0] != _commandIdentifier)
         {
             return;
         }
         string command;
         var    argumentsAsString = "";
         var    argumentsAsList   = new List <string>();
         if (whisperMessage.Message.Contains(" "))
         {
             command = whisperMessage.Message.Split(' ')[0].Substring(1,
                                                                      whisperMessage.Message.Split(' ')[0].Length - 1);
             argumentsAsList.AddRange(
                 whisperMessage.Message.Split(' ').Where(arg => arg != _commandIdentifier + command));
             argumentsAsString = whisperMessage.Message.Replace(whisperMessage.Message.Split(' ')[0] + " ", "");
         }
         else
         {
             command = whisperMessage.Message.Substring(1, whisperMessage.Message.Length - 1);
         }
         OnCommandReceived?.Invoke(null,
                                   new OnCommandReceivedArgs
         {
             Command           = command,
             Username          = whisperMessage.Username,
             ArgumentsAsList   = argumentsAsList,
             ArgumentsAsString = argumentsAsString
         });
     }
     else
     {
         //Special cases
         if (e.Line == ":tmi.twitch.tv NOTICE * :Error logging in")
         {
             _client.Disconnect();
             OnIncorrectLogin?.Invoke(null,
                                      new OnIncorrectLoginArgs
             {
                 Exception = new ErrorLoggingInException(e.Line, _credentials.TwitchUsername)
             });
         }
         else
         {
             if (_logging)
             {
                 Console.WriteLine("Not registered: " + e.Line);
             }
         }
     }
 }
Exemplo n.º 23
0
        private void KeyEvent(object sender, KeyEventArgs e)
        {
            if (historyNext && e.KeyCode != Keys.Enter)
            {
                historyNext = false;
            }

            if (hideNext)
            {
                string chr = (new KeysConverter().ConvertToString(e.KeyCode));

                hidden.SelectionStart  = input.SelectionStart - prefix.Length;
                hidden.SelectionLength = input.SelectionLength;

                if (chr == "Back")
                {
                    HiddenBackspace();
                }
                else if (chr.Length == 1)
                {
                    hidden.Text       += chr;
                    input.Text        += "X";
                    e.SuppressKeyPress = true;
                    input.Select(input.Text.Length, 0);
                }
                else
                {
                    e.SuppressKeyPress = true;
                    input.Select(input.Text.Length, 0);
                }
            }

            if (e.KeyCode == Keys.Enter)
            {
                string command = input.Text.Substring(prefix.Length);

                if (!hideNext && !choiceMode && !ignoreNext && !command.StartsWith("set pin "))
                {
                    history.Add(command);
                    if (!historyNext)
                    {
                        hIndex = history.Count;
                    }
                    else
                    {
                        historyNext = false;
                    }
                    prevCommand = command;
                }

                if (hideNext)
                {
                    tempText = hidden.Text;
                    hidden   = new TextBox();
                    hideNext = false;
                }
                else
                {
                    tempText = command;
                }
                ReadLineEventArgs args = new ReadLineEventArgs(command);
                if (!choiceMode && !ignoreNext)
                {
                    OnReadLine?.Invoke(this, args);
                }
                if (ignoreNext)
                {
                    ignoreNext = false;
                }
                input.Clear();
                input.Text = String.Empty;
                input.Text = prefix;
                input.Select(input.Text.Length, 0);
                input.Text         = input.Text.Replace("\r\n", String.Empty);
                input.Text         = input.Text.Trim();
                e.SuppressKeyPress = true;
            }

            if (e.KeyCode == Keys.Back || e.KeyCode == Keys.Left)
            {
                if (input.SelectionStart <= prefix.Length)
                {
                    e.SuppressKeyPress = true;
                }
            }

            if (e.KeyCode == Keys.Home && !hideNext)
            {
                input.Select(prefix.Length, 0);
                e.SuppressKeyPress = true;
            }

            if (e.KeyCode == Keys.Up && !hideNext)
            {
                if (hIndex > 0)
                {
                    hIndex -= 1;
                }
                if (hIndex != -1)
                {
                    LoadHistory();
                }
            }

            if (e.KeyCode == Keys.Down && !hideNext)
            {
                if ((hIndex + 1) == history.Count)
                {
                    hIndex += 1;
                }

                if (hIndex >= history.Count)
                {
                    input.Text = prefix;
                    input.Select(input.Text.Length, 0);
                    return;
                }
                hIndex += 1;
                LoadHistory();
            }
        }
Exemplo n.º 24
0
 private void CRLFSocket_FailRead(object sender, ReadLineEventArgs e)
 {
     Assert.Fail("ReadLineイベントを発生させてはいけない");
 }
Exemplo n.º 25
0
 private void _Worker(object sender, ReadLineEventArgs e)
 {
     // lets see if we have events or internal messagehandler for it
     _HandleEvents(MessageParser(e.Line));
 }
Exemplo n.º 26
0
        private void _SimpleParser(object sender, ReadLineEventArgs args)
        {
            string   rawline = args.Line;
            string[] rawlineex = rawline.Split(new char[] {' '});
            string   messagecode = "";

            if (rawline[0] == ':') {
                messagecode = rawlineex[1];

                ReplyCode replycode = ReplyCode.Null;
                try {
                    replycode = (ReplyCode)int.Parse(messagecode);
                } catch (FormatException) {
                }

                if (replycode != ReplyCode.Null) {
                    switch (replycode) {
                        case ReplyCode.Welcome:
                            _IsRegistered = true;
            #if LOG4NET
                            Logger.Connection.Info("logged in");
            #endif
                            break;
                    }
                } else {
                    switch (rawlineex[1]) {
                        case "PONG":
                            DateTime now = DateTime.Now;
                            _LastPongReceived = now;
                            _Lag = now - _LastPingSent;

            #if LOG4NET
                            Logger.Connection.Debug("PONG received, took: "+_Lag.TotalMilliseconds+" ms");
            #endif
                            break;
                    }
                }
            } else {
                messagecode = rawlineex[0];
                switch (messagecode) {
                    case "ERROR":
                        IsConnectionError = true;
                    break;
                }
            }
        }
Exemplo n.º 27
0
        public void NetworkInquiryTest()
        {
            var peerManager = new PeerManager();

            peerManager.ConnectionsChanged += (s, e) => { };
            peerManager.PeerCount          += () => { return(1000); };
            peerManager.PeerId             += () => { return(55); };

            var peerList = new List <Client.Peer.Manager.Peer>();

            int callCount = 0;

            for (int i = 0; i < 5; i++)
            {
                var crlfSocket = new CRLFSocket();

                var peer = new Client.Peer.Manager.Peer(peerManager, crlfSocket);
                peer.PeerData = new Client.Common.General.PeerData("127.0.0." + (i + 1).ToString(), 6900 + i, 100 + i);
                peer.PeerId  += () => { return(peerManager.PeerId()); };
                peerList.Add(peer);

                var mockSocket = new Mock <ISocket>();
                mockSocket.SetupGet(x => x.Connected).Returns(true);
                mockSocket.Setup(x => x.Send(It.IsAny <byte[]>())).Callback <byte[]>((k) =>
                {
                    var line = Encoding.ASCII.GetString(k);
                    if (line.StartsWith("611"))
                    {
                        return;
                    }

                    callCount++;
                    if (callCount < 5)
                    {
                        Assert.AreEqual("615 6 200:300\r\n", line);
                    }
                    if (callCount == 5)
                    {
                        Assert.AreEqual("635 1 200:300:55:100,101,102,103,104:5\r\n", line);
                    }
                });

                var crlfField = crlfSocket.GetType().GetField("socket", BindingFlags.SetField | BindingFlags.NonPublic | BindingFlags.Instance);
                crlfField.SetValue(crlfSocket, mockSocket.Object);
            }

            var field = peerManager.GetType().GetField("peerList", BindingFlags.SetField | BindingFlags.NonPublic | BindingFlags.Instance);

            field.SetValue(peerManager, peerList);

            var packet = new Packet();

            packet.Code = 615;
            packet.Hop  = 5;
            packet.Data = new string[] { "200", "300" };

            var eventArgs = new ReadLineEventArgs();

            eventArgs.line   = packet.ToPacketString();
            eventArgs.packet = packet;

            var type = peerManager.GetType();

            type.InvokeMember(
                "Peer_ReadLine",
                System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.InvokeMethod,
                null,
                peerManager,
                new object[] { peerList[0], eventArgs }
                );

            Assert.AreEqual(5, callCount);
        }