Fixed message ordering issues
This commit is contained in:
parent
61e0b2ff24
commit
cda773915e
8 changed files with 48 additions and 29 deletions
|
|
@ -95,16 +95,16 @@ void NetServer::client_connected(std::shared_ptr<rtc::PeerConnection> connection
|
|||
|
||||
void NetServer::ClientData::send_queued_messages(NetServer& server) {
|
||||
for(auto& [channelName, messageQueue] : messageQueues) {
|
||||
bool addMessageOrder = channelName == UNRELIABLE_COMMAND_CHANNEL || channelName == RELIABLE_COMMAND_CHANNEL;
|
||||
bool addMessageOrder = NetLibrary::is_ordered_channel(channelName);
|
||||
if(this == server.directConnectClientData.get()) {
|
||||
NetClient* c = server.directConnectClient;
|
||||
std::scoped_lock recvQueueLock(c->receiveQueue->mut);
|
||||
while(!messageQueue.empty()) {
|
||||
std::string toInsert;
|
||||
if(addMessageOrder)
|
||||
toInsert = NetLibrary::attach_message_order_and_update(nextMessageOrderToSend, messageQueue.front()->str());
|
||||
toInsert = NetLibrary::attach_message_order(messageQueue.front().order, messageQueue.front().ss->str());
|
||||
else
|
||||
toInsert = messageQueue.front()->str();
|
||||
toInsert = messageQueue.front().ss->str();
|
||||
rtc::binary b((std::byte*)toInsert.c_str(), (std::byte*)(toInsert.c_str() + toInsert.length()));
|
||||
c->receiveQueue->messages.emplace(channelName, b);
|
||||
messageQueue.pop();
|
||||
|
|
@ -120,14 +120,14 @@ void NetServer::ClientData::send_queued_messages(NetServer& server) {
|
|||
break;
|
||||
#endif
|
||||
if(addMessageOrder)
|
||||
send_str_as_bytes(channel, NetLibrary::attach_message_order_and_update(nextMessageOrderToSend, messageQueue.front()->str()));
|
||||
send_str_as_bytes(channel, NetLibrary::attach_message_order(messageQueue.front().order, messageQueue.front().ss->str()));
|
||||
else
|
||||
send_str_as_bytes(channel, messageQueue.front()->str());
|
||||
send_str_as_bytes(channel, messageQueue.front().ss->str());
|
||||
messageQueue.pop();
|
||||
}
|
||||
#ifdef __EMSCRIPTEN__
|
||||
if(channel->bufferedAmount() >= NetLibrary::MAX_BUFFERED_DATA_PER_CHANNEL && channelName == UNRELIABLE_COMMAND_CHANNEL)
|
||||
messageQueue = std::queue<std::shared_ptr<std::stringstream>>();
|
||||
messageQueue = std::queue<OutgoingMessage>();
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
|
@ -146,7 +146,7 @@ void NetServer::ClientData::parse_received_messages(NetServer& server) {
|
|||
lastMessageTime = std::chrono::steady_clock::now();
|
||||
|
||||
size_t messageOrderDisplacement = 0;
|
||||
if(receivedMessage.channel == UNRELIABLE_COMMAND_CHANNEL || receivedMessage.channel == RELIABLE_COMMAND_CHANNEL) {
|
||||
if(NetLibrary::is_ordered_channel(receivedMessage.channel)) {
|
||||
MessageOrder messageOrder = NetLibrary::get_message_order(receivedMessage.data);
|
||||
if(nextMessageOrderToExpect > messageOrder && receivedMessage.channel == UNRELIABLE_COMMAND_CHANNEL) {
|
||||
receivedMessages.pop();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue