Ocaml Lwt - некоторые реализации многопользовательской игры
Я собираюсь написать простую реализацию сервера Tic-Tac-Toe (через Telnet). Задача - игроки подключаются к серверу, и после отправки START сервер ищет партнера, который тоже набрал START, и игра начинается. Кусок кода:
let handle_income () =
let con = Lwt_unix.accept sock in
con >>= fun (cli, addr) ->
let player = Lwt.return {state = Sleeping; descriptor = Lwt.return cli} in
send_to_client player "Welcome to the server. To start game type in START and press Enter";
player;;
let rec make_ready player =
player >>= fun {state; descriptor} ->
send_to_client player "Waiting for start command";
let answer = read_from_client player in
answer >>= fun str ->
match str with
|"Start" ->
let ready_client = Lwt.return { state = Ready; descriptor = descriptor} in
ready_client
| _ ->
send_to_client player "Unknown command. try again";
make_ready player;;
Я совершенно новичок в Ocaml (особенно Lwt). Итак, не могли бы вы дать мне совет, как заставить игроков начать искать другого игрока? Должен ли я использовать список с постоянной итерацией, проверяющей состояние игроков, функции высокого уровня, которые ждут второго игрока, набравшего START (я не уверен, что это возможно), LWT Waker, LWT, транслируя, создавая еще одно ' LWT, которое будет Sleep до есть 2 игрока Lwt.t или что-то? Я не знаю, как реализовать это самым умным способом. Спасибо много.
1 ответ
Одна возможность:
Имейте функцию соединения, помещают каждое новое соединение в Lwt_mvar
,
Есть Lwt.async
нить, которая зацикливается. На каждой итерации возьмите два соединения с mvar и создайте игру между ними.