X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=gameserver.c;h=ff8d63552384903277721e25b43318b9c76fd847;hb=eb28dee29482c7ffe8bc0203d302e3ee6dbfd943;hp=afc0bc31a00743c840ecd2f7c354356cf016e847;hpb=b1f5771eda7a9788b86604a4368eb83babdf486d;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/gameserver.c b/gameserver.c index afc0bc3..ff8d635 100644 --- a/gameserver.c +++ b/gameserver.c @@ -77,16 +77,16 @@ static void gameserver_player_join( int index ){ SteamAPI_ISteamNetworkingSockets_SendMessageToConnection( hSteamNetworkingSockets, joiner->connection, - &join, sizeof(join), k_nSteamNetworkingSend_Reliable, NULL ); + &init, sizeof(init), k_nSteamNetworkingSend_Reliable, NULL ); } } static void gameserver_player_leave( int index ){ - netmsg_playerjoin leave; leave.inetmsg_id = k_inetmsg_playerleave; leave.index = index; + vg_info( "Player leave (%d)\n", index ); gameserver_send_to_all( index, &leave, sizeof(leave), k_nSteamNetworkingSend_Reliable ); } @@ -296,29 +296,41 @@ static int packet_minsize( SteamNetworkingMessage_t *msg, u32 size ){ static void gameserver_rx_200_300( SteamNetworkingMessage_t *msg ){ netmsg_blank *tmp = msg->m_pData; + int client_id = gameserver_client_index( msg->m_conn ); + if( client_id == -1 ) return; + if( tmp->inetmsg_id == k_inetmsg_playerusername ){ if( !packet_minsize( msg, sizeof(netmsg_playerusername) )) return; - int client_id = gameserver_client_index( msg->m_conn ); - if( client_id != -1 ){ - struct gameserver_client *client = &gameserver.clients[ client_id ]; - netmsg_playerusername *src = msg->m_pData; - - vg_strncpy( src->username, client->username, sizeof(client->username), - k_strncpy_always_add_null ); - - /* update other users about this change */ - netmsg_playerusername msg; - memset( &msg, 0, sizeof(msg) ); - msg.inetmsg_id = k_inetmsg_playerusername; - msg.index = client_id; - vg_strncpy( client->username, msg.username, sizeof(msg.username), - k_strncpy_always_add_null ); - - gameserver_send_to_all( client_id, &msg, sizeof(msg), - k_nSteamNetworkingSend_Reliable ); - } + struct gameserver_client *client = &gameserver.clients[ client_id ]; + netmsg_playerusername *src = msg->m_pData; + + vg_info( "%d change name '%s' -> '%s'\n", + client_id, client->username, src->username ); + + vg_strncpy( src->username, client->username, sizeof(client->username), + k_strncpy_always_add_null ); + + /* update other users about this change */ + netmsg_playerusername msg; + memset( &msg, 0, sizeof(msg) ); + msg.inetmsg_id = k_inetmsg_playerusername; + msg.index = client_id; + vg_strncpy( client->username, msg.username, sizeof(msg.username), + k_strncpy_always_add_null ); + + gameserver_send_to_all( client_id, &msg, sizeof(msg), + k_nSteamNetworkingSend_Reliable ); + } + else if( tmp->inetmsg_id == k_inetmsg_playerframe ){ + /* propogate */ + + netmsg_playerframe *frame = alloca(msg->m_cbSize); + memcpy( frame, msg->m_pData, msg->m_cbSize ); + frame->client = client_id; + gameserver_send_to_all( client_id, frame, msg->m_cbSize, + k_nSteamNetworkingSend_Unreliable ); } }