git-svn-id: svn://elaine/murooma/trunk@313 d8a302eb-03bc-478d-80e4-98257eca68ef
This commit is contained in:
(no author) 2014-12-18 06:54:14 +00:00
parent e3344534fd
commit b06a685c0c

View file

@ -10,7 +10,7 @@
using namespace std; using namespace std;
ClientConnection::ClientConnection(MessageReceiver* _receiver, const std::string& _ip, size_t _port) : active_(false), connected_(false), messageReceiver(_receiver), reqId(0), ip(_ip), port(_port), readerThread(NULL) ClientConnection::ClientConnection(MessageReceiver* _receiver, const std::string& _ip, size_t _port) : active_(false), connected_(false), messageReceiver(_receiver), reqId(1), ip(_ip), port(_port), readerThread(NULL)
{ {
} }
@ -113,8 +113,8 @@ bool ClientConnection::send(BaseMessage* message)
shared_ptr<SerializedMessage> ClientConnection::sendRequest(BaseMessage* message, size_t timeout) shared_ptr<SerializedMessage> ClientConnection::sendRequest(BaseMessage* message, size_t timeout)
{ {
shared_ptr<SerializedMessage> response(NULL); shared_ptr<SerializedMessage> response(NULL);
if (++reqId == 0) if (++reqId == 10000)
++reqId; reqId = 1;
message->id = reqId; message->id = reqId;
shared_ptr<PendingRequest> pendingRequest(new PendingRequest(reqId)); shared_ptr<PendingRequest> pendingRequest(new PendingRequest(reqId));
@ -157,7 +157,9 @@ void ClientConnection::getNextMessage()
baseMessage.received = t; baseMessage.received = t;
{ {
std::unique_lock<std::mutex> mlock(mutex_); std::unique_lock<std::mutex> mlock(mutex_);//, std::defer_lock);
// if (mlock.try_lock_for(std::chrono::milliseconds(1000)))
{
for (auto req: pendingRequests) for (auto req: pendingRequests)
{ {
if (req->id == baseMessage.refersTo) if (req->id == baseMessage.refersTo)
@ -166,12 +168,13 @@ void ClientConnection::getNextMessage()
req->response->message = baseMessage; req->response->message = baseMessage;
req->response->buffer = (char*)malloc(baseMessage.size); req->response->buffer = (char*)malloc(baseMessage.size);
memcpy(req->response->buffer, &buffer[0], baseMessage.size); memcpy(req->response->buffer, &buffer[0], baseMessage.size);
// std::unique_lock<std::mutex> lck(m); // std::unique_lock<std::mutex> lck(m);
req->cv.notify_one(); req->cv.notify_one();
return; return;
} }
} }
} }
}
if (messageReceiver != NULL) if (messageReceiver != NULL)
messageReceiver->onMessageReceived(this, baseMessage, &buffer[0]); messageReceiver->onMessageReceived(this, baseMessage, &buffer[0]);