Я строю чат-сервер. Я установил личности для каждого сокета. когда я отправляю сообщение на сервер (маршрутизатор). Сервер анализирует сообщение и извлекает UUID предполагаемого сообщения. Затем сервер отправляет сообщение клиенту (соответствует этому идентификатору).
Я делаю это на стороне клиента:
#include "zhelpers.hpp"#include <iostream>
#include <string>
#include "datamsg.pb.h"
zmq::context_t context(1);
zmq::socket_t backend (context, ZMQ_DEALER);
using namespace google::protobuf::io;static void * worker_thread(void *arg) {
datamsg p = datamsg();
p.set_source("cl3");p.set_port(5559);
std::string input;
while(1){
getline (std::cin, input); //separate thread for asynchronous input
p.set_messagee(input.substr(3,(input.length()-1)));
p.set_destination(input.substr(0,3));
std::string str;
p.SerializeToString(&str);
zmq::message_t request (str.size());
memcpy ((void *) request.data (), str.c_str(),str.size());
backend.send(request);
}
}
int main(void) {
backend.setsockopt( ZMQ_IDENTITY, "cl3", 3);
backend.connect("tcp://localhost:5559");
zmq::message_t received_instant_msg;
datamsg receive_parsed;
pthread_t worker;
pthread_create(&worker, NULL, worker_thread, NULL);
std::cout <<"you are joinning" << std::endl;
while(1){zmq::pollitem_t items [] = {
{ backend, 0, ZMQ_POLLIN, 0 }
};
zmq::poll (items, 1, -1);
if (items [0].revents & ZMQ_POLLIN) {
std::string emptystring = s_recv (backend); //first string is empty ""backend.recv(&received_instant_msg); //Now parsing the message down there
receive_parsed.ParseFromArray(received_instant_msg.data(), received_instant_msg.size());
// printing the parsed messages here
} //ending if
} //while
return 0;
}
Я не могу пройти ввод cin для получения сообщения. Как только я ввожу ввод на консоли и отправляю его, я могу получать сообщения в очереди с сервера. 🙁
Как бы я справился с этим.? Может ли многопоточный подход быть принят таким образом? если да то как?
Задача ещё не решена.