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; } }
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"); } }
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); }
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);
private void SocketListener_AsyncOnErrMessageRecived(string msg) => ActionsConcurrentQueue.Enqueue(() => OnErrMessageRecived?.Invoke(msg));
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; } }