2

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 を他のプレイヤーを探すようにするにはどうすればよいか、アドバイスをいただけないでしょうか。プレーヤーの状態を常にチェックする反復、2 番目のプレーヤーが START と入力するのを待つ高レベル関数 (それが可能かどうかはわかりません)、Lwt ウェイカー、Lwt ブロードキャスト、別の a' Lwt の作成 (Sleep until) を含むリストを使用する必要があります。 Lwt.tの選手が2人か何か?それを最も賢い方法で実装する方法がわかりません。ありがとうございます。

4

1 に答える 1

1

1 つの可能性:

connect 関数で、新しい接続をそれぞれ に配置しLwt_mvarます。

ループするLwt.asyncスレッドを用意します。各反復で、mvar から 2 つの接続を取得し、それらの間でゲームを生成します。

于 2015-08-23T11:00:19.867 に答える