Esempio n. 1
0
class Server():
    
    def __init__(self):
        
        self.ip = "127.0.0.1"; #IP fija del Servidor
        self.puerto = 4040; #Puerto fijo del servidor
        self.BUFFER_SIZE = 1024;
        
        self.qtGuiApp = QtGui.QApplication(sys.argv)
        
        self.serverUI = ServerUI(self.ip,self.puerto); #Creo la interfaz del Servidor
        self.serverUI.botonActualizarUsuarios.clicked.connect(self.actualizarUsuarios);
        
        self.clientesConectados = [];       
        
        print "Servidor escuchando...";
        
        threadServer = threading.Thread(target=self.iniciarServidor);
        threadServer.start(); #Empiezo un hilo para iniciar el servidor        
        
        threadPings = ServerPings(self.clientesConectados); #Inicializo un hilo para hacer pings a los clientes
        #conecto la señal que hará el hilo de los pings a la vista principal del servidor
        self.serverUI.connect(threadPings,QtCore.SIGNAL("actualizarUsuarios()"),self.actualizarUsuarios);
        
        threadPings.start();
        
        self.showGUI(); #muestro la interfaz
        
    """
        Función para mostrar la interfaz del servidor
    """
    def showGUI(self):

        self.serverUI.show();

        #hago que cuando se cierre la aplicación gráfica, se acabe la ejecución del programa
        os._exit(self.qtGuiApp.exec_());

    """
        Función que es llamada remotamenta para añadir un usuario a la lista del servidor
    """
    def addCliente(self,nombre,ip,puerto):        
        
        self.clientesConectados.append({"nombre": nombre,"ip": ip,"puerto": puerto});
        
        print "Clientes actuales: " + str(self.clientesConectados);
    
    """
        Función llamada remotamente para remover un usuario del servidor
    """
    def desconectarCliente(self,nombre,ip,puerto):
        try:
            """
                Cada cliente es un diccionario con tres llaves:
                - nombre:
                - ip
                - puerto
            """
            self.clientesConectados.remove({'nombre':nombre,'ip':ip,'puerto':puerto});
        except ValueError as ve:
            return;
        
        print "Clientes actuales: " + str(self.clientesConectados);
        
    """
        Función llamada remotamente que envía la lista de usuarios conectados
    """
    def getUsuarios(self):        
        return self.clientesConectados;
    
    """
        Función para actualizar en la vista la lista de usuarios
    """
    def actualizarUsuarios(self):
        self.serverUI.actualizarClientes(self.clientesConectados);
    
    """
        Función para inicializar el servidor con la IP y el puerto fijos
        Registra las siguientes funciones
        - addCliente
        - desconectarCliente
        - getUsuarios
    """
    def iniciarServidor(self):
        try:
            print "Inicializando Servidor..."
            serverSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM);
            serverSocket.bind((self.ip, self.puerto));
            serverSocket.listen(1);
            while True:
                (clientSocket,clientAddress) = serverSocket.accept();
                
                print u"Recibí un cliente en la dirección ",clientAddress;
                
                data_json = clientSocket.recv(self.BUFFER_SIZE);
                
                print u"Recibí un mensaje"
                
                if data_json:
                    data = json.loads(data_json);
                    if(data["peticion"] == "addCliente"):
                        self.addCliente(data["nombre"],data["ip"],data["puerto"]);
                        
        except Exception as e:
            self.serverUI.mostarError(u"No se pudo inicializar el servidor. Por favor, reinicie la aplicación");
            print u"No se pudo inicializar el servidor. Por favor, reinicie la aplicación";
            sys._exit(-1);
Esempio n. 2
0
class Server():
    
    def __init__(self):
        
        self.ip = "127.0.0.1"; #IP fija del Servidor
        self.puerto = 4040; #Puerto fijo del servidor
        
        self.qtGuiApp = QtGui.QApplication(sys.argv)
        
        self.serverUI = ServerUI(self.ip,self.puerto); #Creo la interfaz del Servidor
        self.serverUI.botonActualizarUsuarios.clicked.connect(self.actualizarUsuarios);
        
        self.clientesConectados = [];       
        
        print "Servidor escuchando...";
        
        threadServer = threading.Thread(target=self.iniciarServidor);
        threadServer.start(); #Empiezo un hilo para iniciar el servidor        
        
        threadPings = ServerPings(self.clientesConectados); #Inicializo un hilo para hacer pings a los clientes
        #conecto la señal que hará el hilo de los pings a la vista principal del servidor
        self.serverUI.connect(threadPings,QtCore.SIGNAL("actualizarUsuarios()"),self.actualizarUsuarios);
        
        threadPings.start();
        
        self.showGUI(); #muestro la interfaz
        
    """
        Función para mostrar la interfaz del servidor
    """
    def showGUI(self):

        self.serverUI.show();

        #hago que cuando se cierre la aplicación gráfica, se acabe la ejecución del programa
        os._exit(self.qtGuiApp.exec_());

    """
        Función que es llamada remotamenta para añadir un usuario a la lista del servidor
    """
    def addCliente(self,nombre,ip,puerto):        
        
        self.clientesConectados.append({"nombre": nombre,"ip": ip,"puerto": puerto});
        
        print "Clientes actuales: " + str(self.clientesConectados);
    
    """
        Función llamada remotamente para remover un usuario del servidor
    """
    def desconectarCliente(self,nombre,ip,puerto):
        try:
            """
                Cada cliente es un diccionario con tres llaves:
                - nombre:
                - ip
                - puerto
            """
            self.clientesConectados.remove({'nombre':nombre,'ip':ip,'puerto':puerto});
        except ValueError as ve:
            return;
        
        print "Clientes actuales: " + str(self.clientesConectados);
        
    """
        Función llamada remotamente que envía la lista de usuarios conectados
    """
    def getUsuarios(self):        
        return self.clientesConectados;
    
    """
        Función para actualizar en la vista la lista de usuarios
    """
    def actualizarUsuarios(self):
        self.serverUI.actualizarClientes(self.clientesConectados);
    
    """
        Función para inicializar el servidor con la IP y el puerto fijos
        Registra las siguientes funciones
        - addCliente
        - desconectarCliente
        - getUsuarios
    """
    def iniciarServidor(self):
        try:
            print "Inicializando Servidor..."
            server = SimpleXMLRPCServer((str(self.ip), int(self.puerto)),allow_none=True)
            server.register_function(self.addCliente,'addCliente');
            server.register_function(self.desconectarCliente,'desconectarCliente');
            server.register_function(self.getUsuarios,'getUsuarios');
            server.serve_forever();
        except Exception as e:
            self.serverUI.mostarError(u"No se pudo inicializar el servidor. Por favor, reinicie la aplicación");
            print u"No se pudo inicializar el servidor. Por favor, reinicie la aplicación";
            sys._exit(-1);