vg_msg api change
authorhgn <hgodden00@gmail.com>
Sun, 29 Oct 2023 16:36:28 +0000 (16:36 +0000)
committerhgn <hgodden00@gmail.com>
Sun, 29 Oct 2023 16:36:28 +0000 (16:36 +0000)
addon.c
build.c
ent_skateshop.c
gameserver.c
network.c
save.c
skaterift.c
workshop.c
world_entity.c
world_load.c

diff --git a/addon.c b/addon.c
index fcec0b9f6e8ba945dc8d46a6197ef750368819c5..ef92b0083ce4f1ba1c6a49a39d2a0e4c4a191aea 100644 (file)
--- 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 381ff349431c96314a29c16cec4c651894940d45..2b3d2a7dd1d02ffde49d25521cd72f24cd314788 100644 (file)
--- 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 );
 }
index 87e7509304a48719fa15471e98f8ae26c4c98fb1..bfec73f9edaf24fe6082b90af3182f7fb2875478 100644 (file)
@@ -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 */
index b90a4a8a34905c337709985477ebcab5913fbb2a..1d67536e314d408f24738a66714128b4d32a45a0 100644 (file)
@@ -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 ) ){
index d60dc0cb38f429e32d102163e737649e2154e561..96832ae3166c253d15cc58994a442ff9ef740f7c 100644 (file)
--- 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 a3990d981dbef4c66e45e2569af79ab5704e9781..a8076c76a9f0fe3434eb7b1c55a2f07cd4d65639 100644 (file)
--- 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 ){
index 5b69d566664d31bcbfb8dc84cc5854031b475d9a..1d7113265d590f539274dee6357ff25cc4652d32 100644 (file)
@@ -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 */
index 6cb6b6fade73050d2aeb45e6170a9aafa5e5fd64..4d8856bed8a2410b89a6e300897d436f163120ac 100644 (file)
@@ -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),
index bf7916e33369a94ea7017d59ce8e664ca1c5b12d..eccf2b4f7afed09c36d349b6432e86015d3c63fc 100644 (file)
@@ -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;
index 7fb6e478694a76afb7be635211df3aaf5c621c21..70ca783137dcc48751ec4851696562658c130199 100644 (file)
@@ -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; i<data->instance_count; i++ ){
       world_instance *world = &world_static.instances[ data->instance_start+i ];