project_files/frontlib/ipc/gameconn.c
changeset 7230 240620f46dd7
parent 7224 5143861c83bd
child 7234 613998625a3c
equal deleted inserted replaced
7227:1c859f572d72 7230:240620f46dd7
    59 	conn->onDisconnectCb = &defaultCallback_onDisconnect;
    59 	conn->onDisconnectCb = &defaultCallback_onDisconnect;
    60 	conn->onErrorMessageCb = &defaultCallback_onErrorMessage;
    60 	conn->onErrorMessageCb = &defaultCallback_onErrorMessage;
    61 	conn->onChatCb = &defaultCallback_onChat;
    61 	conn->onChatCb = &defaultCallback_onChat;
    62 	conn->onGameRecordedCb = &defaultCallback_onGameRecorded;
    62 	conn->onGameRecordedCb = &defaultCallback_onGameRecorded;
    63 	conn->onNetMessageCb = &defaultCallback_onNetMessage;
    63 	conn->onNetMessageCb = &defaultCallback_onNetMessage;
    64 }
       
    65 
       
    66 static bool getGameMod(flib_cfg_meta *meta, flib_cfg *conf, int maskbit) {
       
    67 	for(int i=0; i<meta->modCount; i++) {
       
    68 		if(meta->mods[i].bitmaskIndex == maskbit) {
       
    69 			return conf->mods[i];
       
    70 		}
       
    71 	}
       
    72 	flib_log_e("Unable to find game mod with mask bit %i", maskbit);
       
    73 	return false;
       
    74 }
       
    75 
       
    76 static int fillConfigBuffer(flib_vector *configBuffer, const char *playerName, flib_cfg_meta *metaconf, flib_gamesetup *setup, bool netgame) {
       
    77 	bool error = false;
       
    78 	bool perHogAmmo = false;
       
    79 	bool sharedAmmo = false;
       
    80 
       
    81 	error |= flib_ipc_append_message(configBuffer, netgame ? "TN" : "TL");
       
    82 	error |= flib_ipc_append_seed(configBuffer, setup->seed);
       
    83 	if(setup->map) {
       
    84 		error |= flib_ipc_append_mapconf(configBuffer, setup->map, false);
       
    85 	}
       
    86 	if(setup->script) {
       
    87 		error |= flib_ipc_append_message(configBuffer, "escript %s", setup->script);
       
    88 	}
       
    89 	if(setup->gamescheme) {
       
    90 		error |= flib_ipc_append_gamescheme(configBuffer, setup->gamescheme, metaconf);
       
    91 		perHogAmmo = getGameMod(metaconf, setup->gamescheme, GAMEMOD_PERHOGAMMO_MASKBIT);
       
    92 		sharedAmmo = getGameMod(metaconf, setup->gamescheme, GAMEMOD_SHAREDAMMO_MASKBIT);
       
    93 	}
       
    94 	if(setup->teams) {
       
    95 		for(int i=0; i<setup->teamcount; i++) {
       
    96 			error |= flib_ipc_append_addteam(configBuffer, setup->teams[i], perHogAmmo, sharedAmmo);
       
    97 		}
       
    98 	}
       
    99 	error |= flib_ipc_append_message(configBuffer, "!");
       
   100 	return error ? -1 : 0;
       
   101 }
    64 }
   102 
    65 
   103 static flib_gameconn *flib_gameconn_create_partial(bool record, const char *playerName, bool netGame) {
    66 static flib_gameconn *flib_gameconn_create_partial(bool record, const char *playerName, bool netGame) {
   104 	flib_gameconn *result = NULL;
    67 	flib_gameconn *result = NULL;
   105 	flib_gameconn *tempConn = flib_calloc(1, sizeof(flib_gameconn));
    68 	flib_gameconn *tempConn = flib_calloc(1, sizeof(flib_gameconn));
   120 	}
    83 	}
   121 	flib_gameconn_destroy(tempConn);
    84 	flib_gameconn_destroy(tempConn);
   122 	return result;
    85 	return result;
   123 }
    86 }
   124 
    87 
   125 flib_gameconn *flib_gameconn_create(const char *playerName, flib_cfg_meta *metaconf, flib_gamesetup *setup, bool netgame) {
    88 flib_gameconn *flib_gameconn_create(const char *playerName, flib_gamesetup *setup, bool netgame) {
   126 	flib_gameconn *result = NULL;
    89 	flib_gameconn *result = NULL;
   127 	flib_gameconn *tempConn = flib_gameconn_create_partial(true, playerName, netgame);
    90 	flib_gameconn *tempConn = flib_gameconn_create_partial(true, playerName, netgame);
   128 	if(tempConn) {
    91 	if(tempConn) {
   129 		if(fillConfigBuffer(tempConn->configBuffer, playerName, metaconf, setup, netgame) == 0) {
    92 		if(!flib_ipc_append_fullconfig(tempConn->configBuffer, setup, netgame)) {
   130 			result = tempConn;
    93 			result = tempConn;
   131 			tempConn = NULL;
    94 			tempConn = NULL;
   132 		}
    95 		}
   133 	}
    96 	}
   134 	flib_gameconn_destroy(tempConn);
    97 	flib_gameconn_destroy(tempConn);