22#include <glog/logging.h>
30 socket_ = std::make_unique<TcpSocket>();
61 port_ = replica.port();
86 LOG(ERROR) <<
"connect fail:" <<
ip_ <<
" port:" <<
port_;
106 LOG(ERROR) <<
"connect fail:" <<
ip_ <<
" port:" <<
port_;
113 }
else if (ret == -1) {
114 LOG(ERROR) <<
"send data fail:" <<
ip_ <<
" port:" <<
port_;
122 std::unique_ptr<DataInfo> resp = std::make_unique<DataInfo>();
123 int ret =
socket_->Recv(&resp->buff, &resp->data_len);
125 *
data = std::string((
char*)resp->buff, resp->data_len);
134 ResDBMessage sig_message;
135 if (!message.SerializeToString(sig_message.mutable_data())) {
139 if (verifier !=
nullptr) {
140 auto signature_or = verifier->
SignMessage(sig_message.data());
141 if (!signature_or.ok()) {
142 LOG(ERROR) <<
"Sign message fail";
145 sig_message.mutable_signature()->Swap(&(*signature_or));
150 std::string message_str;
151 if (!sig_message.SerializeToString(&message_str)) {
158 return Send(message_str);
162 return Recv(message_str);
166 ResDBMessage sig_message;
167 if (!message.SerializeToString(sig_message.mutable_data())) {
173 if (!signature_or.ok()) {
174 LOG(ERROR) <<
"Sign message fail";
177 sig_message.mutable_signature()->Swap(&(*signature_or));
179 std::string message_str;
180 if (!sig_message.SerializeToString(&message_str)) {
183 return Send(message_str);
187 std::string recv_str;
188 int ret =
Recv(&recv_str);
192 ResDBMessage sig_message;
193 if (!sig_message.ParseFromString(recv_str)) {
194 LOG(ERROR) <<
"parse to sig fail";
197 *message = sig_message.data();
202 std::string resp_data;
203 int ret =
Recv(&resp_data);
205 LOG(ERROR) <<
"recv fail:" << ret;
208 ResDBMessage sig_message;
209 if (!sig_message.ParseFromString(resp_data)) {
210 LOG(ERROR) <<
"parse sig msg fail";
213 if (!message->ParseFromString(sig_message.data())) {
214 LOG(ERROR) <<
"parse response msg fail";
221 Request::Type type,
bool need_response) {
223 request.set_type(type);
224 request.set_need_response(need_response);
225 if (!message.SerializeToString(request.mutable_data())) {
virtual int SendRawMessage(const google::protobuf::Message &message)
virtual int RecvRawMessageData(std::string *message_str)
void SetRecvTimeout(int microseconds)
virtual int RecvRawMessageStr(std::string *message)
SignatureVerifier * verifier_
virtual int SendRawMessageData(const std::string &message_str)
std::unique_ptr< Socket > socket_
virtual int RecvRawMessage(google::protobuf::Message *message)
virtual int SendRequest(const google::protobuf::Message &message, Request::Type cmd, bool need_response=false)
void SetSocket(std::unique_ptr< Socket > socket)
int SendFromKeepAlive(const std::string &data)
void SetDestReplicaInfo(const ReplicaInfo &replica)
void SetAsyncSend(bool is_async_send)
int Recv(std::string *data)
void SetSignatureVerifier(SignatureVerifier *verifier)
static std::string GetRawMessageString(const google::protobuf::Message &message, SignatureVerifier *verifier=nullptr)
NetChannel(const std::string &ip, int port)
int SendDataInternal(const std::string &data)
int Send(const std::string &data)
void IsLongConnection(bool long_connect_tion)
virtual absl::StatusOr< SignatureInfo > SignMessage(const std::string &message)