game: Separate connection closing handler. Small cleanup.

This commit is contained in:
Loïc Hoguin 2010-05-21 10:42:47 +02:00
parent 536fdd5f50
commit 47c656ce96

View File

@ -230,7 +230,6 @@ loop(CSocket, GID, Version) ->
loop(CSocket, GID, Version, << >>).
%% @doc Game's main loop.
%% @todo Have some kind of clock process for keepalive packets.
loop(CSocket, GID, Version, SoFar) ->
receive
@ -245,21 +244,17 @@ loop(CSocket, GID, Version, SoFar) ->
{psu_keepalive} ->
egs_proto:send_keepalive(CSocket, GID),
?MODULE:loop(CSocket, GID, Version, SoFar);
{psu_player_spawn, SpawnPlayer} ->
send_spawn(CSocket, GID, SpawnPlayer),
{psu_player_spawn, PlayerGID} ->
send_spawn(CSocket, GID, PlayerGID),
?MODULE:loop(CSocket, GID, Version, SoFar);
{ssl, _, Data} ->
{Packets, Rest} = egs_proto:packet_split(<< SoFar/bits, Data/bits >>),
[dispatch(CSocket, GID, Version, P) || P <- Packets],
?MODULE:loop(CSocket, GID, Version, Rest);
{ssl_closed, _} ->
log(GID, "ssl closed~n"),
egs_db:users_delete(GID),
ssl:close(CSocket);
close(CSocket, GID);
{ssl_error, _, _} ->
io:format("ssl error~n"),
egs_db:users_delete(GID),
ssl:close(CSocket);
close(CSocket, GID);
_ ->
?MODULE:loop(CSocket, GID, Version, SoFar)
after 1000 ->
@ -267,6 +262,13 @@ loop(CSocket, GID, Version, SoFar) ->
?MODULE:loop(CSocket, GID, Version, SoFar)
end.
%% @doc Close the connection for the given user.
close(CSocket, GID) ->
log(GID, "quit"),
egs_db:users_delete(GID),
ssl:close(CSocket).
%% @doc Dispatch the command to the right handler.
dispatch(CSocket, GID, Version, Packet) ->