示例#1
0
        /// <summary>
        /// Пинг
        /// </summary>
        /// <returns></returns>
        public bool ServicePing()
        {
            try
            {
                lock (LockObj)
                {
                    Client.SendMessage(new byte[1] {
                        0x00
                    });

                    var rec = Client.ReceiveBytes();

                    return(rec.Length == 1 && rec[0] == 0x00);
                }
            }
            catch (Exception e)
            {
                ErrorMessage = e.Message
                               + (e.InnerException == null ? "" : " -> " + e.InnerException.Message);
                ExceptionUtil.ExceptionLog(e, "Client ServicePing ");
                return(false);
            }
        }
示例#2
0
 /// <summary>
 /// Передаем и принимаем объект ModelContainer
 /// </summary>
 private ModelContainer Trans(ModelContainer sendObj)
 {
     lock (this)
     {
         //Loger.Log("Client T1");
         var ob = GZip.ZipObjByte(sendObj); //Serialize
         //Loger.Log("Client Push " + Loger.Bytes(ob));
         var send = CryptoProvider.SymmetricEncrypt(ob, Key);
         //Loger.Log("Client Send");
         Client.SendMessage(send);
         //Loger.Log("Client Receive");
         var rec = Client.ReceiveBytes();
         //Loger.Log("Client Received");
         var rec2 = CryptoProvider.SymmetricDecrypt(rec, Key);
         //Loger.Log("Client Pop " + Loger.Bytes(rec2));
         return((ModelContainer)GZip.UnzipObjByte(rec2)); //Deserialize
     }
 }
示例#3
0
        public bool Connect(string addr, int port = 0)
        {
            ErrorMessage = null;
            if (port == 0)
            {
                port = DefaultPort;
            }
            try
            {
                IsLogined = false;
                if (Client != null)
                {
                    Client.Dispose();
                }
            }
            catch
            { }

            try
            {
                //Loger.Log("Client Connect1");
                // Generate open-close keys  KClose-KOpen
                //Генерим рандомную пару КЗакр-КОткр
                var crypto = new CryptoProvider();
                if (UseCryptoKeys)
                {
                    crypto.GenerateKeys();
                }

                //Loger.Log("Client Connect2");
                Client = new ConnectClient(addr, port);

                //Loger.Log("Client Connect3");//Строго первый пакет: Передаем серверу КОткр
                if (UseCryptoKeys)
                {
                    Client.SendMessage(Encoding.UTF8.GetBytes(crypto.OpenKey));
                }
                else
                {
                    Client.SendMessage(new byte[1] {
                        0x00
                    });
                }

                //Loger.Log("Client Connect4");
                //Строго первый ответ: Передаем клиенту КОткр(Сессия)
                var rc = Client.ReceiveBytes();
                if (UseCryptoKeys)
                {
                    Key = crypto.Decrypt(rc);
                }
                else
                {
                    Key = rc;
                }

                //Loger.Log("Client Connect5");
                //Обмен по протоколу ниже: Передаем серверу Сессия(Логин - Пароль или запрос на создание)

                //Запускаем таймер фоново поддерживающий открытое соединение при простое
                ConnectSaver.AddClient(Client, (cl) =>
                {
                    lock (LockObj)
                    {
                        cl.SendMessage(new byte[1] {
                            0x00
                        });
                        cl.ReceiveBytes();
                    }
                });

                return(true);
            }
            catch (Exception e)
            {
                ErrorMessage = e.Message
                               + (e.InnerException == null ? "" : " -> " + e.InnerException.Message);
                ExceptionUtil.ExceptionLog(e, "Client");
                return(false);
            }
        }