Пример #1
0
        private void ClientOnOnMessageReceived(object sender, OnMessageReceivedArgs e)
        {
            var userName = e.ChatMessage.Username;
            var message  = e.ChatMessage.Message.Trim();

            Debug.Log($"[Client] {userName}: {message}");

            var user = _db.GetOrCreate(userName);

            user.IsActive        = true;
            user.LastInteraction = Time.time;

            user.IsModerator   = e.ChatMessage.IsModerator;
            user.IsBroadcaster = e.ChatMessage.IsBroadcaster;
            user.IsSubscriber  = e.ChatMessage.IsSubscriber;

            OnUserMessage?.Invoke(user, message);
        }
Пример #2
0
        public void ReadNextPacket()
        {
            var recv = messageQueue.Dequeue();

            ByteUtil.DumpNum(recv.Buffer);

            if (recv.Buffer[0] == (byte)Protocol.C_Connect)
            {
                var peer = new NetworkPeer()
                {
                    IPAddress = recv.RemoteEndPoint
                };
                CConnectRequest packet;

                try {
                    packet = ClassSerializer.Deserialize <CConnectRequest>(recv.Buffer);
                } catch (Exception e) {
                    // packet was mutated, ignore and move on.
                    //return;
                    throw e;
                }

                (bool accept, string reason) = OnConnectingCheck(peer, packet);
                if (accept == true)
                {
                    User user = new User()
                    {
                        NetworkID = Guid.NewGuid(),
                        Nickname  = packet.Nickname,
                        IPAddress = peer.IPAddress,
                    };
                    Send(user, new SPConnectAccept(user.NetworkID));
                    OnUserConnect(user);
                }
                else
                {
                    Send(peer, new SPConnectDeny(reason));
                }

                //OnUserConnectRequest?.Invoke(this, args);
            }
            else if (recv.Buffer[0] == (byte)Protocol.C_Disconnect)
            {
                User user = GetUserByIP(recv.RemoteEndPoint);

                if (user != null)
                {
                    OnUserDisconnect(user);
                    return;
                }
            }
            else
            {
                User user = GetUserByIP(recv.RemoteEndPoint);

                if (user != null)
                {
                    OnUserMessage?.Invoke(user, recv.Buffer);
                    return;
                }
                Console.WriteLine("Could not find user?");
            }
        }