mirror of
https://github.com/BeamMP/BeamMP-Server.git
synced 2025-08-17 16:57:05 +00:00
Queue packets in SendAll
This commit is contained in:
parent
50549f3d1a
commit
e47821416a
@ -56,7 +56,7 @@ public:
|
|||||||
void SetIsGuest(bool NewIsGuest) { mIsGuest = NewIsGuest; }
|
void SetIsGuest(bool NewIsGuest) { mIsGuest = NewIsGuest; }
|
||||||
void SetIsSynced(bool NewIsSynced) { mIsSynced = NewIsSynced; }
|
void SetIsSynced(bool NewIsSynced) { mIsSynced = NewIsSynced; }
|
||||||
void SetIsSyncing(bool NewIsSyncing) { mIsSyncing = NewIsSyncing; }
|
void SetIsSyncing(bool NewIsSyncing) { mIsSyncing = NewIsSyncing; }
|
||||||
void EnqueueMissedPacketDuringSyncing(const std::string& Packet);
|
void EnqueuePacket(const std::string& Packet);
|
||||||
[[nodiscard]] std::queue<std::string>& MissedPacketQueue() { return mMissedPacketsDuringSyncing; }
|
[[nodiscard]] std::queue<std::string>& MissedPacketQueue() { return mMissedPacketsDuringSyncing; }
|
||||||
[[nodiscard]] const std::queue<std::string>& MissedPacketQueue() const { return mMissedPacketsDuringSyncing; }
|
[[nodiscard]] const std::queue<std::string>& MissedPacketQueue() const { return mMissedPacketsDuringSyncing; }
|
||||||
[[nodiscard]] size_t MissedPacketQueueSize() const { return mMissedPacketsDuringSyncing.size(); }
|
[[nodiscard]] size_t MissedPacketQueueSize() const { return mMissedPacketsDuringSyncing.size(); }
|
||||||
|
@ -69,7 +69,7 @@ TServer& TClient::Server() const {
|
|||||||
return mServer;
|
return mServer;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TClient::EnqueueMissedPacketDuringSyncing(const std::string& Packet) {
|
void TClient::EnqueuePacket(const std::string& Packet) {
|
||||||
std::unique_lock Lock(mMissedPacketsMutex);
|
std::unique_lock Lock(mMissedPacketsMutex);
|
||||||
mMissedPacketsDuringSyncing.push(Packet);
|
mMissedPacketsDuringSyncing.push(Packet);
|
||||||
}
|
}
|
||||||
|
@ -357,12 +357,12 @@ bool TNetwork::TCPSend(TClient& c, const std::string& Data, bool IsSync) {
|
|||||||
//std::unique_lock Lock(c.MissedPacketQueueMutex());
|
//std::unique_lock Lock(c.MissedPacketQueueMutex());
|
||||||
if(!Data.empty()) {
|
if(!Data.empty()) {
|
||||||
if (Data.at(0) == 'O' || Data.at(0) == 'A' || Data.at(0) == 'C' || Data.at(0) == 'E') {
|
if (Data.at(0) == 'O' || Data.at(0) == 'A' || Data.at(0) == 'C' || Data.at(0) == 'E') {
|
||||||
c.EnqueueMissedPacketDuringSyncing(Data);
|
c.EnqueuePacket(Data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
} else if (!c.IsSyncing() && c.IsSynced() && c.MissedPacketQueueSize() != 0) {
|
} else if (!c.IsSyncing() && c.IsSynced() && c.MissedPacketQueueSize() != 0) {
|
||||||
debug("sending " + std::to_string(c.MissedPacketQueueSize()) + " missed packets");
|
debug("sending " + std::to_string(c.MissedPacketQueueSize()) + " queued packets");
|
||||||
while (c.MissedPacketQueueSize() > 0) {
|
while (c.MissedPacketQueueSize() > 0) {
|
||||||
std::string QData {};
|
std::string QData {};
|
||||||
{ // locked context
|
{ // locked context
|
||||||
@ -389,6 +389,8 @@ bool TNetwork::TCPSend(TClient& c, const std::string& Data, bool IsSync) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int32_t Size, Sent;
|
int32_t Size, Sent;
|
||||||
std::string Send(4, 0);
|
std::string Send(4, 0);
|
||||||
Size = int32_t(Data.size());
|
Size = int32_t(Data.size());
|
||||||
@ -860,9 +862,16 @@ void TNetwork::SendToAll(TClient* c, const std::string& Data, bool Self, bool Re
|
|||||||
if (Client->IsSynced() || Client->IsSyncing()) {
|
if (Client->IsSynced() || Client->IsSyncing()) {
|
||||||
if (Rel || C == 'W' || C == 'Y' || C == 'V' || C == 'E') {
|
if (Rel || C == 'W' || C == 'Y' || C == 'V' || C == 'E') {
|
||||||
if (C == 'O' || C == 'T' || Data.length() > 1000) {
|
if (C == 'O' || C == 'T' || Data.length() > 1000) {
|
||||||
ret = SendLarge(*Client, Data);
|
if (Data.length() > 400) {
|
||||||
|
std::string CMP(Comp(Data));
|
||||||
|
Client->EnqueuePacket("ABG:" + CMP);
|
||||||
|
}else{
|
||||||
|
Client->EnqueuePacket(Data);
|
||||||
|
}
|
||||||
|
//ret = SendLarge(*Client, Data);
|
||||||
} else {
|
} else {
|
||||||
ret = TCPSend(*Client, Data);
|
Client->EnqueuePacket(Data);
|
||||||
|
//ret = TCPSend(*Client, Data);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
ret = UDPSend(*Client, Data);
|
ret = UDPSend(*Client, Data);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user