From b0d3b261f454e921f90a3a2c748731d3379e2db7 Mon Sep 17 00:00:00 2001 From: Ben Longbons Date: Fri, 18 Apr 2014 08:38:18 -0700 Subject: Die sensibly, take 2 --- src/map/chrif.cpp | 13 +++++++++++-- src/map/clif.cpp | 36 ++++++++++++++---------------------- 2 files changed, 25 insertions(+), 24 deletions(-) (limited to 'src/map') diff --git a/src/map/chrif.cpp b/src/map/chrif.cpp index 86506b0..fa95be7 100644 --- a/src/map/chrif.cpp +++ b/src/map/chrif.cpp @@ -1037,6 +1037,15 @@ void ladmin_itemfrob(Session *s) } } +static +void chrif_delete(Session *s) +{ + assert (s == char_session); + PRINTF("Map-server can't connect to char-server (connection #%d).\n", + s); + char_session = nullptr; +} + /*========================================== * *------------------------------------------ @@ -1207,10 +1216,10 @@ void check_connect_char_server(TimerData *, tick_t) { PRINTF("Attempt to connect to char-server...\n"); chrif_state = 0; - char_session = make_connection(char_ip, char_port); + char_session = make_connection(char_ip, char_port, + SessionParsers{func_parse: chrif_parse, func_delete: chrif_delete}); if (!char_session) return; - char_session->func_parse = chrif_parse; realloc_fifo(char_session, FIFOSIZE_SERVERLINK, FIFOSIZE_SERVERLINK); chrif_connect(char_session); diff --git a/src/map/clif.cpp b/src/map/clif.cpp index 8f9565e..eb008e4 100644 --- a/src/map/clif.cpp +++ b/src/map/clif.cpp @@ -149,29 +149,22 @@ static void clif_quitsave(Session *, dumb_ptr sd); static -void on_delete(Session *s) +void clif_delete(Session *s) { - if (s == char_session) - { - PRINTF("Map-server can't connect to char-server (connection #%d).\n", - s); - char_session = nullptr; - } - else + assert (s != char_session); + + dumb_ptr sd = dumb_ptr(static_cast(s->session_data.get())); + if (sd && sd->state.auth) { - dumb_ptr sd = dumb_ptr(static_cast(s->session_data.get())); - if (sd && sd->state.auth) - { - pc_logout(sd); - clif_quitsave(s, sd); + pc_logout(sd); + clif_quitsave(s, sd); - PRINTF("Player [%s] has logged off your server.\n", sd->status_key.name); // Player logout display [Valaris] - } - else if (sd) - { // not authentified! (refused by char-server or disconnect before to be authentified) - PRINTF("Player with account [%d] has logged off your server (not auth account).\n", sd->bl_id); // Player logout display [Yor] - map_deliddb(sd); // account_id has been included in the DB before auth answer - } + PRINTF("Player [%s] has logged off your server.\n", sd->status_key.name); // Player logout display [Valaris] + } + else if (sd) + { // not authentified! (refused by char-server or disconnect before to be authentified) + PRINTF("Player with account [%d] has logged off your server (not auth account).\n", sd->bl_id); // Player logout display [Yor] + map_deliddb(sd); // account_id has been included in the DB before auth answer } } @@ -5515,6 +5508,5 @@ void clif_parse(Session *s) void do_init_clif(void) { - set_defaultparse(clif_parse, on_delete); - make_listen_port(map_port); + make_listen_port(map_port, SessionParsers{func_parse: clif_parse, func_delete: clif_delete}); } -- cgit v1.2.3-70-g09d2