X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=network.c;h=b0ae67786542032c53b3ee7872d7e5357bdb9654;hb=7e1fe6c7931ba4492aa10ac5eebc316b74fb5dac;hp=d60dc0cb38f429e32d102163e737649e2154e561;hpb=a7d144c7905105909cc4434e0ab43008bbb8f89f;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/network.c b/network.c index d60dc0c..b0ae677 100644 --- a/network.c +++ b/network.c @@ -153,9 +153,9 @@ static void network_send_request( netmsg_request *req, vg_msg *body, vg_msg *body )){ u32 len = 0; if( body ){ - len = body->len; - vg_info( "Request scoreboard. Info (%u):\n", body->len ); - vg_msg_print( body ); + len = body->cur.co; + vg_info( "Request scoreboard. Info (%u):\n", body->cur.co ); + vg_msg_print( body, len ); if( body->error != k_vg_msg_error_OK ){ vg_error( "Body not OK\n" ); @@ -201,18 +201,17 @@ static void network_scoreboard_callback( netmsg_request *res, vg_msg *body ){ return; } - /* TODO: frame pointers?? */ - u32 l = 0; - vg_msg rows = *body; - if( vg_msg_seekframe( &rows, "rows", k_vg_msg_first ) ){ - vg_msg entry = rows; - - while( vg_msg_seekframe( &entry, NULL, k_vg_msg_next ) ){ - const char *username = vg_msg_seekkvstr( &entry, "username", - k_vg_msg_first ); - sfd_encode( l ++, username ); - vg_msg_skip_frame( &entry ); + if( vg_msg_seekframe( body, "rows" ) ){ + while( vg_msg_seekframe( body, NULL ) ){ + const char *username = vg_msg_getkvstr( body, "username" ); + + if( username ) + sfd_encode( l ++, username ); + else + sfd_encode( l ++, "UNKNOWN USER" ); + + vg_msg_skip_frame( body ); } } } @@ -229,12 +228,9 @@ static void network_request_scoreboard( const char *mod_uid, netmsg_request *req = alloca( sizeof(netmsg_request) + 512 ); req->inetmsg_id = k_inetmsg_request; - req->id = 0; /* TODO: pool allocatable */ - - vg_msg data = {0}; - data.buf = req->q; - data.max = 512; + vg_msg data; + vg_msg_init( &data, req->q, 512 ); vg_msg_wkvstr( &data, "endpoint", "scoreboard" ); vg_msg_wkvstr( &data, "mod", mod_uid ); vg_msg_wkvstr( &data, "route", route_uid ); @@ -242,6 +238,31 @@ static void network_request_scoreboard( const char *mod_uid, network_send_request( req, &data, network_scoreboard_callback ); } +static void network_publish_callback( netmsg_request *res, vg_msg *body ){ + if( res->status != k_request_status_ok ){ + vg_error( "Publish laptime, server error #%d\n", (i32)res->status ); + } +} + +static void network_publish_laptime( const char *mod_uid, + const char *route_uid, f64 lap_time ){ + if( !network_client.remote ) + return; + + i32 time_centiseconds = lap_time * 100.0; + + netmsg_request *req = alloca( sizeof(netmsg_request) + 512 ); + req->inetmsg_id = k_inetmsg_request; + + vg_msg data; + vg_msg_init( &data, req->q, 512 ); + vg_msg_wkvstr( &data, "endpoint", "setlap" ); + vg_msg_wkvstr( &data, "mod", mod_uid ); + vg_msg_wkvstr( &data, "route", route_uid ); + vg_msg_wkvi32( &data, "time", time_centiseconds ); + network_send_request( req, &data, network_publish_callback ); +} + static void network_request_rx_300_400( SteamNetworkingMessage_t *msg ){ netmsg_blank *tmp = msg->m_pData; @@ -252,14 +273,12 @@ static void network_request_rx_300_400( SteamNetworkingMessage_t *msg ){ netmsg_request *res = (netmsg_request *)msg->m_pData; vg_msg *body = NULL; - vg_msg data = {0}; + vg_msg data; if( res->status == k_request_status_ok ){ - data.buf = res->q; - data.len = msg->m_cbSize - sizeof(netmsg_request); - data.max = data.len; + vg_msg_init( &data, res->q, msg->m_cbSize - sizeof(netmsg_request) ); vg_success( "Response to #%d:\n", (i32)res->id ); - vg_msg_print( &data ); + vg_msg_print( &data, data.max ); body = &data; } else { @@ -288,10 +307,8 @@ static void network_send_item( enum netmsg_playeritem_type type ){ if( (type == k_netmsg_playeritem_world0) || (type == k_netmsg_playeritem_world1) ){ - addon_reg *reg = world_static.addon_hub; - - if( type == k_netmsg_playeritem_world1 ) - reg = world_static.addon_client; + enum world_purpose purpose = type - k_netmsg_playeritem_world0; + addon_reg *reg = world_static.instance_addons[ purpose ]; if( reg ) addon_alias_uid( ®->alias, item->uid );