LINUX.ORG.RU

ZeroMQ выполнение команд

 , ,


0

1

Отправляю сообщения msg сначала в вектор


struct msg {
	double clientId;
	size_t cash;
	char message[256];
};
struct msg quest2;



std::vector<msg> vector;
...
vector.push_back(quest2);


zmq_msg_t clientReq;
zmq_msg_init_size(&clientReq, sizeof(struct msg));
memcpy(zmq_msg_data(&clientReq), &quest2, sizeof(struct msg));

void* requester;
void* context;
      
context = zmq_ctx_new();
requester = zmq_socket(context, ZMQ_REQ);
int rc = zmq_connect(requester, "tcp://localhost:5555");
      

//После этого, их нужно отправить на сервер для выполнения

while(vector.size()>0){
   zmq_msg_init_size(&clientReq, sizeof(struct msg));
   memcpy(zmq_msg_data(&clientReq), &(vector.front()), sizeof(struct msg));
	
   printf("sending %s\n", (vector.front()).message);
   zmq_msg_send(&clientReq, requester, 0);
   zmq_msg_close(&clientReq);
	
   zmq_msg_init(&reply);
   zmq_msg_recv(&reply, requester, 0);
   size_t repSize = zmq_msg_size(&reply);
  	
   strcpy(ans, (char*)zmq_msg_data(&reply));
   printf("Received: - %zu %s\n", repSize, ans);

if (strcmp(ans, "OK") == 0) {
   printf("Operation went sucessfuly\n");
   } 

   else if (strcmp(ans, "NOMN") == 0) {
   printf("get some money\n");
   } 
	
   else if (strcmp(ans, "NOFRND") == 0) {
   printf("wrong user\n");
   }
 
   else if (strcmp(ans, "ERR") == 0) {
   printf("some error\n");
   exit(1);
   } 
			
   else if (strncmp(ans, "ID", 2) == 0) {
   sscanf(ans, "ID %lf CSH %zu", &friendId, &remCash);
   printf("Your stats are: id - %lf\n cash amount - %zu\n", friendId, remCash);
   } 
	
   else {
   printf("hurr-durr-derp\n");
   }
   zmq_msg_close(&reply);		
   vector.erase(vector.begin());

//Но ans всегда возвращает OK, хотя при этом ничего не происходит. Если делать не для вектора, все работает номально.

Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.