X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=network.c;h=14edfafb1d464a7a219e05d308007d31b657567a;hb=5f5d02725031cad23f1cab3290b8a9d661c89728;hp=92389016c49a7a5240e03ff0794bc674ac6bfd05;hpb=8090b8da9ce1397ba47d7e2d91b4f1716f708f25;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/network.c b/network.c index 9238901..14edfaf 100644 --- a/network.c +++ b/network.c @@ -6,6 +6,9 @@ #include "world.h" #include "world_sfd.h" #include "world_routes.h" +#include "vg/vg_imgui.h" +#include "gui.h" +#include "ent_region.h" static void scores_update(void); @@ -76,6 +79,25 @@ static void network_send_username(void){ k_nSteamNetworkingSend_Reliable, NULL ); } +static void network_send_region(void){ + if( !network_connected() ) + return; + + netmsg_region *region = alloca( sizeof(netmsg_region) + NETWORK_REGION_MAX ); + + region->inetmsg_id = k_inetmsg_region; + region->client = 0; + region->flags = global_ent_region.flags; + + u32 l = vg_strncpy( global_ent_region.location, region->loc, + NETWORK_REGION_MAX, k_strncpy_always_add_null ); + + SteamAPI_ISteamNetworkingSockets_SendMessageToConnection( + hSteamNetworkingSockets, network_client.remote, + region, sizeof(netmsg_region)+l+1, + k_nSteamNetworkingSend_Reliable, NULL ); +} + static void network_send_request( netmsg_request *req, vg_msg *body, void (*callback)( netmsg_request *res, vg_msg *body, @@ -277,6 +299,74 @@ static void network_disconnect(void){ } } +static void network_status_string( vg_str *str, u32 *colour ){ + if( steam_ready ){ + if( network_client.user_intent == k_server_intent_offline ){ + vg_strcat( str, "Offline" ); + } + else { + ESteamNetworkingConnectionState state = network_client.state; + + if( state == k_ESteamNetworkingConnectionState_None ) + vg_strcat( str, "No Connection" ); + else if( state == k_ESteamNetworkingConnectionState_Connecting ){ + vg_strcat( str, "Connecting to:\nskaterift.com" ); + + if( network_client.retries ){ + vg_strcat( str, "\n(" ); + vg_strcati32( str, network_client.retries ); + vg_strcat( str, " retries)" ); + } + } + else if( state == k_ESteamNetworkingConnectionState_Connected ){ + vg_strcat( str, "Connected to:\nskaterift.com" ); + *colour = 0xff00a020; + } + else if( state == k_ESteamNetworkingConnectionState_ClosedByPeer ) + vg_strcat( str, "Connection Closed" ); + else if( state == k_ESteamNetworkingConnectionState_FindingRoute ) + vg_strcat( str, "Finding Route" ); + else if( state == + k_ESteamNetworkingConnectionState_ProblemDetectedLocally){ + vg_strcat( str, "Problem Detected\nLocally" ); + *colour = 0xff0000a0; + } + else + vg_strcat( str, "???" ); + } + } + else { + vg_strcat( str, "Steam Offline" ); + *colour = 0xff0000a0; + } +} + +static void render_server_status_gui(void){ + render_fb_bind( gpipeline.fb_workshop_preview, 0 ); + + /* HACK */ + vg_ui.cur_vert = 0; + vg_ui.cur_indice = 0; + vg_ui.vert_start = 0; + vg_ui.indice_start = 0; + + ui_rect r = { 0, 0, 128, 48 }; + + char buf[128]; + vg_str str; + vg_strnull( &str, buf, sizeof(buf) ); + + u32 bg = 0xff000000; + network_status_string( &str, &bg ); + + ui_fill( r, bg ); + ui_text( r, buf, 1, k_ui_align_center, 0 ); + ui_flush( k_ui_shader_colour, 128, 48 ); + + skaterift.rt_textures[ k_skaterift_rt_server_status ] = + gpipeline.fb_workshop_preview->attachments[0].id; +} + static void on_server_connect_status( CallbackMsg_t *msg ){ SteamNetConnectionStatusChangedCallback_t *info = (void *)msg->m_pubParam; vg_info( " Connection status changed for %lu\n", info->m_hConn ); @@ -329,6 +419,8 @@ static void on_server_connect_status( CallbackMsg_t *msg ){ else{ //vg_warn( " Recieved signal from unknown connection\n" ); } + + render_server_status_gui(); } static void on_persona_state_change( CallbackMsg_t *msg ){ @@ -387,6 +479,7 @@ static void network_sign_on_complete(void){ for( u32 i=0; i