如何实现protobuf协议server?

1.继承pink::PbConn,重载DealMessage方法

class MyPbConn : public pink::PbConn {
public:
  MyPbConn(int fd, std::string ip_port, pink::Thread* self_thread_ptr = NULL) : pink::PbConn(fd, ip_port) {
    res_ = dynamic_cast<google::protobuf::Message*>(&message_);
  }
  ~MyPbConn() {}
  int DealMessage() {
    message_.ParseFromArray(rbuf_ + cur_pos_ - header_len_, header_len_);
    message_.set_name("hello " + message_.name());
    uint32_t u =htonl( message_.ByteSize());
    memcpy(static_cast<void*>(wbuf_), static_cast<void*>(&u), COMMAND_HEADER_LENGTH);
    message_.SerializeToArray(wbuf_ + COMMAND_HEADER_LENGTH, PB_MAX_MESSAGE);
    set_is_reply(true);
  }
 private:
  ::simple_message::SimpleMessage message_;
  MyPbConn(MyPbConn&);
  MyPbConn& operator=(MyPbConn&);
};

2.继承pink::WorkerThread,设置模板参数

class MyWorkerThread : public pink::WorkerThread<MyPbConn> {
public:
  MyWorkerThread(int cron_interval = 0) : pink::WorkerThread<MyPbConn>(cron_interval) {}
  ~MyWorkerThread() {}
private:
  MyWorkerThread& operator=(MyWorkerThread&);
  MyWorkerThread(MyWorkerThread&);
};

3.继承`pink::DispatchThread,设置模板参数

class MyDispatchThread : public pink::DispatchThread<MyPbConn> {
public:
  MyDispatchThread(int my_port, int my_worker_threads_num, MyWorkerThread** my_worker_threads_ptr, int cron_interval) :
    pink::DispatchThread<MyPbConn>(my_port, my_worker_threads_num, reinterpret_cast<pink::WorkerThread<MyPbConn>**>(my_worker_threads_ptr), cron_interval) {}
  ~MyDispatchThread() {}
private:
  MyDispatchThread(MyDispatchThread&);
  MyDispatchThread& operator=(MyDispatchThread&);
};

results matching ""

    No results matching ""