//конструктор public Game(Socket first, Socket second, string path) { this.first = first; this.second = second; this.path = path; this.cur = lastStep.init; }
//инициализация по готовому объекту public void init(Game a) { cur = a.cur; firstRequest = a.firstRequest; firstResponse = a.firstResponse; secondRequest = a.secondRequest; secondResponse = a.secondResponse; }
//основной поток игры со всеми пересылками public void Process() { int bytes = 0; // количество полученных байтов byte[] data = new byte[256]; // буфер для получаемых данных while (true) { // получаем сообщение от первого StringBuilder builder = new StringBuilder(); //считываем в data то, что пришло bytes = first.Receive(data); //переводим байты в строку builder.Append(Encoding.Unicode.GetString(data, 0, bytes)); //парсим из json'a firstRequest = Packet.fromJson(builder.ToString()); //отмечаем, что первый прислал результат cur = lastStep.recFirst; //сохраняем состояние в файл exportToFile(path); //очищаем построитель строк builder.Clear(); // получаем сообщение от второго - так же как и с первым bytes = second.Receive(data); builder.Append(Encoding.Unicode.GetString(data, 0, bytes)); secondRequest = Packet.fromJson(builder.ToString()); cur = lastStep.recSecond; exportToFile(path); builder.Clear(); // производим игру OneRound(); cur = lastStep.wasGame; exportToFile(path); // отправляем ответ первому first.Send(Encoding.Unicode.GetBytes(firstResponse.toJson())); cur = lastStep.sendFirst; exportToFile(path); // отправляем ответ второму second.Send(Encoding.Unicode.GetBytes(secondResponse.toJson())); cur = lastStep.sendSecond; log("Первый: " + nameState(firstRequest.State) + "; " + "Второй: " + nameState(secondRequest.State) + "; " + "Итог: " + nameState(firstResponse.State) + "-" + nameState(secondResponse.State)); cur = lastStep.init; exportToFile(path); } }