Skip to content

Commit 6a9408d

Browse files
Initial work on Game Coordinator
1 parent fd62410 commit 6a9408d

File tree

11 files changed

+828
-238
lines changed

11 files changed

+828
-238
lines changed

dll/dll/econ_item.h

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
#ifndef __INCLUDED_ECON_ITEM_H__
1919
#define __INCLUDED_ECON_ITEM_H__
2020

21+
#include "base.h"
22+
2123
struct Econ_Item_Attribute
2224
{
2325
uint32 def;
@@ -32,7 +34,29 @@ struct Econ_Item
3234
EItemQuality quality;
3335
uint32 inv_pos;
3436
uint32 quantity;
37+
uint8 flags;
38+
uint8 origin;
39+
std::string custom_name;
40+
std::string custom_desc;
41+
bool in_use;
42+
uint64 original_id;
3543
std::vector<Econ_Item_Attribute> attributes;
3644
};
3745

46+
inline bool check_econ_item_name(const std::string &name)
47+
{
48+
if (name.size() > 40)
49+
return false;
50+
51+
return true;
52+
}
53+
54+
inline bool check_econ_item_desc(const std::string &desc)
55+
{
56+
if (desc.size() > 80)
57+
return false;
58+
59+
return true;
60+
}
61+
3862
#endif

dll/dll/steam_game_coordinator.h

Lines changed: 41 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,32 +19,65 @@
1919
#define __INCLUDED_STEAM_GAME_COORDINATOR_H__
2020

2121
#include "base.h"
22+
#include "econ_item.h"
23+
24+
class Steam_User_Items;
25+
class Steam_GameServer_Items;
2226

2327
class Steam_Game_Coordinator :
2428
public ISteamGameCoordinator
2529
{
30+
static constexpr const auto gc_user_file = "gc.json";
2631
constexpr const static uint32 protobuf_mask = 0x80000000;
2732

2833
class Settings *settings{};
2934
class Networking *network{};
30-
class SteamCallResults *callback_results{};
35+
class Local_Storage *local_storage{};
3136
class SteamCallBacks *callbacks{};
3237
class RunEveryRunCB *run_every_runcb{};
38+
bool is_server{};
39+
40+
struct GC_Message
41+
{
42+
uint32 msg_type;
43+
std::string msg_body;
44+
std::chrono::high_resolution_clock::time_point created{};
45+
double post_in{};
46+
};
47+
48+
std::vector<GC_Message> pending_messages{};
49+
std::queue<GC_Message> incoming_messages{};
50+
51+
int gc_version{};
52+
bool gc_initialized{};
53+
54+
void parse_gc_config();
55+
bool gc_enabled();
56+
Steam_User_Items *client_items();
57+
Steam_GameServer_Items *server_items();
58+
void push_incoming(uint32 msg_type, const std::string &message, double delay = 0.1);
59+
void initialize_gc();
60+
61+
void handle_set_item_pos(const void *input, uint32 input_size);
62+
void handle_delete_item(const void *input, uint32 input_size);
63+
void handle_respawn(const void *input, uint32 input_size);
64+
void handle_motd_request(const void *input, uint32 input_size);
3365

34-
std::queue<std::string> outgoing_messages{};
35-
36-
void push_incoming(std::string message);
37-
38-
static void steam_callback(void *object, Common_Message *msg);
3966
static void steam_run_every_runcb(void *object);
4067

4168
void RunCallbacks();
42-
void Callback(Common_Message *msg);
4369

4470
public:
45-
Steam_Game_Coordinator(class Settings *settings, class Networking *network, class SteamCallResults *callback_results, class SteamCallBacks *callbacks, class RunEveryRunCB *run_every_runcb);
71+
Steam_Game_Coordinator(class Settings *settings, class Networking *network, class Local_Storage *local_storage, class SteamCallBacks *callbacks, class RunEveryRunCB *run_every_runcb, bool is_server);
4672
~Steam_Game_Coordinator();
4773

74+
void on_client_connected(CSteamID steam_id);
75+
void on_client_disconnected(CSteamID steam_id);
76+
void on_items_received(CSteamID steam_id, const std::vector<Econ_Item> &items);
77+
void on_item_pos_updated(CSteamID steam_id, const Econ_Item &item);
78+
void on_item_deleted(CSteamID steam_id, uint64 item_id);
79+
void on_respawn_request(CSteamID steam_id);
80+
4881
// sends a message to the Game Coordinator
4982
EGCResults SendMessage_( uint32 unMsgType, const void *pubData, uint32 cubData );
5083

dll/dll/steam_gameserver_items.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
#include "base.h"
2222
#include "econ_item.h"
2323

24+
class Steam_Game_Coordinator;
25+
2426
class Steam_GameServer_Items :
2527
public ISteamGameServerItems001,
2628
public ISteamGameServerItems002,
@@ -38,11 +40,14 @@ public ISteamGameServerItems
3840
std::chrono::high_resolution_clock::time_point created{};
3941
CSteamID steam_id{};
4042
SteamAPICall_t steam_api_call;
43+
bool is_gc{};
4144
};
4245

4346
std::map<CSteamID, std::vector<Econ_Item>> all_user_items;
4447
std::vector<RequestInventory> pending_items_requests{};
4548

49+
Steam_Game_Coordinator *gc();
50+
4651
void network_callback_inventory_response(Common_Message *msg);
4752
void network_callback_inventory_pos_update(Common_Message *msg);
4853
void network_callback_item_deletion(Common_Message *msg);
@@ -56,6 +61,9 @@ public ISteamGameServerItems
5661
Steam_GameServer_Items(class Settings *settings, class Networking *network, class SteamCallBacks *callbacks, class SteamCallResults *callback_results, class RunEveryRunCB *run_every_runcb);
5762
~Steam_GameServer_Items();
5863

