mirror of
https://github.com/CraftyBoss/SuperMarioOdysseyOnline.git
synced 2024-11-29 06:33:06 +00:00
69d6a732c7
- change: general game mode management more abstract and less H&S oriented
- change: split 8bit updateType into 4bit game mode and 4bit update type.
- change: don't process packets from other game modes (legacy mode for backwards compatibility)
- change: cache game mode of other players in puppet, resend GameModeInf on detected game mode change
- change: send gamemode NONE when H&S is selected but not active
- change: improved distance calculations in squared distance space
- change: change from hider to seeker when dead even if there are no other players
- fix: add hours to the minutes for the H&S GameModeInf packet
- fix: set milliseconds and hours when receiving time from server
- fix: keep the new time from the server for longer than a single frame
- fix: reset H&S icon after receiving a new state from the server
- refac: move code to generate PlayerList into own abstract LayoutPlayerList class.
- refac: to_string() method for GameTime to simplify code in the Game Mode Icon class.
- refac: rename TagInf packet to GameModeInf packet
- refac: remove param from `SocketClient::tryGetPacket()` (unused)
- refac: move all H&S specific files into the same directory (out of layouts)
- refac: move GameModeTimer.cpp from source/server/hns/ to source/server/gamemode/
- refac: clean up some unused, duplicate or complicated imports
- [mod menu] change: use the game mode name in the options & menu title
- [mod menu] change: select the next game mode in the game mode select menu
- [mod menu] change: possibility to always change the gravity setting in the H&S config menu
- [mod menu] add: toggle options to control mario/cappy collision/bounciness
(cherry picked from commit a9b2c87aa0
)
(cherry picked from commit 918f61fbfd619d781d88dc74878d392c48cfa480)
(cherry picked from commit 96aff7dd7167d8244acef7884fa3503d4c3f868a)
(cherry picked from commit 0fb6413ec91bbf679e9f8cea1aa512159101fa46)
(cherry picked from commit ab78a812fd18781655ccf38e803f619ea427d1ac)
Co-authored-by: Robin C. Ladiges <rcl.git@blackpinguin.de>
89 lines
2.4 KiB
C++
89 lines
2.4 KiB
C++
#pragma once
|
|
|
|
#include "al/async/AsyncFunctorThread.h"
|
|
|
|
#include "nn/result.h"
|
|
#include "nn/socket.h"
|
|
|
|
#include "sead/heap/seadHeap.h"
|
|
#include "sead/thread/seadMessageQueue.h"
|
|
|
|
#include "SocketBase.hpp"
|
|
|
|
#include "packets/Packet.h"
|
|
|
|
class Client;
|
|
|
|
class SocketClient : public SocketBase {
|
|
public:
|
|
SocketClient(const char* name, sead::Heap* heap, Client* client);
|
|
nn::Result init(const char* ip, u16 port) override;
|
|
bool tryReconnect() override;
|
|
bool closeSocket() override;
|
|
Packet* tryGetPacket() override;
|
|
|
|
bool startThreads();
|
|
void endThreads();
|
|
void waitForThreads();
|
|
|
|
bool send(Packet* packet);
|
|
bool recv();
|
|
|
|
bool queuePacket(Packet* packet);
|
|
bool trySendQueue();
|
|
|
|
void sendFunc();
|
|
void recvFunc();
|
|
|
|
void printPacket(Packet* packet);
|
|
bool isConnected() { return socket_log_state == SOCKET_LOG_CONNECTED; }
|
|
|
|
u16 getLocalUdpPort();
|
|
s32 setPeerUdpPort(u16 port);
|
|
const char* getUdpStateChar();
|
|
|
|
u32 getSendCount() { return mSendQueue.getCount(); }
|
|
u32 getSendMaxCount() { return mSendQueue.getMaxCount(); }
|
|
|
|
u32 getRecvCount() { return mRecvQueue.getCount(); }
|
|
u32 getRecvMaxCount() { return mRecvQueue.getMaxCount(); }
|
|
|
|
void clearMessageQueues();
|
|
void setQueueOpen(bool value) { mPacketQueueOpen = value; }
|
|
|
|
|
|
void setIsFirstConn(bool value) { mIsFirstConnect = value; }
|
|
|
|
private:
|
|
sead::Heap* mHeap = nullptr;
|
|
Client* client = nullptr;
|
|
|
|
al::AsyncFunctorThread* mRecvThread = nullptr;
|
|
al::AsyncFunctorThread* mSendThread = nullptr;
|
|
|
|
sead::MessageQueue mRecvQueue;
|
|
sead::MessageQueue mSendQueue;
|
|
char* recvBuf = nullptr;
|
|
|
|
int maxBufSize = 100;
|
|
bool mIsFirstConnect = true;
|
|
bool mPacketQueueOpen = true;
|
|
int pollTime = 0;
|
|
|
|
|
|
bool mHasRecvUdp;
|
|
s32 mUdpSocket;
|
|
sockaddr mUdpAddress;
|
|
|
|
bool recvTcp();
|
|
bool recvUdp();
|
|
|
|
/**
|
|
* @param str a string containing an IPv4 address or a hostname that can be resolved via DNS
|
|
* @param out IPv4 address
|
|
* @return if this function was successfull and out contains a valid IP address
|
|
*/
|
|
bool stringToIPAddress(const char* str, in_addr* out);
|
|
};
|
|
|
|
typedef void (SocketClient::*SocketThreadFunc)(void);
|