mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2024-11-25 21:45:12 +00:00
Update Linux coopnet
This commit is contained in:
parent
69f16bebb5
commit
ef66a18fc2
5 changed files with 27 additions and 4 deletions
|
@ -4,6 +4,7 @@
|
||||||
#if defined(__cplusplus)
|
#if defined(__cplusplus)
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
class Connection;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
@ -38,6 +39,12 @@ typedef struct {
|
||||||
void (*OnError)(enum MPacketErrorNumber aErrorNumber, uint64_t tag);
|
void (*OnError)(enum MPacketErrorNumber aErrorNumber, uint64_t tag);
|
||||||
void (*OnPeerConnected)(uint64_t aPeerId);
|
void (*OnPeerConnected)(uint64_t aPeerId);
|
||||||
void (*OnPeerDisconnected)(uint64_t aPeerId);
|
void (*OnPeerDisconnected)(uint64_t aPeerId);
|
||||||
|
void (*OnLoadBalance)(const char* aHost, uint32_t port);
|
||||||
|
uint64_t (*DestIdFunction)(uint64_t aInput);
|
||||||
|
#if defined(__cplusplus)
|
||||||
|
bool (*ConnectionIsAllowed)(Connection*, bool);
|
||||||
|
void (*OnReceiveInfoBits)(Connection* aConnection, uint64_t aDestId, uint64_t aInfoBits, const char* aName);
|
||||||
|
#endif
|
||||||
} CoopNetCallbacks;
|
} CoopNetCallbacks;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@ -48,7 +55,7 @@ extern CoopNetCallbacks gCoopNetCallbacks;
|
||||||
extern CoopNetSettings gCoopNetSettings;
|
extern CoopNetSettings gCoopNetSettings;
|
||||||
|
|
||||||
bool coopnet_is_connected(void);
|
bool coopnet_is_connected(void);
|
||||||
CoopNetRc coopnet_begin(const char* aHost, uint32_t aPort);
|
CoopNetRc coopnet_begin(const char* aHost, uint32_t aPort, const char* aName, uint64_t aDestId);
|
||||||
CoopNetRc coopnet_shutdown(void);
|
CoopNetRc coopnet_shutdown(void);
|
||||||
CoopNetRc coopnet_update(void);
|
CoopNetRc coopnet_update(void);
|
||||||
CoopNetRc coopnet_lobby_create(const char* aGame, const char* aVersion, const char* aHostName, const char* aMode, uint16_t aMaxConnections, const char* aPassword, const char* aDescription);
|
CoopNetRc coopnet_lobby_create(const char* aGame, const char* aVersion, const char* aHostName, const char* aMode, uint16_t aMaxConnections, const char* aPassword, const char* aDescription);
|
||||||
|
|
Binary file not shown.
|
@ -158,6 +158,7 @@ bool configForce4By3 = false;
|
||||||
char configCoopNetIp[MAX_CONFIG_STRING] = DEFAULT_COOPNET_IP;
|
char configCoopNetIp[MAX_CONFIG_STRING] = DEFAULT_COOPNET_IP;
|
||||||
unsigned int configCoopNetPort = DEFAULT_COOPNET_PORT;
|
unsigned int configCoopNetPort = DEFAULT_COOPNET_PORT;
|
||||||
char configPassword[MAX_CONFIG_STRING] = "";
|
char configPassword[MAX_CONFIG_STRING] = "";
|
||||||
|
char configDestId[MAX_CONFIG_STRING] = "0";
|
||||||
bool configFadeoutDistantSounds = true;
|
bool configFadeoutDistantSounds = true;
|
||||||
|
|
||||||
static const struct ConfigOption options[] = {
|
static const struct ConfigOption options[] = {
|
||||||
|
@ -269,6 +270,7 @@ static const struct ConfigOption options[] = {
|
||||||
{.name = "coopnet_ip", .type = CONFIG_TYPE_STRING, .stringValue = (char*)&configCoopNetIp, .maxStringLength = MAX_CONFIG_STRING},
|
{.name = "coopnet_ip", .type = CONFIG_TYPE_STRING, .stringValue = (char*)&configCoopNetIp, .maxStringLength = MAX_CONFIG_STRING},
|
||||||
{.name = "coopnet_port", .type = CONFIG_TYPE_UINT , .uintValue = &configCoopNetPort},
|
{.name = "coopnet_port", .type = CONFIG_TYPE_UINT , .uintValue = &configCoopNetPort},
|
||||||
{.name = "coopnet_password", .type = CONFIG_TYPE_STRING, .stringValue = (char*)&configPassword, .maxStringLength = MAX_CONFIG_STRING},
|
{.name = "coopnet_password", .type = CONFIG_TYPE_STRING, .stringValue = (char*)&configPassword, .maxStringLength = MAX_CONFIG_STRING},
|
||||||
|
{.name = "coopnet_dest", .type = CONFIG_TYPE_STRING, .stringValue = (char*)&configDestId, .maxStringLength = MAX_CONFIG_STRING},
|
||||||
{.name = "fade_distant_sounds", .type = CONFIG_TYPE_BOOL , .boolValue = &configFadeoutDistantSounds},
|
{.name = "fade_distant_sounds", .type = CONFIG_TYPE_BOOL , .boolValue = &configFadeoutDistantSounds},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -115,6 +115,7 @@ extern bool configForce4By3;
|
||||||
extern char configCoopNetIp[];
|
extern char configCoopNetIp[];
|
||||||
extern unsigned int configCoopNetPort;
|
extern unsigned int configCoopNetPort;
|
||||||
extern char configPassword[];
|
extern char configPassword[];
|
||||||
|
extern char configDestId[];
|
||||||
extern bool configFadeoutDistantSounds;
|
extern bool configFadeoutDistantSounds;
|
||||||
|
|
||||||
void configfile_load(void);
|
void configfile_load(void);
|
||||||
|
|
|
@ -54,6 +54,14 @@ static void coopnet_on_peer_disconnected(uint64_t peerId) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void coopnet_on_load_balance(const char* host, uint32_t port) {
|
||||||
|
if (host && strlen(host) > 0) {
|
||||||
|
snprintf(configCoopNetIp, MAX_CONFIG_STRING, "%s", host);
|
||||||
|
}
|
||||||
|
configCoopNetPort = port;
|
||||||
|
configfile_save(configfile_name());
|
||||||
|
}
|
||||||
|
|
||||||
static void coopnet_on_receive(uint64_t userId, const uint8_t* data, uint64_t dataLength) {
|
static void coopnet_on_receive(uint64_t userId, const uint8_t* data, uint64_t dataLength) {
|
||||||
coopnet_set_user_id(0, userId);
|
coopnet_set_user_id(0, userId);
|
||||||
u8 localIndex = coopnet_user_id_to_local_index(userId);
|
u8 localIndex = coopnet_user_id_to_local_index(userId);
|
||||||
|
@ -68,6 +76,7 @@ static void coopnet_on_lobby_joined(uint64_t lobbyId, uint64_t userId, uint64_t
|
||||||
|
|
||||||
if (userId == coopnet_get_local_user_id()) {
|
if (userId == coopnet_get_local_user_id()) {
|
||||||
coopnet_clear_dest_ids();
|
coopnet_clear_dest_ids();
|
||||||
|
snprintf(configDestId, MAX_CONFIG_STRING, "%" PRIu64 "", destId);
|
||||||
}
|
}
|
||||||
|
|
||||||
coopnet_save_dest_id(userId, destId);
|
coopnet_save_dest_id(userId, destId);
|
||||||
|
@ -262,10 +271,14 @@ static CoopNetRc coopnet_initialize(void) {
|
||||||
gCoopNetCallbacks.OnLobbyLeft = coopnet_on_lobby_left;
|
gCoopNetCallbacks.OnLobbyLeft = coopnet_on_lobby_left;
|
||||||
gCoopNetCallbacks.OnError = coopnet_on_error;
|
gCoopNetCallbacks.OnError = coopnet_on_error;
|
||||||
gCoopNetCallbacks.OnPeerDisconnected = coopnet_on_peer_disconnected;
|
gCoopNetCallbacks.OnPeerDisconnected = coopnet_on_peer_disconnected;
|
||||||
|
gCoopNetCallbacks.OnLoadBalance = coopnet_on_load_balance;
|
||||||
|
|
||||||
if (coopnet_is_connected()) { return COOPNET_OK; }
|
if (coopnet_is_connected()) { return COOPNET_OK; }
|
||||||
|
|
||||||
CoopNetRc rc = coopnet_begin(configCoopNetIp, configCoopNetPort);
|
char* endptr = NULL;
|
||||||
|
uint64_t destId = strtoull(configDestId, &endptr, 10);
|
||||||
|
|
||||||
|
CoopNetRc rc = coopnet_begin(configCoopNetIp, configCoopNetPort, configPlayerName, destId);
|
||||||
if (rc == COOPNET_FAILED) {
|
if (rc == COOPNET_FAILED) {
|
||||||
djui_popup_create(DLANG(NOTIF, COOPNET_CONNECTION_FAILED), 2);
|
djui_popup_create(DLANG(NOTIF, COOPNET_CONNECTION_FAILED), 2);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue