Ocaml Lwt - 多人游戏

时间:2015-08-22 19:32:57

标签: ocaml multiplayer 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 wakers,Lwt广播,创建另一个& #39; Lwt wich是睡觉,直到有2个Lwt.t玩家或什么?我不知道如何以最聪明的方式实施。非常感谢。

1 个答案:

答案 0 :(得分:1)

一种可能性:

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

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