Erlang 用OTP写聊天室

聊天室代码

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值