예제 #1
0
파일: xxp.hpp 프로젝트: mahrz/xxp
    std::vector<T> request(const char * sink, int lines = 1)
    {
      std::stringstream lines_s;
      lines_s << lines;
      zmq_send(zmq_requester, "RQD", 3, ZMQ_SNDMORE);
      zmq_send(zmq_requester, sink, strlen(sink), ZMQ_SNDMORE);
      zmq_send(zmq_requester, lines_s.str().c_str(), lines_s.str().size(), 0);

      zmq_msg_t reply;
      zmq_msg_init(&reply);
      int reply_size = zmq_msg_recv(&reply, zmq_requester, 0);

      if(reply_size < 0)
      {
	std::cout << "adaptor: request data: reply error " << errno << std::endl;
      }

      std::vector<T> reply_v;

      if(reply_size>0)
      {
	std::string reply_str((char*)zmq_msg_data(&reply),reply_size);
	std::stringstream reply_s(reply_str);
	while(!reply_s.eof())
	{
	  T t;
	  reply_s >> t;
	  reply_v.push_back(t);
	}
      }
예제 #2
0
int retrieve_status(const std::string & hostname, uint16_t port,
                    const std::string & request_str, int timeout) {
    void *context = zmq_ctx_new();
    void *socket = zmq_socket(context, ZMQ_REQ);
    int linger = 0;
    zmq_setsockopt(socket, ZMQ_LINGER, &linger, sizeof(int));

    std::string connect_str = "tcp://" + hostname + ":" + std::to_string(port);
    zmq_connect(socket, connect_str.c_str());
    zmq_send(socket, request_str.c_str(), request_str.size(), 0);

    zmq_pollitem_t items[] = { {socket, 0, ZMQ_POLLIN, 0} };
    if (zmq_poll(items, 1, timeout) > 0) {
        zmq_msg_t msg;
        zmq_msg_init(&msg);
        if (zmq_msg_recv(&msg, socket, 0) != -1) {
            std::string reply_str((char *)zmq_msg_data(&msg), zmq_msg_size(&msg));
            printf("%s\n", reply_str.c_str());
            return 0;
        } else {
            return 1;
        }
    } else {
        return 1;
    }
}
예제 #3
0
파일: xxp.hpp 프로젝트: mahrz/xxp
    std::string send_command(command c,
			     const char * arg = NULL)
    {
      switch(c)
      {
      case DAT:
	zmq_send(zmq_requester, "DAT", 3, ZMQ_SNDMORE);
	zmq_send(zmq_requester, arg, strlen(arg), 0);
	break;
      case RQF:
	zmq_send(zmq_requester, "RQF", 3, ZMQ_SNDMORE);
	zmq_send(zmq_requester, arg, strlen(arg), 0);
	break;
      case RQJ:
	zmq_send(zmq_requester, "RQJ", 3, 0);
	break;
      case DNE:
	zmq_send(zmq_requester, "DNE", 3, 0);
	break;
      default:
	break;
      }

      zmq_msg_t reply;
      zmq_msg_init(&reply);
      int reply_size = zmq_msg_recv(&reply, zmq_requester, 0);

      if(reply_size < 0)
      {
	std::cout << "adaptor: command: " << c << ": reply error "
		  << errno << std::endl;
      }

      if(reply_size>0)
      {
	std::string reply_str((char*)zmq_msg_data(&reply),reply_size);
	return reply_str;
      }
      return std::string("");
    }