2

我将继续编写井字游戏服务器的简单实现(通过 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 唤醒器、Lwt 广播、创建另一个 a' Lwt 至有2个Lwt.t玩家什么的?我不知道如何以最聪明的方式实现。非常感谢。

4

1 回答 1

1

一种可能:

让 connect 函数将每个新连接放入Lwt_mvar.

有一个Lwt.async循环的线程。在每次迭代中,从 mvar 获取两个连接并在它们之间产生一个游戏。

于 2015-08-23T11:00:19.867 回答