64+
SteamAPICall_t request_user_items(CSteamID steam_id, bool is_gc);
65+
void remove_user_items(CSteamID steam_id);
66+
5967
SteamAPICall_t LoadItems( CSteamID ownerID );
6068
void LoadItems_old( CSteamID ownerID );
6169
SteamAPICall_t GetItemCount( CSteamID ownerID );

dll/dll/steam_user_items.h

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,18 +38,25 @@ public ISteamUserItems
3838
std::vector<Econ_Item> items;
3939
bool items_loaded{};
4040

41+
uint64 item_id_local_to_network(uint64 item_id);
42+
uint64 item_id_network_to_local(uint64 item_id);
43+
4144
void network_callback_inventory_request(Common_Message *msg);
4245
void network_callback(Common_Message *msg);
4346

4447
static void steam_user_items_network_callback(void *object, Common_Message *msg);
4548

46-
void load_items_from_file();
47-
void save_items_to_file();
48-
4949
public:
5050
Steam_User_Items(class Settings *settings, class Networking *network, class Local_Storage *local_storage, class SteamCallBacks *callbacks, class SteamCallResults *callback_results);
5151
~Steam_User_Items();
5252

53+
const std::vector<Econ_Item> &load_items_from_file();
54+
void save_items_to_file();
55+
void send_items(uint64 server_steamid, SteamAPICall_t steam_api_call, bool is_gc);
56+
const Econ_Item *set_item_pos(uint64 item_id, uint32 inv_pos, bool is_gc);
57+
bool delete_item(uint64 item_id, bool is_gc);
58+
void respawn_on_loadout_change();
59+
5360
SteamAPICall_t LoadItems();
5461
void LoadItems_old();
5562
SteamAPICall_t GetItemCount();

dll/net.proto

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -337,6 +337,11 @@ message GameServer_Items_Messages {
337337
uint32 inv_pos = 5;
338338
uint32 quantity = 6;
339339
repeated Attribute attributes = 7;
340+
uint32 flags = 8;
341+
uint32 origin = 9;
342+
string custom_name = 10;
343+
string custom_desc = 11;
344+
uint64 original_id = 12;
340345
}
341346
message InventoryRequest {
342347
uint64 steam_api_call = 1;
@@ -358,14 +363,16 @@ message GameServer_Items_Messages {
358363
Response_Inventory = 1;
359364
Request_UpdateInventoryPos = 2;
360365
Request_DeleteItem = 3;
366+
Request_Respawn = 4;
361367
}
362368

363369
Types type = 1;
370+
bool is_gc = 2;
364371
oneof data_messages {
365-
InventoryRequest inventory_request = 2;
366-
InventoryResponse inventory_response = 3;
367-
InventoryPosUpdate inventory_pos_update = 4;
368-
ItemDeletion item_deletion = 5;
372+
InventoryRequest inventory_request = 3;
373+
InventoryResponse inventory_response = 4;
374+
InventoryPosUpdate inventory_pos_update = 5;
375+
ItemDeletion item_deletion = 6;
369376
}
370377
}
371378

dll/steam_client.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ Steam_Client::Steam_Client()
126126
steam_networking_sockets = new Steam_Networking_Sockets(settings_client, network, callback_results_client, callbacks_client, run_every_runcb, NULL);
127127
steam_networking_sockets_serialized = new Steam_Networking_Sockets_Serialized(settings_client, network, callback_results_client, callbacks_client, run_every_runcb);
128128
steam_networking_messages = new Steam_Networking_Messages(settings_client, network, callback_results_client, callbacks_client, run_every_runcb);
129-
steam_game_coordinator = new Steam_Game_Coordinator(settings_client, network, callback_results_client, callbacks_client, run_every_runcb);
129+
steam_game_coordinator = new Steam_Game_Coordinator(settings_client, network, local_storage, callbacks_client, run_every_runcb, false);
130130
steam_networking_utils = new Steam_Networking_Utils(settings_client, network, callback_results_client, callbacks_client, run_every_runcb);
131131
steam_unified_messages = new Steam_Unified_Messages(settings_client, network, callback_results_client, callbacks_client, run_every_runcb);
132132
steam_game_search = new Steam_Game_Search(settings_client, network, callback_results_client, callbacks_client, run_every_runcb);
@@ -154,7 +154,7 @@ Steam_Client::Steam_Client()
154154
steam_gameserver_networking_sockets = new Steam_Networking_Sockets(settings_server, network, callback_results_server, callbacks_server, run_every_runcb, steam_networking_sockets->get_shared_between_client_server());
155155
steam_gameserver_networking_sockets_serialized = new Steam_Networking_Sockets_Serialized(settings_server, network, callback_results_server, callbacks_server, run_every_runcb);
156156
steam_gameserver_networking_messages = new Steam_Networking_Messages(settings_server, network, callback_results_server, callbacks_server, run_every_runcb);
157-
steam_gameserver_game_coordinator = new Steam_Game_Coordinator(settings_server, network, callback_results_server, callbacks_server, run_every_runcb);
157+
steam_gameserver_game_coordinator = new Steam_Game_Coordinator(settings_server, network, local_storage, callbacks_server, run_every_runcb, true);
158158
steam_masterserver_updater = new Steam_Masterserver_Updater(settings_server, network, callback_results_server, callbacks_server, run_every_runcb, steam_gameserver);
159159
steam_gameserver_gamestats = new Steam_GameStats(settings_server, network, callback_results_server, callbacks_server, run_every_runcb);
160160
steam_gameserver_items = new Steam_GameServer_Items(settings_server, network, callbacks_server, callback_results_server, run_every_runcb);

0 commit comments

Comments
 (0)