X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=network.h;h=4bd5a37ddcc6dbcad21e9b0022c60c8ed17e8199;hb=494c85703c76c4123c49937a32584840b6be1470;hp=f97cfbc8f5fdfeb3d50b4009b03c51fb07306e07;hpb=91d035f4845a6f9f62487b43e5142c4148e7f047;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/network.h b/network.h index f97cfbc..4bd5a37 100644 --- a/network.h +++ b/network.h @@ -1,8 +1,96 @@ -#ifndef NETWORK_H -#define NETWORK_H +/* + * Copyright (C) 2021-2022 Mt.ZERO Software, Harry Godden - All Rights Reserved + * All trademarks are property of their respective owners + */ -#include "vg/vg_stdint.h" +#pragma once +#include "vg/vg_platform.h" +#include "vg/vg_steam_networking.h" +#include "steam.h" +#include "network_common.h" +#include "network_msg.h" +#include "addon_types.h" +#define NETWORK_MAX_REQUESTS 8 +/* + * Interface + */ -#endif /* NETWORK_H */ +/* Call it at start; Connects us to the gameserver */ +void network_init(void); + +/* Run this from main loop */ +void network_update(void); + +/* Call it at shutdown */ +void network_end(void); + +/* + * Can buffer up a bunch of these by calling many times, they will be + * sent at the next connection + */ +void network_submit_highscore( u32 trackid, u16 points, u16 time ); + +/* + * Game endpoints are provided with the same names to allow running without a + * network connection. + */ + +struct network_client +{ + u8 app_symmetric_key[ 1024 ]; + u32 app_key_length; + EServerMode auth_mode; + + HSteamNetConnection remote; + ESteamNetworkingConnectionState state; + u32 remote_version; + + f64 last_attempt, last_frame; + u32 retries; + + i32 network_info; + i32 auto_connect; + + struct network_request { + vg_pool_node poolnode; + void (*callback)( netmsg_request *res, vg_msg *body, u64 userdata ); + f64 sendtime; + u64 userdata; + } + *request_buffer; + vg_pool request_pool; + + SteamNetworkingIPAddr ip; + char host_port[8], host_adress[256]; + bool ip_resolved; + + enum server_intent { + k_server_intent_offline, + k_server_intent_online + } + user_intent; + f64 last_intent_change; + f32 fintent; /* yeah this shit really shouldnt be here but oh well */ +} +extern network_client; + +int packet_minsize( SteamNetworkingMessage_t *msg, u32 size ); +void network_send_item( enum netmsg_playeritem_type type ); +void network_request_scoreboard( const char *mod_uid, + const char *route_uid, + u32 week, u64 userdata ); +void network_publish_laptime( const char *mod_uid, + const char *route_uid, f64 lap_time ); +void chat_send_message( const char *message ); +void render_server_status_gui(void); +void network_status_string( vg_str *str, u32 *colour ); +void network_send_region(void); +void network_set_host( const char *host_str, const char *port_str ); + +static inline int network_connected(void) +{ + if( network_client.remote_version != NETWORK_SKATERIFT_VERSION ) return 0; + return network_client.state == k_ESteamNetworkingConnectionState_Connected; +}