예제 #1
0
 //конструктор
 public Game(Socket first, Socket second, string path)
 {
     this.first  = first;
     this.second = second;
     this.path   = path;
     this.cur    = lastStep.init;
 }
예제 #2
0
 //инициализация по готовому объекту
 public void init(Game a)
 {
     cur            = a.cur;
     firstRequest   = a.firstRequest;
     firstResponse  = a.firstResponse;
     secondRequest  = a.secondRequest;
     secondResponse = a.secondResponse;
 }
예제 #3
0
            //основной поток игры со всеми пересылками
            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);
                }
            }