private void CreateAndSendPacket(string type, string message = null) { PacketStruct packetStruct = new PacketStruct { Type = type, User = username, Message = message }; MessageQueue.Enqueue(JsonConvert.SerializeObject(packetStruct)); }
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; } } }
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; } } }