MCPcopy Create free account
hub / github.com/DescentDevelopers/Descent3 / TryToJoinServer

Function TryToJoinServer

Descent3/multi_connect.cpp:333–420  ·  view source on GitHub ↗

Trys to join this client with the server address passed in Returns 1 on success, 0 on fail Client only For DirectPlay games, use the addr pointer as a pointer to the DPSESSIONDESC2

Source from the content-addressed store, hash-verified

331// Client only
332// For DirectPlay games, use the addr pointer as a pointer to the DPSESSIONDESC2
333int TryToJoinServer(network_address *addr) {
334 SOCKET sock;
335
336 ShowProgressScreen(TXT_MULTI_CONNECTING);
337 // Store the server's address in the netplayer struct
338 memcpy(&NetPlayers[0].addr, addr, sizeof(network_address));
339
340 for (int i = 0; i < MAX_NET_PLAYERS; i++) {
341 NetPlayers[i].file_xfer_flags = NETFILE_NONE;
342 NetPlayers[i].ship_logo[0] = 0;
343 NetPlayers[i].voice_taunt1[0] = 0;
344 NetPlayers[i].voice_taunt2[0] = 0;
345 NetPlayers[i].voice_taunt3[0] = 0;
346 NetPlayers[i].voice_taunt4[0] = 0;
347 NetPlayers[i].custom_file_seq = NETFILE_ID_NOFILE;
348 // Set all custom textures to NULL
349 PlayerSetCustomTexture(i, NULL);
350 }
351 Current_pilot.get_multiplayer_data(NetPlayers[Player_num].ship_logo, NetPlayers[Player_num].voice_taunt1,
352 NetPlayers[Player_num].voice_taunt2, NULL, NetPlayers[Player_num].voice_taunt3,
353 NetPlayers[Player_num].voice_taunt4);
354 if (NetPlayers[Player_num].ship_logo[0])
355 PlayerSetCustomTexture(Player_num, NetPlayers[Player_num].ship_logo);
356
357 bool connected = false;
358#ifdef USE_DIRECTPLAY
359 if (Use_DirectPlay) {
360 LPDPSESSIONDESC2 session = (LPDPSESSIONDESC2)addr;
361 DPID server_id = DPID_SERVERPLAYER;
362 Netgame.server_address.connection_type = NP_DIRECTPLAY;
363 memcpy(&Netgame.server_address.address, &server_id, sizeof(DPID));
364 if (dp_DirectPlayJoinGame(session)) {
365 connected = true;
366 NetPlayers[Player_num].reliable_socket = DPID_SERVERPLAYER;
367 } else {
368 mprintf(0, "Unable to join DirectPlay session!\n");
369 }
370 } else
371#endif
372 {
373 if (!AskToJoin(addr)) {
374 if (Ok_to_join != -1) {
375 char str[255];
376 snprintf(str, sizeof(str), "%s", TXT(Join_response_strings[Ok_to_join]));
377 ShowProgressScreen(str);
378 Sleep(2000);
379 } else {
380 ShowProgressScreen(TXT_MLTNORESPONSE);
381 Sleep(2000);
382 }
383 return 0;
384 } else
385 mprintf(0, "Server says its ok to join!\n");
386
387 nw_ConnectToServer(&sock, addr);
388 if (sock != INVALID_SOCKET && sock != 0) {
389 connected = true;
390 NetPlayers[Player_num].reliable_socket = sock;

Callers

nothing calls this directly

Calls 10

ShowProgressScreenFunction · 0.85
PlayerSetCustomTextureFunction · 0.85
dp_DirectPlayJoinGameFunction · 0.85
AskToJoinFunction · 0.85
nw_ConnectToServerFunction · 0.85
MultiSetServerAddressFunction · 0.85
nw_CloseSocketFunction · 0.85
get_multiplayer_dataMethod · 0.80
SleepFunction · 0.50

Tested by

no test coverage detected