| ===================================================== | |
| c accepted | |
| ===================================================== | |
| tcpxfact_session_accepted (i_sessionlistener* thisx, etch_socket* socket) | |
| ETCH_RESXKEY_SOCKET | |
| delivery_service = new_etch_transport_a (url, resources); | |
| params->server_stub = HELPER.new_helper_accepted_server (etch_server_factory* p) | |
| perf_remote_client* client = new_remote_client (0, ds, vf); | |
| i_perf_server* iserver = p->main_new_server (p); | |
| perf_remote_client* client = (perf_remote_client*) p->client; | |
| perf_server_impl* newserver = new_perf_server_impl (client); | |
| return newserver->perf_server_base; | |
| perf_server_stub* stub = new_perf_server_stub (p); | |
| stub->destroy = destroy_stub_object; /* private */ | |
| stub->destroyex = destroy_my_server_stub; /* public */ | |
| stub->stub_base = new_stub (implobj, stubtype, ids, qp, fp); | |
| stubbase->ds->mbm->set_session (ds, stubbase->isessionmsg); | |
| stubbase->impl_callbacks = etchstub_get_session_callbacks_from (implobj); | |
| stub->stub_base->stubobj = (objmask*) newstub; | |
| stub->stub_base->params = params; | |
| set stub helper run procedures for each message type. | |
| // delivery.itm is mailbox manager. its transport_control was overriden to | |
| // tcpdelsvc_transport_control in tcpdelsvc_init(). | |
| // this in turn calls tcpds->transport->transport_control() | |
| // delivery.transport is the mailbox manager. | |
| delivery_service->itm->transport_control (CONTROL_START); | |
| ===================================================== | |
| java accepted | |
| ===================================================== | |
| TcpListener.onSessionAccepted(socket) | |
| resources.add(socket); | |
| DeliveryService = newTransport(); | |
| new TcpConnection(); | |
| TcpConnection implements TransportData | |
| send(buffer); | |
| C-NOTE: OK, etch_tcp_connection.its is i_transportdata, etch_tcpconx_transport_data does the send() | |
| C-QUESTION: etch_tcp_connection.transport_control etc. where are they assigned? should they be same as itd? | |
| implements Transport | |
| TransportQuery(START, STOP, etc), | |
| TransportControl (START, STOP, etc) | |
| TcpConnection HOSTS SessionData as session. | |
| NOTE: SessionData (including sessionData()), is null until set by inheritor (Packetizer). | |
| this.session.sessionData(buffer) is invoked by this.fireData(buffer); | |
| new Packetizer(TcpConnection(transport)); | |
| (NOTE: Packetizer.transport IS-A TransportData, but Packetizer IMPLEMENTS TransportPacket); | |
| this.transport = TcpConnection.TransportData; | |
| C-NOTE: HERE'S HOW: | |
| C-NOTE: TcpConnection's TransportData interface is passed to Packetizer's ctor | |
| C-NOTE THIS AND ALL SUBSEQUENT: it is only necessary to replace each method if we do not destroy | |
| and replace the transport object. otherwise we would destroy existing transport object, | |
| and simply replace that with the transport object passed in the ctor. | |
| Packetizer.transport.transportData = TcpConnection.TransportData; | |
| Packetizer.transport.transportControl = TcpConnection.transportControl; ETC. ETC. query and notify | |
| Packetizer.transportPacket has new logic, and then calls Packetizer.transport.transportData(). | |
| Packetizer.transportControl, Notify, and Query, call Packetizer.transport.transportControl, Query, Notify. | |
| Tcpconnection.setSession(this); | |
| C-NOTE: HERE'S HOW: TcpConnection HOSTS SessionData | |
| TcpConnection.sessionData = Packetizer.sessionData; C-NOTE: does tcpconx even have a session_data()? | |
| TcpConnection.sessionControl = Packetizer.sessionControl; ETC. ETC. query and notify | |
| new Messagizer(Packetizer(TransportPacket)); | |
| (NOTE: Messagizer.transport IS-A TransportPacket, but Messagizer IMPLEMENTS TransportMessage); | |
| this.transport = Packetizer.TransportPacket | |
| C-NOTE: HERE'S HOW: | |
| C-NOTE: Packetizer's TransportPacket interface is passed to Messagizer's ctor | |
| Messagizer.transport.transportPacket = Packetizer.transportPacket; | |
| Messagizer.transport.transportControl = Packetizer.transportControl; ETC. ETC. | |
| Packetizer.setSession(this); | |
| C-NOTE: HERE'S HOW: Packetizer IMPLEMENTS SessionData but HOSTS SessionPacket. Messagizer IMPLEMENTS SessionPacket | |
| Packetizer.session.sessionPacket = Messagizer.sessionPacket; | |
| Packetizer.session.sessionControl = Messagizer.sessionControl; ETC. ETC. | |
| new PlainMailboxManager(Messagizer(transport)); | |
| (NOTE: MailboxManager.transport IS-A TransportMessage, AND MailboxManager EXTENDS TransportMessage); | |
| this.transport = Messagizer.TransportMessage; | |
| C-NOTE: HERE'S HOW: C-NOTE: Messagizer's i_transportmessage is passed in MailboxManager ctor | |
| MailboxManager.transport.TransportMessage = Messagizer.TransportMessage | |
| MailboxManager.transport.TransportControl = Messagizer.TransportControl; ETC. ETC. | |
| Messagizer.setSession(this); | |
| C-NOTE: HERE'S HOW: Messagizer IMPLEMENTS SessionPacket but HOSTS SessionMessage. MailboxManager EXTENDS SessionMessage | |
| Messagizer.session.sessionMessage = MailboxManager.sessionMessage; | |
| Messagizer.session.sessionControl = MailboxManager.sessionControl; ETC. ETC. | |
| new DefaultDeliveryService(MailboxManager(transport)); | |
| NOTE: DeliveryService transport IS-A MBM IS-A TransportMessage, AND DeliveryService EXTENDS TransportMessage | |
| this.transport = MailboxManager ; | |
| C-NOTE: HERE'S HOW: | |
| delsvc->transport = mboxmgr->imanager; OR: THE FOLLOWING | |
| delsvc->transport->transportMessage = mboxmgr->transportMessage; ETC ETC ETC | |
| MailboxManager.setSession(this); | |
| C-NOTE: HERE'S HOW: MailboxManager EXTENDS SessionMessage AND HOSTS SessionMessage. DeliveryService EXTENDS SessionMessage | |
| MailboxManager.session.sessionMessage = delsvc->sessionMessage; ETC ETC ETC |