public void RemoveClient(ClientSocket clientSocket)
        {
            ChatClient searched = null;

            foreach (var item in ChatClients)
            {
                if (item.Value.ClientSocket == clientSocket)
                {
                    searched = item.Value;
                    break;
                }
            }

            if (searched == null)
            {
                OnErrMessageRecived?.Invoke(
                    string.Format("ClientSocket {0} is not exist while trying RemoveClient", clientSocket.IPAddress.ToString())
                    );
                return;
            }

            searched.SendData(new ClientDisConnect());
            ChatClients.Remove(searched.ClientSocket.IPAddress);
            searched.OnGPSUpdated -= ChatClient_OnGPSUpdated;
        }
        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;
            }
        }
Esempio n. 3
0
 public void Start(IPEndPoint iPEndPoint)
 {
     if (Running == true)
     {
         OnErrMessageRecived?.Invoke("Server is already running");
         return;
     }
     Running = true;
     SocketListener.Start(iPEndPoint);
 }
 public void RemoveClient(ClientSocket clientSocket)
 {
     if (_ahemClients.TryGetValue(clientSocket.IPAddress, out AhemClient client))
     {
         client.SendData(new ClientDisConnect());
         _ahemClients.Remove(client.ClientSocket.IPAddress);
     }
     else
     {
         OnErrMessageRecived?.Invoke($"ClientSocket {clientSocket.IPAddress} is not exist while trying RemoveClient");
     }
 }
Esempio n. 5
0
        public void Stop()
        {
            if (Running == false)
            {
                OnErrMessageRecived?.Invoke("Server is not running");
                return;
            }

            SocketListener.Stop();
            ClientSocketManager.Dispose();
            Running = false;
            Thread.Sleep(1000);
        }
        public AhemClient ClientStreamDequeue(ClientSocket clientSocket, byte[] content)
        {
            AhemClient ahemClient = _ahemClients[clientSocket.IPAddress];

            if (ahemClient.StreamHeaderQueueCount == 0)
            {
                OnErrMessageRecived?.Invoke($"ClientSocket {clientSocket.IPAddress} Stream queue error");
                return(null);
            }
            else
            {
                ahemClient.StreamDequeue(clientSocket, content);
                return(ahemClient);
            }
        }
        public AhemClient AddClient(ClientSocket clientSocket, ClientConnected clientConnectedinfo)
        {
            if (_ahemClients.TryGetValue(clientSocket.IPAddress, out AhemClient searchedclient))
            {
                OnErrMessageRecived?.Invoke($"ClientSocket {clientSocket.IPAddress} is already exist while trying AddClient");
                return(searchedclient);
            }

            AhemClient chatClient = new AhemClient(
                clientSocket,
                clientConnectedinfo.User
                );

            _ahemClients.Add(clientSocket.IPAddress, chatClient);
            return(chatClient);
        }
Esempio n. 8
0
        private void SocketServer_OnClientByteStreamDataRecived(ClientSocket client, byte[] content)
        {
            OnMessageRecived?.Invoke($"SocketServer_OnClientByteStreamDataRecived Length:{content.Length}");
            if (_ahemClientManager.ReadOnlyAhemClients.TryGetValue(client.IPAddress, out AhemClient indexedClient) == false)
            {
                OnErrMessageRecived?.Invoke($"Unauthenticized or Disposed client {client.IPAddress} trying send data!");
                return;
            }

            AhemClient ahemClient = _ahemClientManager.ClientStreamDequeue(client, content);

            if (ahemClient != null)
            {
                OnClientStreamRecived?.Invoke(ahemClient, content);
            }
        }
        public ChatClient AddClient(ClientSocket clientSocket, ClientConnected clientConnectedinfo)
        {
            ChatClient searched = null;

            foreach (var item in ChatClients)
            {
                if (item.Value.ClientSocket == clientSocket)
                {
                    searched = item.Value;
                    break;
                }
            }

            if (searched != null)
            {
                OnErrMessageRecived?.Invoke(
                    string.Format("ClientSocket {0} is already exist while trying AddClient", clientSocket.IPAddress.ToString())
                    );
                return(searched);
            }

            ChatClient chatClient = new ChatClient(
                clientSocket,
                clientConnectedinfo.ChatClient.UserEmail,
                clientConnectedinfo.ChatClient.Id,
                clientConnectedinfo.ChatClient.Name,
                new GPSdata(clientConnectedinfo.GPSdata)
                );

            LinkingHelper.LinkClient(chatClient, SearchRange);
            chatClient.SendData(new LinkInfo(chatClient.LinkedClients.Count, SearchRange));
            chatClient.OnGPSUpdated += ChatClient_OnGPSUpdated;

            ChatClients.Add(clientSocket.IPAddress, chatClient);
            return(chatClient);
        }
 private void SocketServer_OnErrMessageRecived(string msg) => OnErrMessageRecived?.Invoke(msg);
Esempio n. 11
0
 private void SocketListener_AsyncOnErrMessageRecived(string msg) =>
 ActionsConcurrentQueue.Enqueue(() => OnErrMessageRecived?.Invoke(msg));
