Beispiel #1
0
        private void CreateAndSendPacket(string type, string message = null)
        {
            PacketStruct packetStruct = new PacketStruct
            {
                Type    = type,
                User    = username,
                Message = message
            };

            MessageQueue.Enqueue(JsonConvert.SerializeObject(packetStruct));
        }
Beispiel #2
0
        public void HandleReceiver(object _client)
        {
            // retrieve client and create reader
            TcpClient    client  = (TcpClient)_client;
            StreamReader sReader = new StreamReader(client.GetStream(), Encoding.ASCII);

            PacketStruct packet = new PacketStruct();

            while (client.Connected)
            {
                //Deserialize packet from StreamReader
                try   { packet = JsonConvert.DeserializeObject <PacketStruct>(sReader.ReadLine()); }
                catch { packet = new PacketStruct(); }

                //Check packet type and act accordingly
                switch (packet.Type)
                {
                case "join":
                    CreateAndSendPacket("send", "Server", $"{packet.User} has joined the network!");

                    CreateAndSendPacket("ucu", packet.User, JsonConvert.SerializeObject(ConnectedUsers));

                    ConnectedUsers.Add(packet.User);
                    ConnectedUsers.Sort();

                    CreateAndSendPacket("acu", packet.User);

                    break;

                case "close":
                    CreateAndSendPacket("send", "Server", $"{packet.User} has left the network!");

                    ConnectedUsers.Remove(packet.User);
                    ConnectedUsers.Sort();
                    CreateAndSendPacket("rcu", packet.User);

                    client.Dispose();
                    break;

                case "statchange":
                    CreateAndSendPacket("statchange", packet.User, packet.Message);
                    break;

                case "send":
                    CreateAndSendPacket("send", packet.User, packet.Message);
                    break;

                default:
                    client.Dispose();
                    break;
                }
            }
        }
Beispiel #3
0
        private void HandleReceiver()
        {
            //set delegates
            AddRichMsg   addRichMsg = RichMessageReceived;
            AddUserBlock addUser    = AddConnectedUser;
            DelUserBlock delUser    = RemoveConnectedUser;

            //send to server join message
            PacketStruct packetStruct = new PacketStruct
            {
                Type = "join",
                User = username
            };

            _sWriter.WriteLine(JsonConvert.SerializeObject(packetStruct));
            _sWriter.Flush();

            //while connected, recieve messages and process them
            PacketStruct packet = new PacketStruct();

            while (isConnected)
            {
                //Deserialize packet from StreamReader
                try   { packet = JsonConvert.DeserializeObject <PacketStruct>(_sReader.ReadLine()); }
                catch { packet = new PacketStruct(); }

                switch (packet.Type)
                {
                case "rcu":
                    Invoke(delUser, packet.User);
                    break;

                case "acu":
                    Invoke(addUser, packet.User);
                    break;

                case "ucu":
                    if (packet.User == username)
                    {
                        List <string> usersList = JsonConvert.DeserializeObject <List <string> >(packet.Message);

                        foreach (string user in usersList)
                        {
                            Invoke(addUser, user);
                        }
                    }
                    break;

                case "statchange":
                    ConnectedUserBlock selectedUser = (ConnectedUserBlock)Panel_ConnectedUsersList.Controls.Find(packet.User, false)[0];

                    switch (packet.Message)
                    {
                    case "0":
                        selectedUser.User_OnlineStatus.BackColor = Color.FromArgb(147, 196, 125);
                        break;

                    case "1":
                        selectedUser.User_OnlineStatus.BackColor = Color.FromArgb(255, 217, 102);
                        break;

                    case "2":
                        selectedUser.User_OnlineStatus.BackColor = Color.FromArgb(224, 102, 102);
                        break;

                    case "3":
                        selectedUser.User_OnlineStatus.BackColor = Color.FromArgb(153, 153, 153);
                        break;
                    }
                    break;

                default:
                    try { Invoke(addRichMsg, new Tuple <string, string>(packet.User, packet.Message)); }
                    catch { break; }
                    break;
                }
            }
        }