chat_client
module(chat_client).
-author(“Administrator”).
%% API
-export([start/0, login/2, reg/2,showuser/0, showroom/0,create_room/1,exit_room/0,join_room/1, send_msg/1, send_for/2, exit/0]).
-define(Port, 2345).
%%功能:登录/注册,创建/加入/退出房间,房间内公屏聊天,私聊,显示用户名/房间名/房间人数,退出账号
%%建立TCP连接,进程client打开一个和Server通信的套接字,建立ETS表用于存储用户信息
start() ->
register(client, spawn(fun() -> {ok, Socket} = gen_tcp:connect(“localhost”, ?Port, [binary, {packet, 4}]),
loop(Socket) end)),
ets:new(room, [public, set, named_table]),
ets:new(user, [public, set, named_table]),
{ok,please_login_or_register}.
%%%API函数
%%登录
login(ID, Password) ->
client ! {ID, Password, login}.
%%注册
reg(ID, Password) ->
client ! {ID, Password, register}.
%%显示房间
showroom()->
[{Roomname,Roomnumber}] = ets:tab2list(room),
io:format(“Room is pn”,[Roomname]),
io:format(“Numbers of room is pn”,[Roomnumber]).
%%显示用户名
showuser()->
[{ID,Socket}] = ets:tab2list(user),
io:format(“ID is:pn”,[ID]),
io:format(“Socket is:pn”,[Socket]).
%%创建房间
create_room(Roomname) ->
case ets:first(user) of
‘$end_of_table’ ->
io:format(“you must login first”);
_ ->
client ! {Roomname, create}
end.
%%加入房间
join_room(Room_name) ->
%%如果用户没登录
case ets:first(user) of
‘ e n d o f t a b l e ′ − > i o : f o r m a t ( " y o u m u s t l o g i n f i r s t " ) ; − > c a s e e t s : f i r s t ( r o o m ) o f ′ end_of_table' -> io:format("you must login first"); _ -> case ets:first(room) of ' endoftable