Ocaml Lwt - 多人游戏的一些实现
Ocaml Lwt - some implementations of multiplayer game
我将继续编写 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 寻找另一个玩家?我是否应该使用具有所有时间迭代检查玩家状态的列表,等待第二个玩家键入 START 的高级函数(我不确定这是否可能),Lwt wakers,Lwt 广播,创建另一个'Lwt wich is Sleep until有 2 Lwt.t 名玩家还是什么?我不知道如何以最聪明的方式实施。非常感谢。
一种可能:
让连接函数将每个新连接放入 Lwt_mvar
。
有一个循环的 Lwt.async
线程。在每次迭代中,从 mvar 获取两个连接并在它们之间生成一个游戏。
我将继续编写 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 寻找另一个玩家?我是否应该使用具有所有时间迭代检查玩家状态的列表,等待第二个玩家键入 START 的高级函数(我不确定这是否可能),Lwt wakers,Lwt 广播,创建另一个'Lwt wich is Sleep until有 2 Lwt.t 名玩家还是什么?我不知道如何以最聪明的方式实施。非常感谢。
一种可能:
让连接函数将每个新连接放入 Lwt_mvar
。
有一个循环的 Lwt.async
线程。在每次迭代中,从 mvar 获取两个连接并在它们之间生成一个游戏。