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,18 +157,21 @@ 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);
for (auto req: pendingRequests) // if (mlock.try_lock_for(std::chrono::milliseconds(1000)))
{ {
if (req->id == baseMessage.refersTo) for (auto req: pendingRequests)
{ {
req->response.reset(new SerializedMessage()); if (req->id == baseMessage.refersTo)
req->response->message = baseMessage; {
req->response->buffer = (char*)malloc(baseMessage.size); req->response.reset(new SerializedMessage());
memcpy(req->response->buffer, &buffer[0], baseMessage.size); req->response->message = baseMessage;
// std::unique_lock<std::mutex> lck(m); req->response->buffer = (char*)malloc(baseMessage.size);
req->cv.notify_one(); memcpy(req->response->buffer, &buffer[0], baseMessage.size);
return; // std::unique_lock<std::mutex> lck(m);
req->cv.notify_one();
return;
}
} }
} }
} }