Example #1
0
 def __init__(self, topologyServer, socket, address):
     threading.Thread.__init__(self)
     self.socket = LongMessageSocket(socket)
     self.address = address
     self.topologyServer = topologyServer
     self.requestId = 0
Example #2
0
class ClientHandler(threading.Thread):
    def __init__(self, topologyServer, socket, address):
        threading.Thread.__init__(self)
        self.socket = LongMessageSocket(socket)
        self.address = address
        self.topologyServer = topologyServer
        self.requestId = 0
        
    def get_request_id(self):
        self.requestId += 1
        return  self.requestId
        
    def run(self):
        try:
            jsonMessage = 'not null'
            reqFactory = RequestFactory()
        
            while jsonMessage != '':
                jsonMessage = self.socket.recv()
            
                request = reqFactory.decodeJson(jsonMessage)
                if request.action == request.ACTION.GET_TOPOLOGY:
                    print '\tMessage request(getTopology) received from client', self.address
                    self.request_get_topology(request)
                
                elif request.action == request.ACTION.GET_COMPLETE_GROUP:
                    print '\tMessage request(getCompleteGroup) received from client', self.address
                    self.request_get_group(request=request, complete=True)
                
                elif request.action == request.ACTION.GET_GROUP:
                    print '\tMessage request(getGroup) received from client', self.address
                    self.request_get_group(request=request, complete=False)
                
                elif request.action == request.ACTION.REGISTER_FOR_EVENTS:
                    print '\tMessage request(registerForEvents) received from client', self.address
                    self.request_register_for_events(request)
                
                elif request.action == request.ACTION.WAIT_START:
                    print '\tMessage request(waitStart) received from client', self.address
                    self.request_wait_start(request)
                
                elif request.action == request.ACTION.START:
                    print '\tMessage request(start) received from client', self.address
                    self.request_start(request)
                    
                elif request.action == request.ACTION.UPDATE_TOPOLOGY:
                    print '\tMessage request(updateTopology) received from client', self.address
                    self.request_update_topology(request)
                
                elif request.action == request.ACTION.ENTRY_GROUP:
                    print '\tMessage request(entryGroup) received from client', self.address
                    self.request_entry_group(request)
                    
                elif request.action == request.ACTION.EXIT_GROUP:
                    print '\tMessage request(entryGroup) received from client', self.address
                    self.request_exit_group(request)
                    
                elif request.action == request.ACTION.CHANGE_SOURCE:
                    print '\tMessage request(changeSource) received from client', self.address
                    self.request_change_source(request)
                
                elif request.action == request.ACTION.ENTRY_EVENT:
                    print '\tMessage request(entryEvent) received from client', self.address
                    self.request_entry_event(request)
                    
                elif request.action == request.ACTION.EXIT_EVENT:
                    print '\tMessage request(exitEvent) received from client', self.address
                    self.request_exit_event(request)
                    
                elif request.action == request.ACTION.SOURCE_EVENT:
                    print '\tMessage request(sourceEvent) received from client', self.address
                    self.request_source_event(request)
                
                else:
                    print '\tInvalid Request type received from client', self.address
                    return 'none'
                
        except RuntimeError as inst:
            print 'RuntimeError has occurred:', inst
        
        self.socket.close()
        print 'Connection with client', self.address, 'closed.'
        self.topologyServer.removeHandler(self)
    
    def request_get_topology(self, request):
        topology = self.topologyServer.getTopology()
        jsonMessage = topology.toJson()
        self.socket.send(jsonMessage)
        print '\tMessage topology sent to client', self.address
    
    def request_get_group(self, request, complete=False):
        group = self.topologyServer.getMulticastGroup(complete)
        jsonMessage = group.toJson()
        self.socket.send(jsonMessage)
        print '\tMessage group sent to client', self.address
    
    def request_register_for_events(self, request):
        self.topologyServer.addEventListeners(self)
        
    def request_wait_start(self, request):
        self.topologyServer.addStartListeners(self)
        
    def request_start(self, request):
        self.topologyServer.notifyStart(request)
        
    def request_update_topology(self, request):
        self.topologyServer.updateTopology(request)
        
    def request_entry_group(self, request):
        self.topologyServer.addEventListeners(self)
        self.topologyServer.entryEvent(request)
    
    def request_exit_group(self, request):
        self.topologyServer.addEventListeners(self)
        self.topologyServer.exitEvent(request)
        
    def request_change_source(self, request):
        self.topologyServer.addEventListeners(self)
        self.topologyServer.changeSource(request)
        
    def request_entry_event(self, request):
        self.topologyServer.entryEvent(request)
    
    def request_exit_event(self, request):
        self.topologyServer.exitEvent(request)
    
    def request_source_event(self, request):
        self.topologyServer.changeSource(request)
        
        
    def notify_client(self, notification):
        jsonMessage = notification.toJson()
        self.socket.send(jsonMessage)
        if notification.__class__ == Request:
            print '\tMessage request(start) sent to client', self.address
        elif notification.__class__ == Event:
            print '\tMessage event sent to client', self.address