5 #include "gu_datetime.hpp"
6 #include "gcomm/uuid.hpp"
7 #include "gcomm/util.hpp"
9 #include "gmcast_message.hpp"
10 #include "gmcast_link.hpp"
19 std::ostream& operator<<(std::ostream& os,
const Proto& p);
33 S_HANDSHAKE_RESPONSE_SENT,
42 void set_state(State new_state);
48 static std::string to_string (State s)
52 case S_INIT:
return "INIT";
53 case S_HANDSHAKE_SENT:
return "HANDSHAKE_SENT";
54 case S_HANDSHAKE_WAIT:
return "HANDSHAKE_WAIT";
55 case S_HANDSHAKE_RESPONSE_SENT:
return "HANDSHAKE_RESPONSE_SENT";
56 case S_OK:
return "OK";
57 case S_FAILED:
return "FAILED";
58 case S_CLOSED:
return "CLOSED";
59 default:
return "UNKNOWN";
67 const std::string& local_addr,
68 const std::string& remote_addr,
69 const std::string& mcast_addr,
71 uint8_t local_segment,
72 const std::string& group_name)
76 local_uuid_ (local_uuid),
78 local_segment_ (local_segment),
80 local_addr_ (local_addr),
81 remote_addr_ (remote_addr),
82 mcast_addr_ (mcast_addr),
83 group_name_ (group_name),
86 propagate_remote_ (
false),
89 tstamp_ (gu::datetime::Date::now())
92 ~
Proto() { tp_->close(); }
94 void send_msg(
const Message& msg);
95 void send_handshake();
96 void wait_handshake();
97 void handle_handshake(
const Message& hs);
98 void handle_handshake_response(
const Message& hs);
99 void handle_ok(
const Message& hs);
100 void handle_failed(
const Message& hs);
101 void handle_topology_change(
const Message& msg);
102 void handle_keepalive(
const Message& msg);
103 void send_topology_change(
LinkMap& um);
104 void handle_message(
const Message& msg);
105 void send_keepalive();
107 const gcomm::UUID& handshake_uuid()
const {
return handshake_uuid_; }
108 const gcomm::UUID& local_uuid()
const {
return local_uuid_; }
109 const gcomm::UUID& remote_uuid()
const {
return remote_uuid_; }
110 uint8_t remote_segment()
const {
return remote_segment_; }
112 SocketPtr socket()
const {
return tp_; }
114 const std::string& remote_addr()
const {
return remote_addr_; }
115 const std::string& mcast_addr()
const {
return mcast_addr_; }
116 const LinkMap& link_map()
const {
return link_map_; }
124 int version()
const {
return version_; }
125 void set_tstamp(gu::datetime::Date ts) { tstamp_ = ts; }
126 gu::datetime::Date tstamp()
const {
return tstamp_; }
128 friend std::ostream& operator<<(std::ostream&,
const Proto&);
130 void operator=(
const Proto&);
136 uint8_t local_segment_;
137 uint8_t remote_segment_;
138 std::string local_addr_;
139 std::string remote_addr_;
140 std::string mcast_addr_;
141 std::string group_name_;
144 bool propagate_remote_;
147 gu::datetime::Date tstamp_;
151 inline std::ostream& gcomm::gmcast::operator<<(std::ostream& os,
const Proto& p)
153 os <<
"v=" << p.version_ <<
","
154 <<
"lu=" << p.local_uuid_ <<
","
155 <<
"ru=" << p.remote_uuid_ <<
","
156 <<
"ls=" <<
static_cast<int>(p.local_segment_) <<
","
157 <<
"rs=" << static_cast<int>(p.remote_segment_) <<
","
158 <<
"la=" << p.local_addr_ <<
","
159 <<
"ra=" << p.remote_addr_ <<
","
160 <<
"mc=" << p.mcast_addr_ <<
","
161 <<
"gn=" << p.group_name_ <<
","
162 <<
"ch=" << p.changed_ <<
","
163 <<
"st=" << gcomm::gmcast::Proto::to_string(p.state_) <<
","
164 <<
"pr=" << p.propagate_remote_ <<
","
165 <<
"tp=" << p.tp_ <<
","
166 <<
"ts=" << p.tstamp_;
Definition: gmcast_link.hpp:56
Definition: gmcast_proto.hpp:24
Definition: gmcast_message.hpp:22
Definition: gmcast_proto.hpp:170