public void Disconnect() { try { IsLogined = false; if (Client != null) { Client.Dispose(); } } catch { } Client = null; }
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); } }
public static void AddClient(ConnectClient client, Action <ConnectClient> ping) { Clients.Add(client, ping); StartWorker(); }