diff options
Diffstat (limited to 'src/base/proto.c~')
| -rw-r--r-- | src/base/proto.c~ | 1007 |
1 files changed, 1007 insertions, 0 deletions
diff --git a/src/base/proto.c~ b/src/base/proto.c~ new file mode 100644 index 0000000..304eff8 --- /dev/null +++ b/src/base/proto.c~ @@ -0,0 +1,1007 @@ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <assert.h> + +#include "main.h" +#include "list.h" +#include "tux.h" +#include "item.h" +#include "shot.h" +#include "arenaFile.h" +#include "myTimer.h" +#include "server.h" +#include "proto.h" +#include "net_multiplayer.h" +#include "checkFront.h" +#include "idManager.h" +#include "modules.h" +#include "protect.h" +#include "serverSendMsg.h" + +#ifndef PUBLIC_SERVER +#include "screen_world.h" +#include "screen_setting.h" +#include "screen_choiceArena.h" +#include "screen_analyze.h" +#include "screen_downArena.h" +#include "client.h" +#include "term.h" +#include "radar.h" +#include "chat.h" +#endif + +#ifdef PUBLIC_SERVER +#include "heightScore.h" +#include "publicServer.h" +#include "serverConfigFile.h" +#endif + +void proto_send_error_server(int type, client_t *client, int errorcode) +{ + char msg[STR_PROTO_SIZE]; + + snprintf(msg, STR_PROTO_SIZE, "error %d\n", errorcode); + + protoSendClient(type, client, msg, CHECK_FRONT_TYPE_SIMPLE, CHECK_FRONT_ID_NONE); +} + +#ifndef PUBLIC_SERVER + +void proto_recv_error_client(char *msg) +{ + char cmd[STR_PROTO_SIZE]; + int errorcode; + int recv_count; + + assert( msg != NULL ); + + recv_count = sscanf(msg, "%s %d", + cmd, &errorcode); + + if( recv_count != 2 ) + { + return; + } +#ifdef DEBUG + printf(_("Proto error code: \"%d\"\n"), errorcode); +#endif + switch(errorcode) + { + case PROTO_ERROR_CODE_BAD_VERSION : + setMsgToAnalyze(_("Version of your client isn't supported by the server.")); + setWorldEnd(); + break; + case PROTO_ERROR_CODE_TIMEOUT : + setMsgToAnalyze(_("The timeout of ping from server is out")); + setWorldEnd(); + break; + case PROTO_ERROR_LIMIT_MAX_CLIENT : + setMsgToAnalyze(_("The maximum amount of connected players has been exceeded!")); + setWorldEnd(); + break; + } +} + +#endif + +#ifndef PUBLIC_SERVER + +void proto_send_hello_client(char *name) +{ + char msg[STR_PROTO_SIZE]; + + snprintf(msg, STR_PROTO_SIZE, "hello %s %s\n", getParamElse("--version", TUXANCI_VERSION), name); + sendServer(msg); +} + +#endif + +static void action_sendItem(space_t *space, item_t *item, client_t *client) +{ + proto_send_additem_server(PROTO_SEND_ONE, client, item); +} + +static void sendInfoCreateClient(client_t *client) +{ + list_t *listClient; + client_t *thisClient; + tux_t *thisTux; + int i; + + assert( client != NULL ); + + listClient = getListServerClient(); + + proto_send_init_server(PROTO_SEND_ONE, client, client); + +#ifndef PUBLIC_SERVER + proto_send_newtux_server(PROTO_SEND_ONE, client, getControlTux(TUX_CONTROL_KEYBOARD_RIGHT) ); +#endif + + for( i = 0 ; i < listClient->count; i++) + { + thisClient = (client_t *) listClient->list[i]; + thisTux = thisClient->tux; + + if( thisTux != NULL && thisTux != client->tux ) + { + proto_send_newtux_server(PROTO_SEND_ONE, thisClient, client->tux); + proto_send_newtux_server(PROTO_SEND_ONE, client, thisTux); + } + } + + actionSpace(getCurrentArena()->spaceItem, action_sendItem, client); +/* + for( i = 0 ; i < getCurrentArena()->spaceItem->listIndex->count; i++) + { + thisItem = (item_t *) getCurrentArena()->spaceItem->list->list[i]; + proto_send_additem_server(PROTO_SEND_ONE, client, thisItem); + } +*/ +} + +void proto_recv_hello_server(client_t *client, char *msg) +{ + static char *supportVersion = NULL; + char cmd[STR_PROTO_SIZE]; + char version[STR_NAME_SIZE]; + char name[STR_NAME_SIZE]; + int recv_count; + + assert( client != NULL ); + + if( getSpaceCount(getCurrentArena()->spaceTux)+1 > getServerMaxClients() ) + { + proto_send_error_server(PROTO_SEND_ONE, client, PROTO_ERROR_LIMIT_MAX_CLIENT); + eventMsgInCheckFront(client); + client->status = NET_STATUS_ZOMBIE; + return; + } + + strcpy(version, ""); + strcpy(name, ""); + +#ifdef PUBLIC_SERVER + if( supportVersion == NULL ) + { + supportVersion = getSetting("SUPPORT_CLIENTS", "--support-clients", TUXANCI_VERSION); + } +#endif + +#ifndef PUBLIC_SERVER + if( supportVersion == NULL ) + { + supportVersion = TUXANCI_VERSION; + } +#endif + + recv_count = sscanf(msg, "%s %s %s", cmd, version, name); + + if( recv_count != 3 ) + { + return; + } + + if( strstr(supportVersion, version ) == NULL ) + { + proto_send_error_server(PROTO_SEND_ONE, client, PROTO_ERROR_CODE_BAD_VERSION); + eventMsgInCheckFront(client); + client->status = NET_STATUS_ZOMBIE; + return; + } + + client->tux = newTux(); + client->tux->control = TUX_CONTROL_NET; + client->tux->client = client; + + addObjectToSpace(getCurrentArena()->spaceTux, client->tux); + + if( strlen(name) > STR_NAME_SIZE-1 ) + { + name[STR_NAME_SIZE-1] = '\0'; + } + + tuxSetName(client->tux, name); + sendInfoCreateClient(client); +} + +void proto_send_status_server(int type, client_t *client) +{ + char msg[STR_PROTO_SIZE]; + char *name; + char *version; + int clients; + int maxclients; + unsigned int uptime; + char *arena; + +#ifndef PUBLIC_SERVER + name = "noname"; +#endif + +#ifdef PUBLIC_SERVER + name = getSetting("NAME", "--name", "noname"); +#endif + + version = TUXANCI_VERSION; + clients = getCurrentArena()->spaceTux->listIndex->count; + maxclients = getServerMaxClients(); + uptime = (unsigned int)getUpdateServer(); + arena = getArenaNetName( getChoiceArena() ); + + snprintf(msg, STR_PROTO_SIZE, + "name: %s\n" + "version: %s\n" + "clients: %d\n" + "maxclients: %d\n" + "uptime: %d\n" + "arena: %s\n", + + name, version, clients, + maxclients, uptime, arena); + + protoSendClient(type, client, msg, CHECK_FRONT_TYPE_SIMPLE, CHECK_FRONT_ID_NONE); + //proto_send(type, client, msg); +} + +void proto_recv_status_server(client_t *client, char *msg) +{ + proto_send_status_server(PROTO_SEND_ONE, client); +} + +#ifdef PUBLIC_SERVER + +void proto_send_listscore_server(int type, client_t *client, int max) +{ + char *str; + char *msg; + int i; + + msg = malloc( (max * 48) * sizeof(char) ); + strcpy(msg, ""); + + for( i = 0 ; i < max ; i++ ) + { + str = getTableItem(i); + + if( str == NULL ) + { + break; + } + + strcat(msg, str); + strcat(msg, "\n"); + } + + //proto_send(type, client, msg); + protoSendClient(type, client, msg, CHECK_FRONT_TYPE_SIMPLE, CHECK_FRONT_ID_NONE); + free(msg); +} + +void proto_recv_listscore_server(client_t *client, char *msg) +{ + char cmd[STR_PROTO_SIZE]; + int recv_count; + int max; + + assert( msg != NULL ); + + recv_count = sscanf(msg, "%s %d", + cmd, &max); + + if( recv_count != 2 ) + { + max = HEIGHTSCORE_MAX_PLAYERS; + } + + proto_send_listscore_server(PROTO_SEND_ONE, client, max); +} + +#endif + +#ifndef PUBLIC_SERVER + +void proto_send_check_client(int id) +{ + char msg[STR_PROTO_SIZE]; + + snprintf(msg, STR_PROTO_SIZE, "check %d\n", id); + sendServer(msg); +} + +#endif + +void proto_recv_check_server(client_t *client, char *msg) +{ + char cmd[STR_PROTO_SIZE]; + int recv_count; + int id; + + assert( msg != NULL ); + + recv_count = sscanf(msg, "%s %d", + cmd, &id); + + if( recv_count != 2 ) + { + return; + } + + delMsgInCheckFront(client->listSendMsg, id); +} + +void proto_send_init_server(int type, client_t *client, client_t *client2) +{ + char msg[STR_PROTO_SIZE]; + int count; + int check_id; + + assert( client2 != NULL ); + + count = WORLD_COUNT_ROUND_UNLIMITED; + +#ifndef PUBLIC_SERVER + getSettingCountRound(&count); +#endif + + check_id = getNewIDcount(0); + + snprintf(msg, STR_PROTO_SIZE, "init %d %d %d %d %s %d\n", + client2->tux->id, client2->tux->x, client2->tux->y, + count, getArenaNetName( getChoiceArena() ), check_id); + + //proto_send(type, client, msg); + protoSendClient(type, client, msg, CHECK_FRONT_TYPE_CHECK, check_id); +} + +#ifndef PUBLIC_SERVER + +void proto_recv_init_client(char *msg) +{ + char cmd[STR_PROTO_SIZE]; + char arena_name[STR_PROTO_SIZE]; + tux_t *tux; + int id; + int x, y, n; + int check_id; + int recv_count; + arena_t *arena; + + assert( msg != NULL ); + + recv_count = sscanf(msg, "%s %d %d %d %d %s %d", + cmd, &id, &x, &y, &n, arena_name, &check_id); + + if( recv_count != 7 ) + { + return; + } + + proto_send_check_client(check_id); + + if( getCurrentArena() != NULL ) + { + return; + } + + setWorldArena( getArenaFileFormNetName(arena_name) ); + + arena = getCurrentArena(); + arena->max_countRound = n; + + tux = newTux(); + replaceTuxID(tux, id); + tux->x = x; + tux->y = y; + tux->control = TUX_CONTROL_KEYBOARD_RIGHT; + setControlTux(tux, TUX_CONTROL_KEYBOARD_RIGHT); + + getSettingNameRight(tux->name); + + addObjectToSpace(arena->spaceTux, tux); +} + +#endif + +void proto_send_event_server(int type, client_t *client, tux_t *tux, int action) +{ + char msg[STR_PROTO_SIZE]; + + snprintf(msg, STR_PROTO_SIZE, "event %d %d\n", tux->id, action); + + //proto_send(type, client, msg); + protoSendClient(type, client, msg, CHECK_FRONT_TYPE_SIMPLE, CHECK_FRONT_ID_NONE); +} + +#ifndef PUBLIC_SERVER + +void proto_recv_event_client(char *msg) +{ + char cmd[STR_PROTO_SIZE]; + int id, action; + tux_t *tux; + int recv_count; + + assert( msg != NULL ); + + recv_count = sscanf(msg, "%s %d %d", cmd, &id, &action); + + if( recv_count != 3 ) + { + return; + } + + tux = getObjectFromSpaceWithID(getCurrentArena()->spaceTux, id); + + if( tux != NULL ) + { + actionTux(tux, action); + addToRadar(tux->id, tux->x, tux->y, RADAR_TYPE_TUX); + } +} + +#endif + +#ifndef PUBLIC_SERVER + +void proto_send_event_client(int action) +{ + char msg[STR_PROTO_SIZE]; + + snprintf(msg, STR_PROTO_SIZE, "event %d\n", action); + + sendServer(msg); +} + +#endif + +void proto_recv_event_server(client_t *client, char *msg) +{ + char cmd[STR_PROTO_SIZE]; + int action; + int recv_count; + + assert( client != NULL ); + assert( msg != NULL ); + + //debug_interval(); + + recv_count = sscanf(msg, "%s %d", cmd, &action); + + if( recv_count != 2 ) + { + return; + } + + if( client->tux->bonus != BONUS_HIDDEN ) + { + proto_send_event_server(PROTO_SEND_ALL_SEES_TUX, client, client->tux, action); + } + + refreshLastMove(client->protect); + + actionTux(client->tux, action); +} + +void proto_send_newtux_server(int type, client_t *client, tux_t *tux) +{ + char msg[STR_PROTO_SIZE]; + int x, y; + + assert( tux != NULL ); + + if( tux->bonus == BONUS_HIDDEN ) + { + x = TUX_LOCATE_UNKNOWN; + y = TUX_LOCATE_UNKNOWN; + } + else + { + getTuxProportion(tux, &x, &y, NULL, NULL); + } + + snprintf(msg, STR_PROTO_SIZE, + "newtux %d %d %d %d %d %d %d %s %d %d %d %d %d %d %d %d %d %d %d\n", + tux->id ,x, y, tux->status, tux->position ,tux->frame, tux->score, tux->name, + tux->gun, tux->bonus, tux->shot[GUN_SIMPLE], tux->shot[GUN_DUAL_SIMPLE], + tux->shot[GUN_SCATTER], tux->shot[GUN_TOMMY], tux->shot[GUN_LASSER], + tux->shot[GUN_MINE], tux->shot[GUN_BOMBBALL], + tux->bonus_time, tux->pickup_time); + + //proto_send(type, client, msg); + protoSendClient(type, client, msg, CHECK_FRONT_TYPE_SIMPLE, CHECK_FRONT_ID_NONE); +} + +#ifndef PUBLIC_SERVER + +void proto_recv_newtux_client(char *msg) +{ + char cmd[STR_PROTO_SIZE]; + char name[STR_NAME_SIZE]; + int id, x, y, status, position, frame, score; + int myGun, myBonus; + int gun1, gun2, gun3, gun4, gun5, gun6, gun7; + int time1, time2; + tux_t *tux; + int recv_count; + + assert( msg != NULL ); + + if( getCurrentArena() == NULL ) + { + return; + } + + recv_count = sscanf(msg, "%s %d %d %d %d %d %d %d %s %d %d %d %d %d %d %d %d %d %d %d", + cmd, &id, &x, &y, &status, &position, &frame, &score, name, + &myGun, &myBonus, &gun1, &gun2, &gun3, &gun4, &gun5, &gun6, &gun7, &time1, &time2); + + if( recv_count != 20 ) + { + return; + } + + tux = getObjectFromSpaceWithID(getCurrentArena()->spaceTux, id); + + if( tux != NULL ) + { + assert( tux->id == id ); + } + + if( tux == NULL ) + { + tux = newTux(); + replaceTuxID(tux, id); + tux->control = TUX_CONTROL_NET; + addObjectToSpace(getCurrentArena()->spaceTux, tux); + } + + if( tux->control == TUX_CONTROL_KEYBOARD_RIGHT && + x == TUX_LOCATE_UNKNOWN && y == TUX_LOCATE_UNKNOWN ) + { + getTuxProportion(tux, &x, &y, NULL, NULL); + } + + addToRadar(id, x, y, RADAR_TYPE_TUX); + + if( tux->bonus == BONUS_HIDDEN ) + { + delFromRadar(id); + } + + moveObjectInSpace(getCurrentArena()->spaceTux, tux, x, y); + tux->status = status; + tux->position = position; + tux->frame = frame; + tux->score = score; + strcpy(tux->name, name); + tux->gun = myGun; + tux->bonus = myBonus; + tux->shot[GUN_SIMPLE] = gun1; + tux->shot[GUN_DUAL_SIMPLE] = gun2; + tux->shot[GUN_SCATTER] = gun3; + tux->shot[GUN_TOMMY] = gun4; + tux->shot[GUN_LASSER] = gun5; + tux->shot[GUN_MINE] = gun6; + tux->shot[GUN_BOMBBALL] = gun7; + tux->bonus_time = time1; + tux->pickup_time = time2; +} + +#endif + +void proto_send_kill_server(int type, client_t *client, tux_t *tux) +{ + char msg[STR_PROTO_SIZE]; + + assert( tux != NULL ); + + snprintf(msg, STR_PROTO_SIZE, "kill %d\n", tux->id); + + //proto_send(type, client, msg); + protoSendClient(type, client, msg, CHECK_FRONT_TYPE_SIMPLE, CHECK_FRONT_ID_NONE); +} + +#ifndef PUBLIC_SERVER + +void proto_recv_kill_client(char *msg) +{ + char cmd[STR_PROTO_SIZE]; + int id; + tux_t *tux; + int recv_count; + + assert( msg != NULL ); + + recv_count = sscanf(msg, "%s %d", cmd, &id); + + if( recv_count != 2 ) + { + return; + } + + tux = getObjectFromSpaceWithID(getCurrentArena()->spaceTux, id); + + if( tux != NULL ) + { + eventTuxIsDead(tux); + } +} + +#endif + +void proto_send_del_server(int type, client_t *client, int id) +{ + char msg[STR_PROTO_SIZE]; + int check_id; + + check_id = getNewIDcount(0); + + snprintf(msg, STR_PROTO_SIZE, "del %d %d\n", + id, check_id); + + protoSendClient(type, client, msg, CHECK_FRONT_TYPE_CHECK, check_id); + //proto_check(type, client, msg, check_id); +} + +#ifndef PUBLIC_SERVER + +void proto_recv_del_client(char *msg) +{ + char cmd[STR_PROTO_SIZE]; + int id, check_id; + tux_t *tux; + shot_t *shot; + item_t *item; + int recv_count; + + assert( msg != NULL ); + + recv_count = sscanf(msg, "%s %d %d", + cmd, &id, &check_id); + + if( recv_count != 3 ) + { + return; + } + + proto_send_check_client(check_id); + + tux = getObjectFromSpaceWithID(getCurrentArena()->spaceTux, id); + + if( tux != NULL ) + { + delFromRadar(id); + delObjectFromSpaceWithObject(getCurrentArena()->spaceTux, tux, destroyTux); + return; + } + + shot = getObjectFromSpaceWithID(getCurrentArena()->spaceShot, id); + + if( shot != NULL ) + { + //printf("delete shot..\n"); + delFromRadar(id); + delObjectFromSpaceWithObject(getCurrentArena()->spaceShot, shot, destroyShot); + return; + } + + item = getObjectFromSpaceWithID(getCurrentArena()->spaceItem, id); + + if( item != NULL ) + { + //printf("delete item..\n"); + delFromRadar(id); + delObjectFromSpaceWithObject(getCurrentArena()->spaceItem, item, destroyItem); + return; + } +} + +#endif + +void proto_send_additem_server(int type, client_t *client, item_t *p) +{ + char msg[STR_PROTO_SIZE]; + int check_id; + + assert( p != NULL ); + + check_id = getNewIDcount(0); + + snprintf(msg, STR_PROTO_SIZE, "additem %d %d %d %d %d %d %d %d\n", + p->id, p->type, p->x, p->y, p->count, p->frame, p->author_id, check_id); + + //proto_send(type, client, msg); + //proto_check(type, client, msg, check_id); + protoSendClient(type, client, msg, CHECK_FRONT_TYPE_CHECK, check_id); +} + +#ifndef PUBLIC_SERVER + +void proto_recv_additem_client(char *msg) +{ + char cmd[STR_PROTO_SIZE]; + int id, type, x, y, count, frame, author_id, check_id; + item_t *item; + int recv_count; + + assert( msg != NULL ); + + if( getCurrentArena() == NULL ) + { + return; + } + + recv_count = sscanf(msg, "%s %d %d %d %d %d %d %d %d", + cmd, &id, &type, &x, &y, &count, &frame, &author_id, &check_id); + + if( recv_count != 9 ) + { + return; + } + + proto_send_check_client(check_id); + + if( ( item = getObjectFromSpaceWithID(getCurrentArena()->spaceItem, id) ) != NULL ) + { + return; + } + + if( type != ITEM_MINE && type != ITEM_EXPLOSION && type != ITEM_BIG_EXPLOSION ) + { + addToRadar(id, x, y, RADAR_TYPE_ITEM); + } + + item = newItem(x, y, type, author_id); + + replaceItemID(item, id); + item->count = count; + item->frame = frame; + + addObjectToSpace(getCurrentArena()->spaceItem, item); +} + +#endif + +void proto_send_shot_server(int type, client_t *client, shot_t *p) +{ + char msg[STR_PROTO_SIZE]; + + assert( p != NULL ); + + snprintf(msg, STR_PROTO_SIZE, "shot %d %d %d %d %d %d %d %d %d\n", + p->id, p->x, p->y, p->px, p->py, p->position, p->gun, p->author_id, p->isCanKillAuthor); + + //proto_send(type, client, msg); + //proto_check(type, client, msg, check_id); + protoSendClient(type, client, msg, CHECK_FRONT_TYPE_SIMPLE, CHECK_FRONT_ID_NONE); +} + +#ifndef PUBLIC_SERVER + +void proto_recv_shot_client(char *msg) +{ + char cmd[STR_PROTO_SIZE]; + int x, y, px, py, position, gun, shot_id, author_id, isCanKillAuthor; + shot_t *shot; + int recv_count; + + assert( msg != NULL ); + + recv_count = sscanf(msg, "%s %d %d %d %d %d %d %d %d %d", + cmd, &shot_id, &x, &y, &px, &py, &position, &gun, &author_id, &isCanKillAuthor); + + if( recv_count != 10 ) + { + return; + } + + if( ( shot = getObjectFromSpaceWithID(getCurrentArena()->spaceShot, shot_id) ) != NULL ) + { + delObjectFromSpaceWithObject(getCurrentArena()->spaceShot, shot, destroyShot); + + //return; + } + + shot = newShot(x, y, px, py, gun, author_id); + + replaceShotID(shot, shot_id); + shot->isCanKillAuthor = isCanKillAuthor; + shot->position = position; + + if( shot->gun == GUN_LASSER ) + { + transformOnlyLasser(shot); + } + + addObjectToSpace(getCurrentArena()->spaceShot, shot); +} + +#endif + +#ifndef PUBLIC_SERVER + +void proto_send_chat_client(char *s) +{ + char msg[STR_PROTO_SIZE]; + snprintf(msg, STR_PROTO_SIZE, "chat %s\n", s); + sendServer(msg); +} + +#endif + +void proto_recv_chat_server(client_t *client, char *msg) +{ + char out[STR_PROTO_SIZE]; + int len; + + if( client->tux == NULL ) + { + return; + } + + len = strlen(msg); + msg[len-1] = '\0'; + + snprintf(out, STR_PROTO_SIZE, "chat %s:%s\n", client->tux->name, msg+5); + + proto_send_chat_server(PROTO_SEND_ALL, NULL, out); +} + +void proto_send_chat_server(int type, client_t *client, char *msg) +{ + protoSendClient(type, client, msg, CHECK_FRONT_TYPE_SIMPLE, CHECK_FRONT_ID_NONE); + +#ifndef PUBLIC_SERVER + proto_recv_chat_client(msg); +#endif +} + +#ifndef PUBLIC_SERVER + +void proto_recv_chat_client(char *msg) +{ + int len; + + assert( msg != NULL ); + + len = strlen(msg); + msg[len-1] = '\0'; + + addToChat(msg+5); +} + +#endif + +#ifndef PUBLIC_SERVER + +void proto_send_module_client(char *msg) +{ + char out[STR_PROTO_SIZE]; + + snprintf(out, STR_PROTO_SIZE, "module %s\n", msg); +/* + strcpy(out, "modules "); + strcat(out, msg); + strcat(out, "\n"); +*/ + sendServer(out); +} + +#endif + +void proto_recv_module_server(client_t *client, char *msg) +{ + recvMsgModule(msg+7); +} + +void proto_send_module_server(int type, client_t *client, char *msg) +{ + char out[STR_PROTO_SIZE]; + + snprintf(out, STR_PROTO_SIZE, "module %s\n", msg); +/* + strcpy(out, "modules "); + strcat(out, msg); + strcat(out, "\n"); +*/ + + protoSendClient(type, client, out, CHECK_FRONT_TYPE_SIMPLE, CHECK_FRONT_ID_NONE); +} + +#ifndef PUBLIC_SERVER + +void proto_recv_module_client(char *msg) +{ + recvMsgModule(msg+7); +} + +#endif + +#ifndef PUBLIC_SERVER + +void proto_send_ping_client() +{ + char msg[STR_PROTO_SIZE]; + snprintf(msg, STR_PROTO_SIZE, "ping\n"); + sendServer(msg); +} + +#endif + +void proto_recv_ping_server(client_t *client, char *msg) +{ +} + +void proto_send_ping_server(int type, client_t *client) +{ + char msg[STR_PROTO_SIZE]; + snprintf(msg, STR_PROTO_SIZE, "ping\n"); + //proto_send(type, client, msg); + protoSendClient(type, client, msg, CHECK_FRONT_TYPE_SIMPLE, CHECK_FRONT_ID_NONE); +} + +#ifndef PUBLIC_SERVER + +void proto_recv_ping_client(char *msg) +{ +} + +#endif + +void proto_recv_echo_server(client_t *client, char *msg) +{ + proto_send_echo_server(PROTO_SEND_ONE, client, msg+4); // msg + strlen("echo"); +} + +void proto_send_echo_server(int type, client_t *client, char *s) +{ + char msg[STR_PROTO_SIZE]; + + snprintf(msg, STR_PROTO_SIZE, "echo%s", s); + //proto_send(type, client, msg); + protoSendClient(type, client, msg, CHECK_FRONT_TYPE_SIMPLE, CHECK_FRONT_ID_NONE); +} + +void proto_send_end_server(int type, client_t *client) +{ + char msg[STR_PROTO_SIZE]; + + snprintf(msg, STR_PROTO_SIZE, "end\n"); + //proto_send(type, client, msg); + protoSendClient(type, client, msg, CHECK_FRONT_TYPE_SIMPLE, CHECK_FRONT_ID_NONE); +} + +#ifndef PUBLIC_SERVER + +void proto_recv_end_client(char *msg) +{ + assert( msg != NULL ); + + setWorldEnd(); +} + +#endif + +#ifndef PUBLIC_SERVER + +void proto_send_end_client() +{ + char msg[STR_PROTO_SIZE]; + + snprintf(msg, STR_PROTO_SIZE, "end\n"); + sendServer(msg); +} + +#endif + +void proto_recv_end_server(client_t *client, char *msg) +{ + assert( msg != NULL ); + assert( client != NULL ); + + client->status = NET_STATUS_ZOMBIE; +} + |