Lines are now communicated to uberclient
This commit is contained in:
parent
85af1c09a2
commit
2eddac0349
3 changed files with 20 additions and 5 deletions
|
@ -22,6 +22,7 @@ struct App{
|
|||
int lineuid{0};
|
||||
|
||||
struct OfflineSim {
|
||||
std::vector<cheap_line_type> lines_to_add;
|
||||
std::vector<cheap_line_type> lines;
|
||||
std::vector<cheap_ball_type> balls;
|
||||
} offline_sim;
|
||||
|
@ -42,13 +43,14 @@ struct App{
|
|||
|
||||
void add_line(cheap_line_type const & line){
|
||||
if(uberclient){
|
||||
// write
|
||||
offline_sim.lines_to_add.push_back(line);
|
||||
} else {
|
||||
add_line(AbstractLine{
|
||||
to_FloatVec2(line.starting_point),
|
||||
to_FloatVec2(line.end_point),
|
||||
line.line_kind});
|
||||
}
|
||||
lines_changed();
|
||||
}
|
||||
|
||||
void add_line(AbstractLine const & line){
|
||||
|
@ -56,6 +58,9 @@ struct App{
|
|||
for(auto & l : line.calculate_lines()){
|
||||
online_sim.sim.lines.push_back(l);
|
||||
}
|
||||
}
|
||||
|
||||
void lines_changed() {
|
||||
for(auto & u : people_online){
|
||||
u->update_lines = true;
|
||||
}
|
||||
|
@ -88,6 +93,8 @@ struct App{
|
|||
online_sim.lines.clear();
|
||||
online_sim.sim.lines.clear();
|
||||
online_sim.sim.balls.clear();
|
||||
|
||||
lines_changed();
|
||||
}
|
||||
|
||||
void uberclient_disconnected(basic_websocket_info binfo){
|
||||
|
|
14
src/main.cpp
14
src/main.cpp
|
@ -80,11 +80,14 @@ websockets::TestProtocol<Empty> uberclient_protocol{
|
|||
},
|
||||
// write (will always come after receive)
|
||||
[](Empty& user, basic_websocket_info) -> std::string{
|
||||
static int i = 0;
|
||||
return std::to_string(i++);
|
||||
if(app->offline_sim.lines_to_add.empty()) return "";
|
||||
auto it = app->offline_sim.lines_to_add.begin();
|
||||
auto str = write_json(to_json(*it));
|
||||
app->offline_sim.lines_to_add.erase(it);
|
||||
return str;
|
||||
},
|
||||
// receive
|
||||
[](Empty& user, std::string in, basic_websocket_info){
|
||||
[](Empty& user, std::string in, basic_websocket_info binfo){
|
||||
auto object = parse_json(in).getObject();
|
||||
if(object.count("lines")){
|
||||
app->offline_sim.lines.clear();
|
||||
|
@ -92,6 +95,7 @@ websockets::TestProtocol<Empty> uberclient_protocol{
|
|||
for(auto&& js : lines.getArray()){
|
||||
app->offline_sim.lines.push_back(from_json<cheap_line_type>(js));
|
||||
}
|
||||
app->lines_changed();
|
||||
}
|
||||
if(object.count("balls")){
|
||||
app->offline_sim.balls.clear();
|
||||
|
@ -100,6 +104,10 @@ websockets::TestProtocol<Empty> uberclient_protocol{
|
|||
app->offline_sim.balls.push_back(from_json<cheap_ball_type>(js));
|
||||
}
|
||||
}
|
||||
|
||||
if(!app->offline_sim.lines_to_add.empty()){
|
||||
request_write(binfo);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -87,7 +87,7 @@ namespace websockets {
|
|||
}
|
||||
virtual int call(libwebsocket_context& context, libwebsocket& wsi, libwebsocket_callback_reasons reason, T& user, void *in, size_t len){
|
||||
return 0;
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
struct basic_websocket_info{
|
||||
|
|
Reference in a new issue