}
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 ){
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;
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;
* --------------------------------- */
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 );
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 );
}
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;
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 */
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 );
}
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,
}
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 ) ){
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" );
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 );
}
}
}
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 );
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 {
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,
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 )
}
}
- 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" );
{
}
vg_msg_end_frame( &sav );
- file->len = sav.len;
+ file->len = sav.cur.co;
}
static int skaterift_autosave( int async ){
#include "respawn.c"
#include "network.c"
#include "player_remote.c"
+#include "vg/vg_audio_dsp.h"
static struct player_avatar localplayer_avatar;
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 )
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 );
};
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 );
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 */
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 */
#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"
* 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 */
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;
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
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),
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;
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 ];