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;
            }
        }
예제 #2
0
 private void ClientSocketManager_AsyncOnClientDataRecived(ClientSocket client, string content) =>
 ActionsConcurrentQueue.Enqueue(() => OnClientDataRecived?.Invoke(client, content));