private void SocketServer_OnClientDataRecived(ClientSocket client, string msg) { OnMessageRecived?.Invoke(string.Format("SocketServer_OnClientDataRecived {0}", msg)); JObject jObject = JObject.Parse(msg); PacketType packetType = (PacketType)Enum.Parse(typeof(PacketType), jObject.ToObject <Packet>().PacketType); if (packetType == PacketType.ClientConnected) { if (!ChatClientManager.ReadOnlyChatClients.ContainsKey(client.IPAddress)) { ChatClient chatClient = ChatClientManager.AddClient(client, jObject.ToObject <ClientConnected>()); OnMessageRecived?.Invoke(string.Format("Client {0} authenticized", client.IPAddress.ToString())); OnClientConnected?.Invoke(chatClient); } else { OnErrMessageRecived?.Invoke(string.Format("Client {0} trying authenticize mulitiple times!", client.IPAddress.ToString())); } return; } if (ChatClientManager.ReadOnlyChatClients.ContainsKey(client.IPAddress) == false) { OnErrMessageRecived?.Invoke(string.Format("Unauthenticized or Disposed client {0} trying send data!", client.IPAddress.ToString())); return; } ChatClient indexedClient = ChatClientManager.ReadOnlyChatClients[client.IPAddress]; switch (packetType) { case PacketType.ClientDisConnect: if (SocketServer.ClientSockets.ContainsKey(client.IPAddress)) { indexedClient.ClientSocket.Dispose(); OnMessageRecived?.Invoke(string.Format("client {0} disposed", client.IPAddress.ToString())); } break; case PacketType.Message: indexedClient.OnRootMessageRecived(jObject.ToObject <Message>()); OnMessageRecived?.Invoke(string.Format("Message recived from client {0}", client.IPAddress.ToString())); OnClientDataRecived?.Invoke(indexedClient, jObject); break; case PacketType.GPS: indexedClient.GPSdata = new GPSdata(jObject.ToObject <GPS>().GPSdata); OnMessageRecived?.Invoke(string.Format("GPS value recived from client {0}", client.IPAddress.ToString())); OnClientDataRecived?.Invoke(indexedClient, jObject); break; default: OnErrMessageRecived?.Invoke(string.Format("Unidentified packet {0} recived from client {1}", ((int)packetType).ToString(), client.IPAddress.ToString())); break; } }
private void ClientSocketManager_AsyncOnClientDataRecived(ClientSocket client, string content) => ActionsConcurrentQueue.Enqueue(() => OnClientDataRecived?.Invoke(client, content));