public void SendData(String Data, String ClientId) { try { var _DataToSend = Helpers.DataCompressor.Zip(Data); if (_DataToSend.Length <= 32022) { PacketData xdata = new PacketData(); xdata.Packet_Type = (UInt16)PacketType.TYPE_Message; xdata.Packet_SubType = (UInt16)PacketTypeSubmessage.SUBMSG_MessageEnd; xdata.Packet_Size = (UInt16)Marshal.SizeOf(typeof(PacketData)); _DataToSend.CopyTo(xdata.Data, 0); xdata = xdata.SignPacket(SoftConfigs._LocalConfig.PrivateKey); Byte[] _Data = PacketFunctions.StructureToByteArray(xdata); SendMessage(ClientId, _Data, PacketType.TYPE_Message); } else { // ToDo } } catch (Exception ex) { // ToDo } }
void RequestNewConnectionCredentials(String _ClientId) { try { PacketData xdata = new PacketData(); xdata.Packet_Type = (UInt16)PacketType.TYPE_RequestCredentials; xdata.Packet_Size = (UInt16)Marshal.SizeOf(typeof(PacketData)); if (!_WorkerSockets.ContainsKey(_ClientId)) { return; } lock (_WorkerSockets) { String _ClientAddr = ((IPEndPoint)_WorkerSockets[_ClientId].UserSocket.RemoteEndPoint).Address.ToString(); Helpers.DataCompressor.Zip(_ClientAddr).CopyTo(xdata.Data, 0); Byte[] _Data = PacketFunctions.StructureToByteArray(xdata); if (_WorkerSockets[_ClientId].UserSocket.Connected) { SendMessage(_ClientId, _Data, PacketType.TYPE_RequestCredentials); } } } catch (Exception ex) { // ToDo } }
void CleanConnections(Object state) { try { List <String> ClientIDsToClear = new List <String>(); lock (_WorkerSockets) { foreach (var _Sock in _WorkerSockets.Values) { TimeSpan diff = DateTime.Now - PacketFunctions.UnixTimeStampToDateTime(_Sock.Timestamp); if (diff.TotalSeconds >= 60 || _Sock.UserSocket.Connected == false)//10 minutes { // ClientIDsToClear.Add(_Sock.Id); ToDo } } } if (ClientIDsToClear.Count > 0) { foreach (var _Guid in ClientIDsToClear) { SendMessageOfClientDisconnect(_Guid); CleanupDeadClient(_Guid); Thread.Sleep(5); } } } catch { } }
void CheckUserCredentials(String ClientId, Byte[] _Data) { try { PacketData IncomingData = new PacketData(); IncomingData = (PacketData)PacketFunctions.ByteArrayToStructure(_Data, typeof(PacketData)); lock (_WorkerSockets) { if (PacketFunctions.Verify(IncomingData)) { _WorkerSockets[ClientId].Timestamp = IncomingData.Timestamp; _WorkerSockets[ClientId].Accepted = true; _WorkerSockets[ClientId].Signature = IncomingData.Signature.NormalizeChars(); _WorkerSockets[ClientId].PublicKey = IncomingData.PublicKey.NormalizeChars(); SendRegisteredMessage(ClientId); } else { ClientDisconnect(ClientId); } } } catch (Exception ex) { // ToDo } }
void SendRegisteredMessage(String ClientId) { try { PacketData xdata = new PacketData(); xdata.Packet_Type = (UInt16)PacketType.TYPE_Registered; xdata.Packet_Size = (UInt16)Marshal.SizeOf(typeof(PacketData)); xdata = xdata.SignPacket(SoftConfigs._LocalConfig.PrivateKey); Byte[] _Data = PacketFunctions.StructureToByteArray(xdata); SendMessage(ClientId, _Data, PacketType.TYPE_Registered); } catch { } }
void SendMessageOfClientDisconnect(String _ClientId) { try { PacketData xdata = new PacketData(); xdata.Packet_Type = (UInt16)PacketType.TYPE_ClientDisconnecting; xdata.Packet_Size = (UInt16)Marshal.SizeOf(typeof(PacketData)); Byte[] _Data = PacketFunctions.StructureToByteArray(xdata); SendMessage(_ClientId, _Data, PacketType.TYPE_ClientDisconnecting); } catch (Exception ex) { // ToDo } }
void SendCredentials(String ClientId) { try { PacketData xdata = new PacketData(); xdata.Packet_Type = (UInt16)PacketType.TYPE_MyCredentials; xdata.Packet_Size = (UInt16)Marshal.SizeOf(typeof(PacketData)); xdata = xdata.SignPacket(SoftConfigs._LocalConfig.PrivateKey); Byte[] _Data = PacketFunctions.StructureToByteArray(xdata); SendMessage(ClientId, _Data, PacketType.TYPE_MyCredentials); } catch (Exception ex) { // ToDo } }
void AssembleMessage(String _ClientID, Byte[] _Data) { try { PacketData IncomingData = new PacketData(); IncomingData = (PacketData)PacketFunctions.ByteArrayToStructure(_Data, typeof(PacketData)); if (IncomingData.Verify() == false) { return; } switch (IncomingData.Packet_SubType) { case (UInt16)PacketTypeSubmessage.SUBMSG_MessageStart: { if (_WorkerSockets.ContainsKey(_ClientID)) { _WorkerSockets[_ClientID].MessageBuilder = new List <byte>(IncomingData.Data); } } break; case (UInt16)PacketTypeSubmessage.SUBMSG_MessageBody: { _WorkerSockets[_ClientID].MessageBuilder.AddRange(IncomingData.Data); } break; case (UInt16)PacketTypeSubmessage.SUBMSG_MessageEnd: { _WorkerSockets[_ClientID].MessageBuilder.AddRange(IncomingData.Data); var _UncompressedData = Helpers.DataCompressor.Unzip(_WorkerSockets[_ClientID].MessageBuilder.ToArray()); var _JObj = JObject.Parse(_UncompressedData); if (_FinalizedMessages.ContainsKey(_ClientID)) { _FinalizedMessages[_ClientID].Add(_JObj); } else { _FinalizedMessages.Add(_ClientID, new List <JObject>() { _JObj }); } _WorkerSockets[_ClientID].MessageBuilder = new List <byte>(); PacketData _Responce = new PacketData(); _Responce.Packet_Type = (UInt16)PacketType.TYPE_MessageReceived; Helpers.DataCompressor.Zip((String)_JObj["id"]).CopyTo(_Responce.Data, 0); //_FinalizedMessages Byte[] _ResponceData = PacketFunctions.StructureToByteArray(_Responce); SendMessage(_ClientID, _ResponceData, PacketType.TYPE_MessageReceived); } break; } } catch { // ToDo } }