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 и создайте игру между ними.

Другие вопросы по тегам