1 #include "scd_in_connector.h"
3 #include "scd_logging.h"
4 #include "scd_cont_man_master.h"
7 scd_in_connector::scd_in_connector(scd_simulator &sim, scd_socket* sock):
8 _sim(sim), _socket(sock), _is_connecting(true)
10 // register this event handler
11 _sim.get_poller().register_handler(*this, SOCK_EV_READ | SOCK_EV_CLOSE);
13 // set the socket for the reader
14 _reader.set_socket(*sock);
18 scd_in_connector::~scd_in_connector()
27 bool scd_in_connector::is_connecting() { return _is_connecting; }
30 void scd_in_connector::handle_sock_ev(sock_ev events)
32 if (events & SOCK_EV_CLOSE)
34 scd_debug("in_connector: received close event");
37 else if (events & SOCK_EV_READ)
41 if (!_socket->is_valid())
45 scd_debug("in_connector: connection closed");
49 if (!_reader.is_reading() && !_reader.has_command())
51 // received an illegal command
52 scd_debug("in_connector: received illegal command");
57 if (_reader.has_command())
59 scd_command* cmd = _reader.get_command();
61 if (cmd->get_type() == SCD_CM_REGISTER &&
62 cmd->get_subtype() == SCD_CM_NETSIM)
65 scd_debug("in_connector: received cmd \"register host\"");
69 // check if we are the master
70 scd_cont_man_master& master =
71 dynamic_cast<scd_cont_man_master&>(_sim.get_cont_man());
73 _sim.get_poller().remove_handler(*this);
75 master.connect_slave(*cmd, _socket);
78 _is_connecting = false;
81 catch ( std::bad_cast e)
83 scd_warn("slave tried to register");
88 } // end register host
89 else if (cmd->get_type() == SCD_CM_REGISTER &&
90 cmd->get_subtype() == SCD_CM_CHANNEL)
93 scd_debug("in_connector: received cmd \"register channel\"");
95 _sim.get_poller().remove_handler(*this);
97 _sim.get_chan_man().connect_channel(*cmd, _socket);
100 _is_connecting = false;
102 } // end register channel
105 // received wrong command
106 scd_debug("in_connector: received unknown command");
111 } // end receive command
114 } // handle_sock_ev()
117 const scd_socket& scd_in_connector::get_sock()
123 void scd_in_connector::_cleanup()
126 _sim.get_poller().remove_handler(*this);
129 _is_connecting = false;