Пример #1
0
 public void Disconnect()
 {
     try
     {
         IsLogined = false;
         if (Client != null)
         {
             Client.Dispose();
         }
     }
     catch
     {
     }
     Client = null;
 }
Пример #2
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);
            }
        }
Пример #3
0
 public static void AddClient(ConnectClient client, Action <ConnectClient> ping)
 {
     Clients.Add(client, ping);
     StartWorker();
 }