Browse Source

Lines are now communicated to uberclient

master
Joshua Moerman 12 years ago
parent
commit
2eddac0349
  1. 9
      src/app.h
  2. 14
      src/main.cpp
  3. 2
      src/websockets.h

9
src/app.h

@ -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

@ -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);
}
}
};

2
src/websockets.h

@ -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{