Esempio n. 12
0
        private void SocketServer_OnClientJsonDataRecived(ClientSocket client, string msg)
        {
            OnMessageRecived?.Invoke($"SocketServer_OnClientDataRecived {msg}");
            JObject jObject = JObject.Parse(msg);

            //Model.PacketType packetType = (Model.PacketType)Enum.Parse(typeof(Model.PacketType), jObject.ToObject<Packet>().PacketType);
            Model.PacketType packetType = jObject.ToObject <Packet>().PacketType;

            if (packetType == Model.PacketType.ClientConnected)
            {
                if (!_ahemClientManager.ReadOnlyAhemClients.ContainsKey(client.IPAddress))
                {
                    ClientConnected clientConnected = jObject.ToObject <ClientConnected>();
                    AhemClient      chatClient      = _ahemClientManager.AddClient(client, clientConnected);
                    OnMessageRecived?.Invoke($"Client {client.IPAddress} authenticized");
                    OnClientConnected?.Invoke(chatClient);
                    OnClientPacketRecived?.Invoke(chatClient, clientConnected);
                }
                else
                {
                    OnErrMessageRecived?.Invoke($"Client {client.IPAddress} trying authenticize mulitiple times!");
                }

                return;
            }

            AhemClient indexedClient;

            if (_ahemClientManager.ReadOnlyAhemClients.TryGetValue(client.IPAddress, out indexedClient) == false)
            {
                OnErrMessageRecived?.Invoke($"Unauthenticized or Disposed client {client.IPAddress} trying send data!");
                return;
            }

            switch (packetType)
            {
            case Model.PacketType.ClientDisConnect:
                if (_socketServer.ClientSockets.ContainsKey(client.IPAddress))
                {
                    indexedClient.ClientSocket.Dispose();
                    OnMessageRecived?.Invoke($"client {client.IPAddress} disposed");
                    OnClientPacketRecived?.Invoke(indexedClient, jObject.ToObject <ClientDisConnect>());
                }
                break;

            case Model.PacketType.UploadDocument:
                _ahemStorage.TryAddDoc(jObject.ToObject <UploadDocument>().Doc);
                break;

            case Model.PacketType.RemoveDocument:
                RemoveDocument removeDocument = jObject.ToObject <RemoveDocument>();
                _ahemStorage.RemoveDoc(removeDocument.Theme, indexedClient?.User.Id, removeDocument.DocName);
                break;

            case Model.PacketType.UploadPrivateDocument:
                UploadPrivateDocument uploadPrivateDocument = jObject.ToObject <UploadPrivateDocument>();
                _ahemStorage.TryAddPrivateDoc(uploadPrivateDocument.Doc);
                break;

            case Model.PacketType.RemovePrivateDocument:
                RemovePrivateDocument removePrivateDocument = jObject.ToObject <RemovePrivateDocument>();
                _ahemStorage.RemovePrivateDoc(indexedClient.User.Id, removePrivateDocument.DocName);
                break;

            case Model.PacketType.Like:
                Like like = jObject.ToObject <Like>();
                _ahemStorage.TryLike(like.Theme, like.DocName);
                break;

            case Model.PacketType.Unlike:
                UnLike unlike = jObject.ToObject <UnLike>();
                _ahemStorage.TryUnlike(unlike.Theme, unlike.DocName);
                break;

            case Model.PacketType.Follow:
                Follow follow = jObject.ToObject <Follow>();
                _ahemStorage.AddFollower(follow.Target.Id, indexedClient.User.Id);
                break;

            case Model.PacketType.UnFollow:
                UnFollow unFollow = jObject.ToObject <UnFollow>();
                _ahemStorage.RemoveFollower(unFollow.Target.Id, indexedClient.User.Id);
                break;

            case Model.PacketType.ReqPageData:
                ReqPageData         reqPageData     = jObject.ToObject <ReqPageData>();
                List <DocThumbnail> publicDocThumbs = _ahemStorage.GetPublicDocThumb(reqPageData.Theme, reqPageData.StartIndex, reqPageData.Count, reqPageData.DocOrder);
                indexedClient.SendData(new PageData(publicDocThumbs));
                break;

            case Model.PacketType.ReqPrivatePageData:
                ReqPrivatePageData  reqPrivatePageData = jObject.ToObject <ReqPrivatePageData>();
                List <DocThumbnail> privateDocThumbs   = _ahemStorage.GetPrivateDocThumb(indexedClient.User.Id, reqPrivatePageData.StartIndex, reqPrivatePageData.Count);
                indexedClient.SendData(new PrivatePageData(privateDocThumbs));
                break;

            case Model.PacketType.ReqDoc:
                ReqDoc reqDoc = jObject.ToObject <ReqDoc>();
                indexedClient.SendData(new PDoc(_ahemStorage.GetUserDoc(reqDoc.Author.Id, reqDoc.DocName)));
                break;

            case Model.PacketType.ReqThemes:
                indexedClient.SendData(new Themes(_ahemStorage.GetTheme()));
                break;

            case Model.PacketType.StreamHeader:
                switch (jObject.ToObject <StreamHeader>().StreamPacketType)
                {
                case StreamPacketType.Image:
                    ImageStream imageStream = jObject.ToObject <ImageStream>();
                    _ahemClientManager.ClientStreamEnqueue(client, jObject.ToObject <ImageStream>());
                    OnClientPacketRecived?.Invoke(indexedClient, imageStream);
                    break;

                default:
                    break;
                }
                break;

            default:
                OnErrMessageRecived?.Invoke($"Unidentified packet {(int)packetType} recived from client {client.IPAddress}");
                break;
            }
        }