def _on_broadcast_routing_enabled_disabled(self, path, value, oldvalue, result): from logs import lg from broadcast import broadcaster_node from broadcast import broadcast_listener from broadcast import broadcast_service lg.out( 2, 'service_broadcasting._on_broadcast_routing_enabled_disabled : %s->%s : %s' % (oldvalue, value, path)) if not value: if broadcaster_node.A() is not None: broadcaster_node.A().removeStateChangedCallback( self._on_broadcaster_node_switched) broadcaster_node.A('shutdown') broadcast_listener.A( 'init', broadcast_service.on_incoming_broadcast_message) broadcast_listener.A().addStateChangedCallback( self._on_broadcast_listener_switched) broadcast_listener.A('connect', self.scope) else: if broadcast_listener.A() is not None: broadcast_listener.A().removeStateChangedCallback( self._on_broadcast_listener_switched) broadcast_listener.A('shutdown') broadcaster_node.A('init', broadcast_service.on_incoming_broadcast_message) broadcaster_node.A().addStateChangedCallback( self._on_broadcaster_node_switched)
def request(self, json_payload, newpacket, info): from logs import lg from p2p import p2p_service from main import settings # words = newpacket.Payload.split(' ') try: mode = json_payload['action'] except: lg.exc() return p2p_service.SendFail(newpacket, 'invalid json payload') if mode != 'route' and mode != 'listen': lg.out( 8, "service_broadcasting.request DENIED, wrong mode provided : %s" % mode) return p2p_service.SendFail(newpacket, 'invalid request') if not settings.enableBroadcastRouting(): lg.out( 8, "service_broadcasting.request DENIED, broadcast routing disabled" ) return p2p_service.SendFail(newpacket, 'broadcast routing disabled') from broadcast import broadcaster_node if not broadcaster_node.A(): lg.out( 8, "service_broadcasting.request DENIED, broadcast routing disabled" ) return p2p_service.SendFail(newpacket, 'broadcast routing disabled') if broadcaster_node.A().state not in [ 'BROADCASTING', 'OFFLINE', 'BROADCASTERS?', ]: lg.out( 8, "service_broadcasting.request DENIED, current state is : %s" % broadcaster_node.A().state) return p2p_service.SendFail(newpacket, 'currently not broadcasting') if mode == 'route': broadcaster_node.A('new-broadcaster-connected', newpacket.OwnerID) lg.out(8, "service_broadcasting.request ACCEPTED, mode: %s" % words) return p2p_service.SendAck(newpacket, 'accepted') if mode == 'listen': broadcaster_node.A().add_listener(newpacket.OwnerID, ' '.join(words[2:])) lg.out( 8, "service_broadcasting.request ACCEPTED, mode: %s" % words[1]) return p2p_service.SendAck(newpacket, 'accepted') return p2p_service.SendAck(newpacket, 'bad request')
def send_broadcast_message(payload): from broadcast import broadcaster_node from broadcast import broadcast_listener msg = prepare_broadcast_message(my_id.getLocalID(), payload) if broadcaster_node.A(): broadcaster_node.A('new-outbound-message', (msg, None)) elif broadcast_listener.A(): if broadcast_listener.A().state == 'OFFLINE': broadcast_listener.A('connect') broadcast_listener.A('outbound-message', msg) else: lg.warn('nor broadcaster_node(), nor broadcast_listener() exists') return None return msg
def stop(self): from broadcast import broadcaster_node from broadcast import broadcasters_finder from broadcast import broadcast_listener from main.config import conf broadcasters_finder.A('shutdown') if broadcaster_node.A() is not None: broadcaster_node.A().removeStateChangedCallback( self._on_broadcaster_node_switched) broadcaster_node.A('shutdown') if broadcast_listener.A() is not None: broadcast_listener.A().removeStateChangedCallback( self._on_broadcast_listener_switched) broadcast_listener.A('shutdown') conf().removeConfigNotifier('services/broadcasting/routing-enabled') return True
def start(self): from twisted.internet.defer import Deferred from broadcast import broadcasters_finder from broadcast import broadcaster_node from broadcast import broadcast_listener from broadcast import broadcast_service from main.config import conf from main import settings self.starting_deferred = Deferred() broadcasters_finder.A('init') if settings.enableBroadcastRouting(): broadcaster_node.A('init', broadcast_service.on_incoming_broadcast_message) broadcaster_node.A().addStateChangedCallback( self._on_broadcaster_node_switched) else: broadcast_listener.A( 'init', broadcast_service.on_incoming_broadcast_message) broadcast_listener.A().addStateChangedCallback( self._on_broadcast_listener_switched) broadcast_listener.A('connect', self.scope) conf().addConfigNotifier('services/broadcasting/routing-enabled', self._on_broadcast_routing_enabled_disabled) return self.starting_deferred
def health_check(self): from broadcast import broadcaster_node return broadcaster_node.A().state in [ 'BROADCASTING', ]