# # # add_file "netsync.hh" # content [fc1d60f09710c78f1bf401e82e5d699d8587164e] # # patch "netsync.cc" # from [132437efa5d9e27f16e3ef1eada04a36eb072135] # to [e06b7b182eaa57a9e2b20a7ff69a589d8e3b02ee] # # patch "network.cc" # from [a41b6b38fc91ac0a98d199356adc19e63dae6f6f] # to [ad6fa7e6d3746f7a3e99b3f9fd0cfa580c81889a] # # patch "network.hh" # from [3aea57c511ac5585a423dc5927a1fcfa08d35bd2] # to [a8922fb308058e9991c79b6650bb149480242447] # # patch "refiner.cc" # from [270cff191f05da86eab87ee48e98b930943cf23b] # to [cb940650d7cd2b779e53e4b033b9c6aac338a57a] # ============================================================ --- netsync.hh fc1d60f09710c78f1bf401e82e5d699d8587164e +++ netsync.hh fc1d60f09710c78f1bf401e82e5d699d8587164e @@ -0,0 +1,49 @@ +#ifndef __NETSYNC_HH__ +#define __NETSYNC_HH__ + +#include + +#include "app_state.hh" +#include "network.hh" +#include "vocab.hh" + +#include +using boost::shared_ptr; + +class netsync; + +class netsync_service : public service +{ + shared_ptr impl; + static netsync_service mapped; + friend class netsync; + void send(netcmd const & cmd); + bool can_send() const; + netsync_service(); + netsync_service(netsync_service const & other, app_state & app); + netsync_service const & operator=(netsync_service const & other);//I(false) +public: + enum netsync_op {push, pull, sync}; + netsync_service(netsync_op what, + globish const & include, + globish const & exclude, + app_state & app); + ~netsync_service(); + + service * copy(app_state & app); + void begin_service(); + void request_service(); + bool can_process(); + state process(transaction_guard & guard); + state received(netcmd const & cmd, transaction_guard & guard); +}; + +// Local Variables: +// mode: C++ +// fill-column: 76 +// c-file-style: "gnu" +// indent-tabs-mode: nil +// End: +// vim: et:sw=2:sts=2:ts=2:cino=>2s,{s,\:s,+s,t0,g0,^-2,e-2,n-2,p2s,(0,=s: + +#endif // __NETSYNC_HH__ ============================================================ --- netsync.cc 132437efa5d9e27f16e3ef1eada04a36eb072135 +++ netsync.cc e06b7b182eaa57a9e2b20a7ff69a589d8e3b02ee @@ -519,15 +519,33 @@ netsync_service::netsync_service(netsync app_state & app) : service(0) { + protocol_role role; + switch (what) + { + case pull: + role = sink_role; + break; + case push: + role = source_role; + break; + case sync: + role = source_and_sink_role; + break; + default: + I(false); + role = source_and_sink_role; + } + impl.reset(new netsync(role, include, exclude, *this, app)); } netsync_service::~netsync_service() { } -netsync_service::netsync_service(netsync_service const & other) +netsync_service::netsync_service(netsync_service const & other, app_state & app) : service(0) { + impl.reset(new netsync(source_and_sink_role, "*", "*", *this, app)); } netsync_service const & @@ -549,9 +567,9 @@ service * } service * -netsync_service::copy() +netsync_service::copy(app_state & app) { - return new netsync_service(*this); + return new netsync_service(*this, app); } void ============================================================ --- network.cc a41b6b38fc91ac0a98d199356adc19e63dae6f6f +++ network.cc ad6fa7e6d3746f7a3e99b3f9fd0cfa580c81889a @@ -287,15 +287,6 @@ service::~service() { } -shared_ptr -service::get(int num) -{ - service_map & m(get_service_map()); - service_map::const_iterator i = m.find(num); - I(i != m.end()); - return shared_ptr(i->second->copy()); -} - void service::attach(session & s) { @@ -446,7 +437,7 @@ session::handle_ctrl_cmd(netcmd const & { srv->detach(false); } - srv = s; + srv = s->copy(app); srv->attach(*this); srv->begin_service(); return state::RUNNING; ============================================================ --- network.hh 3aea57c511ac5585a423dc5927a1fcfa08d35bd2 +++ network.hh a8922fb308058e9991c79b6650bb149480242447 @@ -34,8 +34,7 @@ public: service(int num); virtual ~service(); - virtual service * copy() = 0; - static shared_ptr get(int num); + virtual service * copy(app_state & app) = 0; void attach(session & s); void detach(bool received_error); ============================================================ --- refiner.cc 270cff191f05da86eab87ee48e98b930943cf23b +++ refiner.cc cb940650d7cd2b779e53e4b033b9c6aac338a57a @@ -500,10 +500,13 @@ refiner_pair client_cb(*this, true), server_cb(*this, false), // The item type here really doesn't matter. - client(file_item, client_voice, client_cb), - server(file_item, server_voice, server_cb), + client(file_item, client_cb), + server(file_item, server_cb), n_msgs(0) { + client.set_voice(client_voice); + server.set_voice(server_voice); + for (set::const_iterator i = client_items.begin(); i != client_items.end(); ++i) client.note_local_item(*i);