cobra publish fix
This commit is contained in:
parent
30b83b5ff0
commit
f9dc460325
@ -12,7 +12,6 @@
|
|||||||
|
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
|
|
||||||
namespace ix
|
namespace ix
|
||||||
|
@ -453,6 +453,8 @@ namespace ix
|
|||||||
{
|
{
|
||||||
invokePublishTrackerCallback(true, false);
|
invokePublishTrackerCallback(true, false);
|
||||||
|
|
||||||
|
CobraConnection::MsgId msgId = _id;
|
||||||
|
|
||||||
_body["channels"] = channels;
|
_body["channels"] = channels;
|
||||||
_body["message"] = msg;
|
_body["message"] = msg;
|
||||||
_pdu["body"] = _body;
|
_pdu["body"] = _body;
|
||||||
@ -460,27 +462,22 @@ namespace ix
|
|||||||
|
|
||||||
std::string serializedJson = serializeJson(_pdu);
|
std::string serializedJson = serializeJson(_pdu);
|
||||||
|
|
||||||
if (_publishMode == CobraConnection_PublishMode_Batch)
|
//
|
||||||
|
// 1. When we use batch mode, we just enqueue and will do the flush explicitely
|
||||||
|
// 2. When we aren't authenticated yet to the cobra server, we need to enqueue
|
||||||
|
// and retry later
|
||||||
|
// 3. If the network connection was droped (WebSocket::send will return false),
|
||||||
|
// it means the message won't be sent so we need to enqueue as well.
|
||||||
|
//
|
||||||
|
// The order of the conditionals is important.
|
||||||
|
//
|
||||||
|
if (_publishMode == CobraConnection_PublishMode_Batch || !_authenticated ||
|
||||||
|
!publishMessage(serializedJson))
|
||||||
{
|
{
|
||||||
enqueue(serializedJson);
|
enqueue(serializedJson);
|
||||||
return _id - 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
return msgId;
|
||||||
// Fast path. We are authenticated and the publishing succeed
|
|
||||||
// This should happen for 99% of the cases.
|
|
||||||
//
|
|
||||||
if (_authenticated && publishMessage(serializedJson))
|
|
||||||
{
|
|
||||||
return _id - 1;
|
|
||||||
}
|
|
||||||
else // Or else we enqueue
|
|
||||||
// Slow code path is when we haven't connected yet (startup),
|
|
||||||
// or when the connection drops for some reason.
|
|
||||||
{
|
|
||||||
enqueue(serializedJson);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CobraConnection::subscribe(const std::string& channel,
|
void CobraConnection::subscribe(const std::string& channel,
|
||||||
|
Loading…
Reference in New Issue
Block a user