mirror of
https://gitlab.com/Mr_Goldberg/goldberg_emulator.git
synced 2025-12-06 12:14:54 +01:00
Update 128 files
- /dll/base.cpp - /dll/base.h - /dll/common_includes.h - /dll/dll.cpp - /dll/dll.h - /dll/flat.cpp - /dll/local_storage.cpp - /dll/local_storage.h - /dll/net.proto - /dll/network.cpp - /dll/network.h - /dll/rtlgenrandom.c - /dll/rtlgenrandom.def - /dll/settings.cpp - /dll/settings.h - /dll/settings_parser.cpp - /dll/settings_parser.h - /dll/steam_HTMLsurface.h - /dll/steam_applist.cpp - /dll/steam_applist.h - /dll/steam_apps.cpp - /dll/steam_apps.h - /dll/steam_client.cpp - /dll/steam_client.h - /dll/steam_controller.h - /dll/steam_friends.h - /dll/steam_game_coordinator.h - /dll/steam_gamesearch.h - /dll/steam_gameserver.cpp - /dll/steam_gameserver.h - /dll/steam_gameserverstats.cpp - /dll/steam_gameserverstats.h - /dll/steam_http.cpp - /dll/steam_http.h - /dll/steam_inventory.h - /dll/steam_masterserver_updater.h - /dll/steam_matchmaking.h - /dll/steam_matchmaking_servers.cpp - /dll/steam_matchmaking_servers.h - /dll/steam_music.cpp - /dll/steam_music.h - /dll/steam_musicremote.cpp - /dll/steam_musicremote.h - /dll/steam_networking.h - /dll/steam_networking_messages.h - /dll/steam_networking_sockets.h - /dll/steam_networking_socketsserialized.h - /dll/steam_networking_utils.h - /dll/steam_parental.cpp - /dll/steam_parental.h - /dll/steam_parties.h - /dll/steam_remote_storage.h - /dll/steam_remoteplay.h - /dll/steam_screenshots.cpp - /dll/steam_screenshots.h - /dll/steam_tv.h - /dll/steam_ugc.h - /dll/steam_unified_messages.h - /dll/steam_user.h - /dll/steam_user_stats.h - /dll/steam_utils.h - /dll/steam_video.cpp - /dll/steam_video.h - /dll/wrap.cpp - /all/network.h - /all/network.cpp - /all/dll.cpp - /all/base.cpp - /all/base.h - /all/common_includes.h - /all/local_storage.cpp - /all/local_storage.h - /all/rtlgenrandom.c - /all/settings_parser.cpp - /all/settings.cpp - /all/steam_HTMLsurface.h - /all/settings_parser.h - /all/steam_client.h - /all/steam_apps.h - /all/steam_gameserver.h - /all/steam_client.cpp - /all/steam_applist.cpp - /all/steam_gameserver.cpp - /all/steam_controller.h - /all/dll.h - /all/steam_apps.cpp - /all/steam_friends.h - /all/steam_game_coordinator.h - /all/net.proto - /all/rtlgenrandom.def - /all/steam_matchmaking_servers.h - /all/settings.h - /all/steam_applist.h - /all/flat.cpp - /all/steam_gamesearch.h - /all/steam_music.cpp - /all/steam_remoteplay.h - /all/steam_screenshots.cpp - /all/steam_parental.cpp - /all/steam_musicremote.h - /all/steam_networking.h - /all/steam_networking_messages.h - /all/steam_networking_sockets.h - /all/steam_networking_socketsserialized.h - /all/steam_networking_utils.h - /all/steam_parental.h - /all/steam_parties.h - /all/steam_remote_storage.h - /all/steam_screenshots.h - /all/steam_tv.h - /all/steam_ugc.h - /all/steam_unified_messages.h - /all/steam_user.h - /all/steam_user_stats.h - /all/steam_http.cpp - /all/steam_http.h - /all/steam_inventory.h - /all/steam_masterserver_updater.h - /all/steam_matchmaking.h - /all/steam_matchmaking_servers.cpp - /all/steam_music.h - /all/steam_musicremote.cpp - /all/steam_utils.h - /all/steam_video.cpp - /all/wrap.cpp - /all/steam_gameserverstats.cpp - /all/steam_gameserverstats.h - /all/steam_video.h
This commit is contained in:
parent
1c0bdceaac
commit
25c00530f3
64 changed files with 0 additions and 0 deletions
145
all/network.h
Normal file
145
all/network.h
Normal file
|
|
@ -0,0 +1,145 @@
|
|||
/* Copyright (C) 2019 Mr Goldberg
|
||||
This file is part of the Goldberg Emulator
|
||||
|
||||
The Goldberg Emulator is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 3 of the License, or (at your option) any later version.
|
||||
|
||||
The Goldberg Emulator is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the Goldberg Emulator; if not, see
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#ifndef NETWORK_INCLUDE
|
||||
#define NETWORK_INCLUDE
|
||||
|
||||
#include "base.h"
|
||||
|
||||
inline bool protobuf_message_equal(const google::protobuf::MessageLite& msg_a,
|
||||
const google::protobuf::MessageLite& msg_b) {
|
||||
return (msg_a.GetTypeName() == msg_b.GetTypeName()) &&
|
||||
(msg_a.SerializeAsString() == msg_b.SerializeAsString());
|
||||
}
|
||||
|
||||
|
||||
#define DEFAULT_PORT 47584
|
||||
|
||||
#if defined(STEAM_WIN32)
|
||||
typedef unsigned int sock_t;
|
||||
#else
|
||||
typedef int sock_t;
|
||||
#endif
|
||||
|
||||
struct IP_PORT {
|
||||
uint32 ip;
|
||||
uint16 port;
|
||||
bool operator <(const IP_PORT& other) const
|
||||
{
|
||||
return (ip < other.ip) || (ip == other.ip && port < other.port);
|
||||
}
|
||||
};
|
||||
|
||||
struct Network_Callback {
|
||||
void (*message_callback)(void *object, Common_Message *msg);
|
||||
void *object;
|
||||
CSteamID steam_id;
|
||||
};
|
||||
|
||||
enum Callback_Ids {
|
||||
CALLBACK_ID_USER_STATUS,
|
||||
CALLBACK_ID_LOBBY,
|
||||
CALLBACK_ID_NETWORKING,
|
||||
CALLBACK_ID_GAMESERVER,
|
||||
CALLBACK_ID_FRIEND,
|
||||
CALLBACK_ID_AUTH_TICKET,
|
||||
CALLBACK_ID_FRIEND_MESSAGES,
|
||||
CALLBACK_ID_NETWORKING_SOCKETS,
|
||||
CALLBACK_ID_STEAM_MESSAGES,
|
||||
CALLBACK_ID_NETWORKING_MESSAGES,
|
||||
|
||||
CALLBACK_IDS_MAX
|
||||
};
|
||||
|
||||
struct Network_Callback_Container {
|
||||
std::vector<struct Network_Callback> callbacks;
|
||||
};
|
||||
|
||||
struct TCP_Socket {
|
||||
sock_t sock = ~0;
|
||||
bool received_data = false;
|
||||
std::vector<char> recv_buffer;
|
||||
std::vector<char> send_buffer;
|
||||
std::chrono::high_resolution_clock::time_point last_heartbeat_sent, last_heartbeat_received;
|
||||
};
|
||||
|
||||
struct Connection {
|
||||
struct TCP_Socket tcp_socket_outgoing, tcp_socket_incoming;
|
||||
bool connected = false;
|
||||
IP_PORT udp_ip_port;
|
||||
bool udp_pinged = false;
|
||||
IP_PORT tcp_ip_port;
|
||||
std::vector<CSteamID> ids;
|
||||
uint32 appid;
|
||||
std::chrono::high_resolution_clock::time_point last_received;
|
||||
};
|
||||
|
||||
class Networking {
|
||||
bool enabled = false;
|
||||
bool alive;
|
||||
std::chrono::high_resolution_clock::time_point last_run;
|
||||
sock_t udp_socket, tcp_socket;
|
||||
uint16 udp_port, tcp_port;
|
||||
uint32 own_ip;
|
||||
std::vector<struct Connection> connections;
|
||||
struct Connection *find_connection(CSteamID id, uint32 appid = 0);
|
||||
struct Connection *new_connection(CSteamID id, uint32 appid);
|
||||
|
||||
bool handle_announce(Common_Message *msg, IP_PORT ip_port);
|
||||
bool handle_low_level_udp(Common_Message *msg, IP_PORT ip_port);
|
||||
bool handle_tcp(Common_Message *msg, struct TCP_Socket &socket);
|
||||
void send_announce_broadcasts();
|
||||
|
||||
std::vector<CSteamID> ids;
|
||||
uint32 appid;
|
||||
std::chrono::high_resolution_clock::time_point last_broadcast;
|
||||
std::vector<IP_PORT> custom_broadcasts;
|
||||
|
||||
std::vector<struct TCP_Socket> accepted;
|
||||
std::recursive_mutex mutex;
|
||||
|
||||
struct Network_Callback_Container callbacks[CALLBACK_IDS_MAX];
|
||||
std::vector<Common_Message> local_send;
|
||||
|
||||
bool add_id_connection(struct Connection *connection, CSteamID steam_id);
|
||||
void run_callbacks(Callback_Ids id, Common_Message *msg);
|
||||
void run_callback_user(CSteamID steam_id, bool online, uint32 appid);
|
||||
void do_callbacks_message(Common_Message *msg);
|
||||
|
||||
Common_Message create_announce(bool request);
|
||||
public:
|
||||
//NOTE: for all functions ips/ports are passed/returned in host byte order
|
||||
//ex: 127.0.0.1 should be passed as 0x7F000001
|
||||
static std::set<IP_PORT> resolve_ip(std::string dns);
|
||||
Networking(CSteamID id, uint32 appid, uint16 port, std::set<IP_PORT> *custom_broadcasts, bool disable_sockets);
|
||||
void addListenId(CSteamID id);
|
||||
void setAppID(uint32 appid);
|
||||
void Run();
|
||||
bool sendTo(Common_Message *msg, bool reliable, Connection *conn = NULL);
|
||||
bool sendToAllIndividuals(Common_Message *msg, bool reliable);
|
||||
bool sendToAll(Common_Message *msg, bool reliable);
|
||||
bool sendToIPPort(Common_Message *msg, uint32 ip, uint16 port, bool reliable);
|
||||
|
||||
bool setCallback(Callback_Ids id, CSteamID steam_id, void (*message_callback)(void *object, Common_Message *msg), void *object);
|
||||
uint32 getIP(CSteamID id);
|
||||
uint32 getOwnIP();
|
||||
|
||||
void shutDown();
|
||||
bool isAlive();
|
||||
};
|
||||
|
||||
#endif
|
||||
Loading…
Add table
Add a link
Reference in a new issue