Я создаю чат-сервер на языке Ocaml, используя lwt. То, что я хочу, чтобы это было в состоянии сделать, это попросить пользователя ввести псевдоним, сохранить псевдоним и затем вывести, что пользователь присоединился к чату.
Я уже пытался реализовать свой собственный код, как показано ниже.
let sessions = ref [("",Lwt_io.null)]
(* + obtain initial nick(name),
+ add (nick,outp) to !sessions, and
+ announce join to other users *)
let handle_login nr (inp,outp) =
Lwt_io.printl "Enter initial nick:" >>= (* Print a welcome message to outp *)
fun () -> Lwt_io.read_line inp >>= (* Read the user's nick from inp *)
fun s -> Lwt.return (nr := s); (* Assign the new value to nr *)
sessions := List.concat nr (* Adds nr to sessions *)
send_all nr "<joined>" >>= (* Inform the other users that the user joined *)
fun () -> Lwt.return ()
let rec send_all sender msg = Lwt.return ()
let chat_server _ (inp,outp) =
let nick = ref "" in
let _ = handle_login nick in (* Calls handle_login with nick *)
let rec main_loop () =
Lwt_io.read_line inp >>= handle_input nick outp >>= main_loop in
Lwt.catch main_loop (fun e -> handle_error e !nick inp outp)
open Lwt.Infix
let port = if Array.length Sys.argv > 1 then int_of_string (Sys.argv.(1)) else 16384
let s = Lwt_io.establish_server_with_client_address (Unix.ADDR_INET(Unix.inet_addr_any, port)) ChatServer.chat_server
let _ = Lwt_main.run (fst (Lwt.wait ()))
let _ = s >>= Lwt_io.shutdown_server (* never executes; you might want to use it in utop, though *)
Результат должен быть таким: при запуске программы:
- распечатать приветственное сообщение для outp,
- читать ник из inp,
- присвоить новое значение nr
- Добавить номер сессии
- Объявить, что пользователь присоединился.
Сейчас он компилируется, но ничего не выводит.