static void scores_update(void);
+static int packet_minsize( SteamNetworkingMessage_t *msg, u32 size ){
+ if( msg->m_cbSize < size ) {
+ vg_error( "Invalid packet size (must be at least %u)\n", size );
+ return 0;
+ }
+ else{
+ return 1;
+ }
+}
+
static void on_auth_ticket_recieved( void *result, void *context ){
EncryptedAppTicketResponse_t *response = result;
SteamAPI_ISteamUser_RequestEncryptedAppTicket( hSteamUser, NULL, 0 );
}
-static void send_auth_ticket(void){
- u32 size = sizeof(netmsg_auth) + network_client.app_key_length;
- netmsg_auth *auth = alloca(size);
-
- auth->inetmsg_id = k_inetmsg_auth;
- auth->ticket_length = network_client.app_key_length;
- for( int i=0; i<network_client.app_key_length; i++ )
- auth->ticket[i] = network_client.app_symmetric_key[i];
-
- SteamAPI_ISteamNetworkingSockets_SendMessageToConnection(
- hSteamNetworkingSockets, network_client.remote, auth, size,
- k_nSteamNetworkingSend_Reliable, NULL );
-}
-
+#if 0
static void send_score_request(void){
vg_info( "Requesting scores\n" );
netmsg_scores_request req;
network_client.name_update = 0;
}
+#endif
static void network_send_playerframe(void){
netmsg_playerframe frame;
k_nSteamNetworkingSend_Unreliable, NULL );
}
+#if 0
static void server_routine_update(void){
- if( network_client.name_update )
- send_nickname();
-
send_score_update();
send_score_request();
}
+#endif
+
+static void network_send_username(void){
+ netmsg_playerusername update;
+ memset( &update, 0, sizeof(update) );
+ update.inetmsg_id = k_inetmsg_playerusername;
+ update.index = 0xffffffff;
+
+ ISteamFriends *hSteamFriends = SteamAPI_SteamFriends();
+ const char *username = SteamAPI_ISteamFriends_GetPersonaName(hSteamFriends);
+ str_utf8_collapse( username, update.username, sizeof(update.username) );
+
+ SteamAPI_ISteamNetworkingSockets_SendMessageToConnection(
+ hSteamNetworkingSockets, network_client.remote,
+ &update, sizeof(update),
+ k_nSteamNetworkingSend_Reliable, NULL );
+}
static void on_server_connect_status( CallbackMsg_t *msg ){
SteamNetConnectionStatusChangedCallback_t *info = (void *)msg->m_pubParam;
if( info->m_info.m_eState ==
k_ESteamNetworkingConnectionState_Connected ){
vg_success(" Connected to remote server.. authenticating\n");
- send_auth_ticket();
+
+ /* TODO: We should really wait to see if the server is in auth mode
+ * first... */
+ u32 size = sizeof(netmsg_auth) + network_client.app_key_length;
+ netmsg_auth *auth = alloca(size);
+ auth->inetmsg_id = k_inetmsg_auth;
+ auth->ticket_length = network_client.app_key_length;
+ for( int i=0; i<network_client.app_key_length; i++ )
+ auth->ticket[i] = network_client.app_symmetric_key[i];
+
+ SteamAPI_ISteamNetworkingSockets_SendMessageToConnection(
+ hSteamNetworkingSockets, network_client.remote, auth, size,
+ k_nSteamNetworkingSend_Reliable, NULL );
+
+ network_send_username();
}
else if( info->m_info.m_eState ==
k_ESteamNetworkingConnectionState_ClosedByPeer ){
}
}
+static void on_persona_state_change( CallbackMsg_t *msg ){
+ if( network_client.remote ){
+ PersonaStateChange_t *info = (void *)msg->m_pubParam;
+
+ ISteamUser *hSteamUser = SteamAPI_SteamUser();
+ if( info->m_ulSteamID == SteamAPI_ISteamUser_GetSteamID(hSteamUser) ){
+ if( info->m_nChangeFlags == k_EPersonaChangeNickname ){
+ network_send_username();
+ }
+ }
+ }
+}
+
static void network_connect(void){
/* Connect to server if not connected */
SteamNetworkingIPAddr remoteAddr;
const char *server_lon1 = "46.101.34.155:27402";
SteamAPI_SteamNetworkingIPAddr_ParseString( &remoteAddr, server_lon1 );
#endif
+ const char *server_lan = "192.168.1.32:27402";
+ SteamAPI_SteamNetworkingIPAddr_ParseString( &remoteAddr, server_lan );
char buf[256];
SteamAPI_SteamNetworkingIPAddr_ToString( &remoteAddr, buf, 256, 1 );
netmsg_blank *tmp = msg->m_pData;
- if( tmp->inetmsg_id == k_inetmsg_scoreboard )
- on_inet_scoreboard( msg );
-
if( (tmp->inetmsg_id >= 200) && (tmp->inetmsg_id < 300) ){
- player_remote_packet( msg );
+ player_remote_rx_200_300( msg );
}
SteamAPI_SteamNetworkingMessage_t_Release( msg );
if( steam_ready ){
steam_register_callback( k_iSteamNetConnectionStatusChangedCallBack,
on_server_connect_status );
+ steam_register_callback( k_iPersonaStateChange,
+ on_persona_state_change );
request_auth_ticket();
}
}