/// <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); } }
/// <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 } }
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); } }