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);
        }
Beispiel #3
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);
            }
        }
Beispiel #4
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;
            }
        }