Exemplo n.º 1
0
        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
            }
        }
Exemplo n.º 2
0
        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
            }
        }
Exemplo n.º 3
0
        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 { }
        }
Exemplo n.º 4
0
        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
            }
        }
Exemplo n.º 5
0
        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 { }
        }
Exemplo n.º 6
0
        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
            }
        }
Exemplo n.º 7
0
        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
            }
        }
Exemplo n.º 8
0
        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
            }
        }