-
Notifications
You must be signed in to change notification settings - Fork 0
/
client.erl
67 lines (60 loc) · 2.14 KB
/
client.erl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
-module(client).
-compile(export_all).
-define(PUERTO, 8000).
-define(HOST, {127, 0, 0, 1}).
-define(OPCIONES,[{active,false},{mode, binary}]).
init()-> main(?HOST,?PUERTO).
init(Puerto)-> main(?HOST,Puerto).
main(Host,Puerto)->
{ok,Socket} = gen_tcp:connect(Host, Puerto, ?OPCIONES),
username(Socket),
showcomand(),
spawn(?MODULE,writer,[Socket,1]),
reader(Socket).
username(Socket)->
Nombre = string:strip(io:get_line("Ingrese un nombre de usuario: "),right,$\n),%Salto de linea o espacio?
gen_tcp:send(Socket,"CON 0 "++Nombre),
case gen_tcp:recv(Socket,0) of
{ok,<<"OK ",_/binary>>} ->
io:format("Bienvenido ~p~n",[Nombre]),
Nombre;
{ok,<<"ERROR ",_/binary>>} ->
io:format("El nombre de usuario no esta disponible~n"),
username(Socket);
{error,closed} ->
io:format("Se ha cerrado la conexion~n"),
exit(closed);
{error,Reason} ->
io:format("Se ha producido un error en la conexion~n"),
exit(Reason)
end.
writer(Server,Cid)->
Comando = string:strip(io:get_line("-> "), right, $\n),
[A|B] = string:tokens(Comando," "),
Com = lists:foldl(fun(X,R)-> R++" "++X end,"",[A|[server:tostring(Cid)|B]]),
spawn(gen_tcp,send,[Server,Com]),
writer(Server,Cid+1).
reader(Server)->
case gen_tcp:recv(Server,0) of
{ok,<<"UPD ",Cambio/binary>>} ->
io:format("UPD ~s ~n",[binary_to_list(Cambio)]),
reader(Server);
{ok,<<"OK ",Cambio/binary>>} ->
io:format("Comando ejecutado con exito: ~p ~n",[binary_to_list(Cambio)]),
reader(Server);
{ok,<<"ERROR ",Cambio/binary>>} ->
io:format("Se ha producio un error en el comando anterior: ~p ~n",[binary_to_list(Cambio)]),
reader(Server);
{error,_Reason} ->
io:format("Se ha cerrado la conexión ~n"),
ok
end.
showcomand()->
io:format("Comandos que puede realizar: ~n"),
io:format("LSG: Muestra la lista de juegos ~n"),
io:format("NEW: crea un nuevo juego(OK Cmid JuegoID) ~n"),
io:format("ACC Id: Acepta un juego ~n"),
io:format("PLA Id Lug:Pone una ficha en el juego Id en la posicion Lug ~n"),
io:format("OBS Id: observa el juego Id ~n"),
io:format("LEA Id: Deja de observar el juego ~n"),
io:format("BYE: Cierra la conexion ~n").