1 #ifndef SOCKET_CONNECTION_H 2 #define SOCKET_CONNECTION_H 5 #include "internal/sio_packet.h" 11 #include <condition_variable> 25 virtual void keyup(std::string JSONmessage) = 0;
26 virtual void keydown(std::string JSONmessage) = 0;
46 std::condition_variable_any _cond;
47 bool connect_finish =
false;
49 std::list<KeypressListener*> key_listeners;
56 static sio::packet_manager manager;
57 static std::mutex packetLock;
58 std::lock_guard< std::mutex > guard( packetLock );
62 sio::packet packet(
"/", msg );
63 manager.encode( packet, [&](
bool isBinary, std::shared_ptr<const std::string>
const & json) {
71 std::string result = ss.str();
72 std::size_t indexList = result.find(
'[' );
73 std::size_t indexObject = result.find(
'{' );
74 std::size_t indexString = result.find(
'"' );
75 std::size_t index = indexList;
76 if ( indexObject != std::string::npos && indexObject < index )
78 if ( indexString != std::string::npos && indexString < index )
81 if ( index == std::string::npos ) {
82 std::cerr <<
"Error decoding json object" << std::endl <<
" Body: " << result << std::endl;
85 return result.substr(index);
98 std::string serverURL = bridges.getServerURL();
101 std::cerr <<
"connecting SocketIO with " << serverURL <<
"\n";
105 wait_on_connection();
109 current_socket = client.
socket();
113 current_socket->on(
"announcement", std::bind(&
SocketConnection::on_announcement,
this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4));
119 std::lock_guard< std::mutex > guard( _lock );
121 key_listeners.push_back(p);
125 std::lock_guard< std::mutex > guard( _lock );
130 std::cerr <<
"forwardKeyUp:" << e.
get_nsp() <<
" " << e.
get_name() <<
" : " << jsonmsg <<
"\n";
132 for (
auto& ptr : key_listeners)
137 std::lock_guard< std::mutex > guard( _lock );
142 std::cerr <<
"forwardKeyDown:" << e.
get_nsp() <<
" " << e.
get_name() <<
" : " << jsonmsg <<
"\n";
144 for (
auto& ptr : key_listeners)
145 ptr->keydown(jsonmsg);
155 std::lock_guard< std::mutex > guard( _lock );
157 std::cerr <<
"Sending credentials\n";
160 std::string apikey = bridges.
getApiKey();
164 current_socket->emit(
"credentials",
165 "{\"user\":\"" + user
166 +
"\",\"apikey\":\"" + apikey
167 +
"\",\"assignment\":\"" + std::to_string(assID)
170 std::cerr <<
"Credentials sent\n";
174 std::lock_guard< std::mutex > guard( _lock );
176 std::cout <<
"connected!!\n";
179 connect_finish =
true;
182 std::cout <<
"sio closed\n";
187 std::cout <<
"sio failed\n";
193 std::cerr <<
"announcement something\n";
199 if (!connect_finish) {
208 std::cerr <<
"Sending GameGrid\n";
211 current_socket->emit(
"gamegrid:recv", gridjson);
void set_close_listener(close_listener const &l)
std::shared_ptr< message > ptr
Definition: sio_message.h:37
void on_connected()
Definition: SocketConnection.h:173
This is a class in BRIDGES for representing an (n x n)game grid.
Definition: GameGrid.h:400
Definition: sio_client.h:17
Definition: sio_socket.h:8
std::shared_ptr< socket > ptr
Definition: sio_socket.h:52
void clear_con_listeners()
sio::socket::ptr const & socket(const std::string &nsp="")
const std::string & get_name() const
const message::ptr & get_message() const
void forwardKeyUp(sio::event &e)
Definition: SocketConnection.h:124
virtual void keydown(std::string JSONmessage)=0
void sendCredentials()
Definition: SocketConnection.h:154
const std::string & get_nsp() const
void forwardKeyDown(sio::event &e)
Definition: SocketConnection.h:136
void connect(const std::string &uri)
virtual const string getDataStructureRepresentation() const override
Definition: GameGrid.h:525
This is meant to be an internal class, not something that the library user will use.
Definition: SocketConnection.h:37
close_reason
Definition: sio_client.h:19
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
Definition: sio_message.h:344
void registerKeyListener(KeypressListener *p)
Definition: SocketConnection.h:118
void wait_on_connection()
Definition: SocketConnection.h:196
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:92
void on_announcement(std::string const &name, sio::message::ptr const &data, bool isAck, sio::message::list &ack_resp)
Definition: SocketConnection.h:191
void sendGameGrid(const GameGrid &gg)
Definition: SocketConnection.h:206
void on_fail()
Definition: SocketConnection.h:186
void on_close(sio::client::close_reason const &reason)
Definition: SocketConnection.h:181
void set_fail_listener(con_listener const &l)
void set_open_listener(con_listener const &l)
This is meant to be an internal class, not something that the library user will use. Provides support for input handling for the Game API.
Definition: SocketConnection.h:23
unsigned int getAssignment() const
Definition: Bridges.h:211
~SocketConnection()
Definition: SocketConnection.h:149