1 #ifndef SOCKET_CONNECTION_H 2 #define SOCKET_CONNECTION_H 4 #include "sio_client.h" 5 #include "internal/sio_packet.h" 11 #include <condition_variable> 22 virtual void keyup(std::string JSONmessage) = 0;
23 virtual void keydown(std::string JSONmessage) = 0;
29 sio::socket::ptr current_socket;
35 std::condition_variable_any _cond;
36 bool connect_finish =
false;
38 std::list<KeypressListener*> key_listeners;
43 std::string getJSON( sio::message::ptr msg ) {
45 static sio::packet_manager manager;
46 static std::mutex packetLock;
47 std::lock_guard< std::mutex > guard( packetLock );
51 sio::packet packet(
"/", msg );
52 manager.encode( packet, [&](
bool isBinary, std::shared_ptr<const std::string>
const & json) {
60 std::string result = ss.str();
61 std::size_t indexList = result.find(
'[' );
62 std::size_t indexObject = result.find(
'{' );
63 std::size_t indexString = result.find(
'"' );
64 std::size_t index = indexList;
65 if ( indexObject != std::string::npos && indexObject < index )
67 if ( indexString != std::string::npos && indexString < index )
70 if ( index == std::string::npos ) {
71 std::cerr <<
"Error decoding json object" << std::endl <<
" Body: " << result << std::endl;
74 return result.substr(index);
87 std::string serverURL = bridges.getServerURL();
90 std::cerr <<
"connecting SocketIO with " << serverURL <<
"\n";
92 client.connect(serverURL);
98 current_socket = client.socket();
102 current_socket->on(
"announcement", std::bind(&
SocketConnection::on_announcement,
this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4));
108 std::lock_guard< std::mutex > guard( _lock );
110 key_listeners.push_back(p);
114 std::lock_guard< std::mutex > guard( _lock );
116 std::string jsonmsg = getJSON(e.get_message());
119 std::cerr <<
"forwardKeyUp:" << e.get_nsp() <<
" " << e.get_name() <<
" : " << jsonmsg <<
"\n";
121 for (
auto& ptr : key_listeners)
126 std::lock_guard< std::mutex > guard( _lock );
128 std::string jsonmsg = getJSON(e.get_message());
131 std::cerr <<
"forwardKeyDown:" << e.get_nsp() <<
" " << e.get_name() <<
" : " << jsonmsg <<
"\n";
133 for (
auto& ptr : key_listeners)
134 ptr->keydown(jsonmsg);
140 client.clear_con_listeners();
144 std::lock_guard< std::mutex > guard( _lock );
146 std::cerr <<
"Sending credentials\n";
149 std::string apikey = bridges.
getApiKey();
153 current_socket->emit(
"credentials",
154 "{\"user\":\"" + user
155 +
"\",\"apikey\":\"" + apikey
156 +
"\",\"assignment\":\"" + std::to_string(assID)
159 std::cerr <<
"Credentials sent\n";
163 std::lock_guard< std::mutex > guard( _lock );
165 std::cout <<
"connected!!\n";
168 connect_finish =
true;
170 void on_close(sio::client::close_reason
const& reason) {
171 std::cout <<
"sio closed\n";
176 std::cout <<
"sio failed\n";
180 void on_announcement (std::string
const& name, sio::message::ptr
const& data,
bool isAck, sio::message::list &ack_resp) {
182 std::cerr <<
"announcement something\n";
188 if (!connect_finish) {
197 std::cerr <<
"Sending GameGrid\n";
200 current_socket->emit(
"gamegrid:recv", gridjson);
void on_connected()
Definition: SocketConnection.h:162
Definition: GameGrid.h:365
void forwardKeyUp(sio::event &e)
Definition: SocketConnection.h:113
virtual void keydown(std::string JSONmessage)=0
void sendCredentials()
Definition: SocketConnection.h:143
void forwardKeyDown(sio::event &e)
Definition: SocketConnection.h:125
virtual const string getDataStructureRepresentation() const override
Definition: GameGrid.h:490
Definition: SocketConnection.h:26
This class contains methods to connect and transmit a user's data structure representation to the Bri...
Definition: Bridges.h:39
these methods convert byte arrays in to base64 codes and are used in BRIDGES to represent the color a...
Definition: alltypes.h:4
void registerKeyListener(KeypressListener *p)
Definition: SocketConnection.h:107
void wait_on_connection()
Definition: SocketConnection.h:185
virtual void keyup(std::string JSONmessage)=0
const string & getApiKey() const
Definition: Bridges.h:185
const string & getUserName() const
Definition: Bridges.h:160
SocketConnection(bridges::Bridges &b)
Definition: SocketConnection.h:81
void on_announcement(std::string const &name, sio::message::ptr const &data, bool isAck, sio::message::list &ack_resp)
Definition: SocketConnection.h:180
void sendGameGrid(const GameGrid &gg)
Definition: SocketConnection.h:195
void on_fail()
Definition: SocketConnection.h:175
void on_close(sio::client::close_reason const &reason)
Definition: SocketConnection.h:170
Definition: SocketConnection.h:20
unsigned int getAssignment() const
Definition: Bridges.h:211
~SocketConnection()
Definition: SocketConnection.h:138