/// <summary> /// Отправляет запрос на сервер /// </summary> /// <param name="operType">Тип операции</param> /// <param name="oper">Объект операции</param> public void SendRequest(OpearationTypes operType, IOperation oper) { LogService.Trace($"Клиент отправляет {operType}"); try { string bodyJson; if (operType == OpearationTypes.ShipArrangement) { var arr = (ShipArrangement)oper; bodyJson = CryptSystem.ArrangementToByte(arr.Arragment); } else { // Сериализуем тело ответа в строку Json bodyJson = oper != null?JsonConvert.SerializeObject(oper) : ""; } JsonData jsonData = new JsonData(operType, bodyJson); // Сериализуем объект ответа в строку Json string outData = JsonConvert.SerializeObject(jsonData); // Отправляем данные клиенту byte[] sendBytes = Encoding.UTF8.GetBytes(outData); _networkStream.Write(sendBytes, 0, sendBytes.Length); LogService.Trace($"Отправлено: {outData}"); } catch (Exception e) { LogService.Trace($"Не удалось отправить: {e.Message}"); } }
public void SendOperation(PlayerRole role, OpearationTypes operType, IOperation oper) { if (role == PlayerRole.Server) { Server.SendResponse(operType, oper); } else { Client.SendRequest(operType, oper); } }
/// <summary> /// Преобразовывает Json в объект /// </summary> /// <param name="operType">Тип операции</param> /// <param name="jsonData">Json операции</param> /// <returns></returns> public static Tuple <OpearationTypes, IOperation> GetObjectByJson(OpearationTypes operType, string jsonData) { IOperation result = null; OpearationTypes resOperType = operType; try { switch (operType) { case OpearationTypes.Shot: result = JsonConvert.DeserializeObject <Shot>(jsonData); break; case OpearationTypes.ShotResult: result = JsonConvert.DeserializeObject <ShotResult>(jsonData); break; case OpearationTypes.GameStatus: result = JsonConvert.DeserializeObject <GameStatus>(jsonData); break; case OpearationTypes.StartConfig: result = JsonConvert.DeserializeObject <StartConfig>(jsonData); break; case OpearationTypes.ShipArrangement: result = new ShipArrangement(CryptSystem.ByteToArrangement(jsonData)); break; case OpearationTypes.Error: break; case OpearationTypes.SwitchTurn: break; default: throw new ArgumentOutOfRangeException(); } LogService.Trace($"Запрос {operType} принят"); } catch (ArgumentOutOfRangeException e) { resOperType = OpearationTypes.Error; LogService.Trace($"Указана неверная операция: {e.Message}"); } catch (Exception e) { throw new Exception(e.Message); } return(Tuple.Create(resOperType, result)); }
/// <summary> /// Инициализирует объект данных для передачи /// </summary> /// <param name="operType">Тип операции</param> /// <param name="body">Тело операции</param> public JsonData(OpearationTypes operType, string body) { Header = operType; Body = body; }