From 6b036c10d38e7d691eb0bc06c29235b450c3ff10 Mon Sep 17 00:00:00 2001 From: hgn Date: Sun, 29 Oct 2023 16:36:28 +0000 Subject: [PATCH] vg_msg api change --- addon.c | 27 ++++++++++----------------- build.c | 2 +- ent_skateshop.c | 34 +++++++++++++++------------------- gameserver.c | 24 ++++++++++-------------- network.c | 34 ++++++++++++---------------------- save.c | 28 ++++++++++++++-------------- skaterift.c | 42 +++++++++++++++++++----------------------- workshop.c | 31 +++++++++++++------------------ world_entity.c | 2 +- world_load.c | 6 ++---- 10 files changed, 97 insertions(+), 133 deletions(-) diff --git a/addon.c b/addon.c index fcec0b9..ef92b00 100644 --- a/addon.c +++ b/addon.c @@ -306,14 +306,11 @@ static addon_reg *addon_mount_workshop_folder( PublishedFileId_t workshop_id, } enum addon_type type = k_addon_type_none; - vg_msg root = {0}; - root.buf = reg->metadata; - root.len = reg->metadata_len; - root.max = sizeof(reg->metadata); + vg_msg msg; + vg_msg_init( &msg, reg->metadata, reg->metadata_len ); - vg_msg workshop = root; - if( vg_msg_seekframe( &workshop, "workshop", k_vg_msg_first )){ - type = vg_msg_seekkvu32( &workshop, "type", k_vg_msg_first ); + if( vg_msg_seekframe( &msg, "workshop" )){ + type = vg_msg_getkvu32( &msg, "type", 0 ); } if( type == k_addon_type_none ){ @@ -358,10 +355,8 @@ static addon_reg *addon_mount_local_addon( const char *folder, if( reg->metadata_len == 0 ){ /* create our own content commands */ - vg_msg msg = {0}; - msg.buf = reg->metadata; - msg.len = 0; - msg.max = sizeof(reg->metadata); + vg_msg msg; + vg_msg_init( &msg, reg->metadata, sizeof(reg->metadata) ); u32 content_count = 0; @@ -394,7 +389,7 @@ static addon_reg *addon_mount_local_addon( const char *folder, if( !content_count ) return NULL; if( msg.error == k_vg_msg_error_OK ) - reg->metadata_len = msg.cur; + reg->metadata_len = msg.cur.co; else{ vg_error( "Error creating metadata: %d\n", msg.error ); return NULL; @@ -624,12 +619,10 @@ static int addon_cache_load_request( enum addon_type type, u16 id, * --------------------------------- */ vg_str content_path = folder; - vg_msg root = {0}; - root.buf = reg->metadata; - root.len = reg->metadata_len; - root.max = sizeof(reg->metadata); + vg_msg msg; + vg_msg_init( &msg, reg->metadata, reg->metadata_len ); - const char *kv_content = vg_msg_seekkvstr( &root, "content", 0 ); + const char *kv_content = vg_msg_getkvstr( &msg, "content" ); if( kv_content ){ vg_strcat( &content_path, "/" ); vg_strcat( &content_path, kv_content ); diff --git a/build.c b/build.c index 381ff34..2b3d2a7 100644 --- a/build.c +++ b/build.c @@ -85,7 +85,7 @@ void write_msg( vg_msg *msg, const char *path ){ exit(0); } - fwrite( msg->buf, msg->cur, 1, fp ); + fwrite( msg->buf, msg->cur.co, 1, fp ); fclose( fp ); vg_success( "Written %s (%ub)\n", path, msg->cur ); } diff --git a/ent_skateshop.c b/ent_skateshop.c index 87e7509..bfec73f 100644 --- a/ent_skateshop.c +++ b/ent_skateshop.c @@ -512,18 +512,16 @@ fade_out:; if( global_skateshop.render.reg_id != global_skateshop.selected_board_id ){ global_skateshop.render.item_title = ""; global_skateshop.render.item_desc = ""; - vg_msg root = {0}; - root.buf = reg->metadata; - root.len = reg->metadata_len; - root.max = sizeof(reg->metadata); - - vg_msg workshop = root; - if( vg_msg_seekframe( &workshop, "workshop", 0 ) ){ - const char *title = vg_msg_seekkvstr( &workshop, "title", 0 ); + vg_msg msg; + vg_msg_init( &msg, reg->metadata, reg->metadata_len ); + + if( vg_msg_seekframe( &msg, "workshop" ) ){ + const char *title = vg_msg_getkvstr( &msg, "title" ); if( title ) global_skateshop.render.item_title = title; - const char *dsc = vg_msg_seekkvstr( &workshop, "author", 0 ); + const char *dsc = vg_msg_getkvstr( &msg, "author" ); if( dsc ) global_skateshop.render.item_desc = dsc; + vg_msg_skip_frame( &msg ); } global_skateshop.render.reg_id = global_skateshop.selected_board_id; @@ -572,17 +570,15 @@ static void skateshop_render_worldshop( ent_skateshop *shop ){ addon_reg *reg = get_addon_from_index( k_addon_type_world, global_skateshop.selected_world_id ); - vg_msg root = {0}; - root.buf = reg->metadata; - root.len = reg->metadata_len; - root.max = sizeof(reg->metadata); - vg_msg workshop = root; - if( vg_msg_seekframe( &workshop, "workshop", 0 ) ){ - global_skateshop.render.world_title = vg_msg_seekkvstr( &workshop, - "title", 0 ); - } - global_skateshop.render.world_loc = vg_msg_seekkvstr(&root,"location",0); + vg_msg msg; + vg_msg_init( &msg, reg->metadata, reg->metadata_len ); + global_skateshop.render.world_loc = vg_msg_getkvstr( &msg, "location" ); global_skateshop.render.world_reg = global_skateshop.selected_world_id; + + if( vg_msg_seekframe( &msg, "workshop" ) ){ + global_skateshop.render.world_title = vg_msg_getkvstr( &msg, "title"); + vg_msg_skip_frame( &msg ); + } } /* Text */ diff --git a/gameserver.c b/gameserver.c index b90a4a8..1d67536 100644 --- a/gameserver.c +++ b/gameserver.c @@ -406,10 +406,9 @@ static void gameserver_request_respond( enum request_status status, int client_id = gameserver_client_index( msg->m_conn ); u32 len = 0; if( status == k_request_status_ok ){ - len = body->len; - + len = body->cur.co; vg_success( "[%d#%d] Response: %d\n", client_id, (i32)res->id, status ); - vg_msg_print( body ); + vg_msg_print( body, len ); } else{ vg_warn( "[%d#%d] Response: %d\n", client_id, (i32)res->id, status ); @@ -439,20 +438,17 @@ static void gameserver_process_user_request( db_request *db_req ){ } netmsg_request *req = (netmsg_request *)msg->m_pData; - vg_msg data = {0}; - data.buf = req->q; - data.len = msg->m_cbSize - sizeof(netmsg_request); - data.max = data.len; + vg_msg data; + vg_msg_init( &data, req->q, msg->m_cbSize - sizeof(netmsg_request) ); /* create response packet */ netmsg_request *res = alloca( sizeof(netmsg_request) + 512 ); res->inetmsg_id = k_inetmsg_response; res->id = req->id; - vg_msg body = {0}; - body.buf = res->q; - body.max = 512; + vg_msg body; + vg_msg_init( &body, res->q, 512 ); - const char *endpoint = vg_msg_seekkvstr( &data, "endpoint", 0 ); + const char *endpoint = vg_msg_getkvstr( &data, "endpoint" ); if( !endpoint ){ gameserver_request_respond( k_request_status_invalid_endpoint, @@ -461,9 +457,9 @@ static void gameserver_process_user_request( db_request *db_req ){ } if( !strcmp( endpoint, "scoreboard" ) ){ - const char *mod = vg_msg_seekkvstr( &data, "mod", 0 ); - const char *route = vg_msg_seekkvstr( &data, "route", 0 ); - u32 week = vg_msg_seekkvu32( &data, "week", 0 ); + const char *mod = vg_msg_getkvstr( &data, "mod" ); + const char *route = vg_msg_getkvstr( &data, "route" ); + u32 week = vg_msg_getkvu32( &data, "week", 0 ); char table_name[ DB_TABLE_UID_MAX ]; if( !db_get_highscore_table_name( mod, route, week, table_name ) ){ diff --git a/network.c b/network.c index d60dc0c..96832ae 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,12 @@ 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 ); + if( vg_msg_seekframe( body, "rows" ) ){ + while( vg_msg_seekframe( body, NULL ) ){ + const char *username = vg_msg_getkvstr( body, "username" ); sfd_encode( l ++, username ); - vg_msg_skip_frame( &entry ); + vg_msg_skip_frame( body ); } } } @@ -231,10 +225,8 @@ static void network_request_scoreboard( const char *mod_uid, 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 ); @@ -252,14 +244,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 { diff --git a/save.c b/save.c index a3990d9..a8076c7 100644 --- a/save.c +++ b/save.c @@ -65,13 +65,15 @@ static void skaterift_read_addon_alias( vg_msg *msg, const char *key, alias->workshop_id = 0; alias->type = type; - vg_msg_cmd kv = vg_msg_seekkv( msg, key, 0 ); - if( kv.code == k_vg_msg_kvstring ){ - vg_strncpy( kv.value, alias->foldername, sizeof(alias->foldername), - k_strncpy_allow_cutoff ); + vg_msg_cmd kv; + if( vg_msg_getkvcmd( msg, key, &kv ) ){ + if( kv.code == k_vg_msg_kvstring ){ + vg_strncpy( kv.value, alias->foldername, sizeof(alias->foldername), + k_strncpy_allow_cutoff ); + } + else + vg_msg_cast( kv.value, kv.code, &alias->workshop_id, k_vg_msg_u64 ); } - else - alias->workshop_id = vg_msg_read_as_u64( &kv ); } static void skaterift_populate_world_savedata( savedata_file *file, @@ -89,9 +91,8 @@ static void skaterift_populate_world_savedata( savedata_file *file, skaterift_world_get_save_path( which, file->path ); - vg_msg sav = {0}; - sav.buf = file->buf; - sav.max = sizeof(file->buf); + vg_msg sav; + vg_msg_init( &sav, file->buf, sizeof(file->buf) ); if( which == k_world_purpose_hub ){ if( world_static.instances[0].status == k_world_status_loaded ) @@ -106,15 +107,14 @@ static void skaterift_populate_world_savedata( savedata_file *file, } } - file->len = sav.len; + file->len = sav.cur.co; } static void skaterift_populate_main_savedata( savedata_file *file ){ strcpy( file->path, str_skaterift_main_save ); - vg_msg sav = {0}; - sav.buf = file->buf; - sav.max = sizeof(file->buf); + vg_msg sav; + vg_msg_init( &sav, file->buf, sizeof(file->buf) ); vg_msg_frame( &sav, "player" ); { @@ -137,7 +137,7 @@ static void skaterift_populate_main_savedata( savedata_file *file ){ } vg_msg_end_frame( &sav ); - file->len = sav.len; + file->len = sav.cur.co; } static int skaterift_autosave( int async ){ diff --git a/skaterift.c b/skaterift.c index 5b69d56..1d71132 100644 --- a/skaterift.c +++ b/skaterift.c @@ -55,6 +55,7 @@ #include "respawn.c" #include "network.c" #include "player_remote.c" +#include "vg/vg_audio_dsp.h" static struct player_avatar localplayer_avatar; @@ -136,27 +137,25 @@ static void skaterift_restore_state(void){ strcpy( sav.path, str_skaterift_main_save ); savedata_file_read( &sav ); - vg_msg kvsav = {0}; - kvsav.buf = sav.buf; - kvsav.len = sav.len; - kvsav.max = sizeof(sav.buf); + vg_msg kvsav; + vg_msg_init( &kvsav, sav.buf, sizeof(sav.buf) ); u32 board_reg_id = 0, player_reg_id = 0; - vg_msg player = kvsav; - if( vg_msg_seekframe( &player, "player", 0 ) ){ + vg_msg_cursor orig = kvsav.cur; + + if( vg_msg_seekframe( &kvsav, "player" ) ){ addon_alias q; /* board */ - skaterift_read_addon_alias( &player, "board", k_addon_type_board, &q ); + skaterift_read_addon_alias( &kvsav, "board", k_addon_type_board, &q ); u32 reg_id = addon_match( &q ); if( reg_id != 0xffffffff ) board_reg_id = reg_id; - /* playermodel */ - skaterift_read_addon_alias( &player, "playermodel", + skaterift_read_addon_alias( &kvsav, "playermodel", k_addon_type_player, &q ); reg_id = addon_match( &q ); if( reg_id != 0xffffffff ) @@ -168,12 +167,12 @@ static void skaterift_restore_state(void){ localplayer.playermodel_view_slot = addon_cache_create_viewer( k_addon_type_player, player_reg_id ); - vg_msg world = kvsav; - if( vg_msg_seekframe( &world, "world", 0 ) ){ + kvsav.cur = orig; + if( vg_msg_seekframe( &kvsav, "world" ) ){ addon_alias q; /* world */ - skaterift_read_addon_alias( &world, "alias", k_addon_type_world, &q ); + skaterift_read_addon_alias( &kvsav, "alias", k_addon_type_world, &q ); u32 reg_id = addon_match( &q ); if( reg_id != 0xffffffff ){ addon_reg *reg = get_addon_from_index( k_addon_type_world, reg_id ); @@ -185,14 +184,13 @@ static void skaterift_restore_state(void){ }; skaterift_world_load_thread( &args ); - world_set_active_instance( vg_msg_seekkvu32( &world, "index", 0 ) ); + world_set_active_instance( vg_msg_getkvu32( &kvsav, "index", 0 ) ); world_static.active_trigger_volume_count = 0; localplayer.viewable_world = world_current_instance(); } - vg_msg_cmd position = vg_msg_seekkv( &world, "position", 0 ); v3f pos; - vg_msg_convert_num( &position, k_vg_msg_float|k_vg_msg_32b, 3, pos ); + vg_msg_getkvv3f( &kvsav, "position", pos, (v3f){0.0f,0.0f,0.0f} ); if( v3_length2(pos) > 1.0f ) player__setpos( pos ); @@ -255,14 +253,13 @@ static void vg_load(void){ k_addon_type_world, ".mdl" ); { - vg_msg msg = {0}; - msg.buf = spawn->metadata; - msg.max = sizeof(spawn->metadata); + vg_msg msg; + vg_msg_init( &msg, spawn->metadata, sizeof(spawn->metadata) ); vg_msg_frame( &msg, "workshop" ); vg_msg_wkvstr( &msg, "title", "Understate DIY" ); vg_msg_end_frame( &msg ); vg_msg_wkvstr( &msg, "location", "USA" ); - spawn->metadata_len = msg.cur; + spawn->metadata_len = msg.cur.co; } /* mtzero island */ @@ -270,14 +267,13 @@ static void vg_load(void){ k_addon_type_world, ".mdl" ); { - vg_msg msg = {0}; - msg.buf = mtzero->metadata; - msg.max = sizeof(mtzero->metadata); + vg_msg msg; + vg_msg_init( &msg, spawn->metadata, sizeof(mtzero->metadata) ); vg_msg_frame( &msg, "workshop" ); vg_msg_wkvstr( &msg, "title", "Mt.Zero Island" ); vg_msg_end_frame( &msg ); vg_msg_wkvstr( &msg, "location", "Australia" ); - mtzero->metadata_len = msg.cur; + mtzero->metadata_len = msg.cur.co; } /* load home/permanent world manually */ diff --git a/workshop.c b/workshop.c index 6cb6b6f..4d8856b 100644 --- a/workshop.c +++ b/workshop.c @@ -7,6 +7,7 @@ #include "vg/vg.h" #include "vg/vg_tex.h" #include "vg/vg_msg.h" +#include "vg/vg_binstr.h" #include "ent_skateshop.h" #include "vg/vg_steam_auth.h" @@ -314,10 +315,8 @@ static void _workshop_form_submit_thread( void *data ) * Create the metadata file * -----------------------------------------------------------------------*/ u8 descriptor_buf[ 512 ]; - vg_msg descriptor = {0}; - descriptor.buf = descriptor_buf; - descriptor.max = sizeof(descriptor_buf); - + vg_msg descriptor; + vg_msg_init( &descriptor, descriptor_buf, sizeof(descriptor_buf) ); vg_linear_clear( vg_mem.scratch ); /* short description */ @@ -329,10 +328,10 @@ static void _workshop_form_submit_thread( void *data ) vg_msg_end_frame( &descriptor ); //vg_msg_wkvstr( &descriptor, "location", "USA" ); - char *short_descriptor_str = vg_linear_alloc( vg_mem.scratch, - vg_align8(descriptor.cur*2+1)); - vg_bin_str( descriptor_buf, short_descriptor_str, descriptor.cur ); - short_descriptor_str[descriptor.cur*2] = '\0'; + char *short_descriptor_str = + vg_linear_alloc( vg_mem.scratch, vg_align8(descriptor.cur.co*2+1)); + vg_bin_str( descriptor_buf, short_descriptor_str, descriptor.cur.co ); + short_descriptor_str[descriptor.cur.co*2] = '\0'; vg_info( "binstr: %s\n", short_descriptor_str ); vg_dir dir; @@ -377,7 +376,7 @@ static void _workshop_form_submit_thread( void *data ) workshop_form.op = k_workshop_op_none; return; } - fwrite( descriptor_buf, descriptor.cur, 1, fp ); + fwrite( descriptor_buf, descriptor.cur.co, 1, fp ); fclose( fp ); /* Save the preview @@ -678,19 +677,15 @@ static void workshop_op_download_and_view_submission( int result_index ) u32 len = strlen(metadata_str); vg_info( "Metadata: %s\n", metadata_str ); vg_str_bin( metadata_str, metadata_buf, len ); - vg_msg root = {0}; - root.buf = metadata_buf; - root.len = len/2; - root.max = len/2; + vg_msg msg; + vg_msg_init( &msg, metadata_buf, len/2 ); - vg_msg workshop = root; - if( vg_msg_seekframe( &workshop, "workshop", k_vg_msg_first )){ - u32 type = vg_msg_seekkvu32( &workshop, "type", k_vg_msg_first ); + if( vg_msg_seekframe( &msg, "workshop" )){ + u32 type = vg_msg_getkvu32( &msg, "type", 0 ); workshop_form.submission.type = type; workshop_form.submission.submission_type_selection = type; - const char *kv_folder = vg_msg_seekkvstr( &workshop, "folder", - k_vg_msg_first ); + const char *kv_folder = vg_msg_getkvstr( &msg, "folder" ); if( kv_folder ){ vg_strncpy( kv_folder, workshop_form.addon_folder, sizeof(workshop_form.addon_folder), diff --git a/world_entity.c b/world_entity.c index bf7916e..eccf2b4 100644 --- a/world_entity.c +++ b/world_entity.c @@ -586,7 +586,7 @@ static void world_entity_start( world_instance *world, vg_msg *sav ){ ent_challenge *challenge = mdl_arritm( &world->ent_challenge, i ); const char *alias = mdl_pstr( &world->meta, challenge->pstr_alias ); - if( vg_msg_seekkvu32( sav, alias, k_vg_msg_first ) ){ + if( vg_msg_getkvu32( sav, alias, 0 ) ){ ent_call call; call.data = NULL; call.function = 0; diff --git a/world_load.c b/world_load.c index 7fb6e47..70ca783 100644 --- a/world_load.c +++ b/world_load.c @@ -109,10 +109,8 @@ struct world_load_complete_data{ static void skaterift_world_load_done( void *payload, u32 size ){ struct world_load_complete_data *data = payload; - vg_msg sav = {0}; - sav.buf = data->save.buf; - sav.len = data->save.len; - sav.max = data->save.len; + vg_msg sav; + vg_msg_init( &sav, data->save.buf, data->save.len ); for( u32 i=0; iinstance_count; i++ ){ world_instance *world = &world_static.instances[ data->instance_start+i ]; -- 2.25.1