// from observable<i_packet_stream_observer<PacketType, Protocol> > virtual void notify_observer(observer_type& aObserver, typename observer_type::notify_type aType, const void* aParameter, const void*) { switch(aType) { case observer_type::NotifyConnectionEstablished: aObserver.connection_established(*this); break; case observer_type::NotifyConnectionFailure: aObserver.connection_failure(*this, *static_cast<const boost::system::error_code*>(aParameter)); break; case observer_type::NotifyPacketSent: aObserver.packet_sent(*this, *static_cast<const packet_type*>(aParameter)); break; case observer_type::NotifyPacketArrived: aObserver.packet_arrived(*this, *static_cast<const packet_type*>(aParameter)); break; case observer_type::NotifyTransferFailure: aObserver.transfer_failure(*this, *static_cast<const boost::system::error_code*>(aParameter)); break; case observer_type::NotifyConnectionClosed: aObserver.connection_closed(*this); break; } }