2015-08-22 67 views
2

我正在編寫井字遊戲服務器的簡單實現(通過telnet)。任務 - 玩家連接到服務器,在發送START之後,服務器查找輸入START的夥伴,遊戲開始。一段代碼:Ocaml Lwt - 多人遊戲的一些實現

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尤其是)。那麼,你會如此友善,給我一些建議,讓玩家開始尋找其他玩家?我應該使用列表與所有時間迭代檢查球員狀態,等待第二個玩家鍵入開始(我不知道這是可能的),Lwt wakers,Lwt廣播的高級功能,創建另一個'Lwt至極是睡眠,直到有2 Lwt.t球員或什麼?我不知道如何實現這個最聰明的方法。非常感謝。

回答

1

一種可能性:

具有連接功能放在一個Lwt_mvar每個新連接。

有一個Lwt.async線程循環。在每次迭代中,從mvar獲得兩個連接並在它們之間產生一個遊戲。

+0

謝謝。 Lwt_mvar使代碼更加冗長,非常方便。 –