Ejemplo n.º 1
0
 def __init__(self):
     self.port=7777
     #server object
     self.server=TelnetServer(self.port,
         "",
         self.onconnect,
         self.ondisconnect,
         .05)
     #clients (TelnetClient)
     self.clients=[]
     self.actors={} # mudlib actors key:fileno value:actor
     #Gamefield
     self.gamefield=GameField(self.actors)
     #Server state
     self.running=True
Ejemplo n.º 2
0
class MudderServer:
    def __init__(self):
        self.port=7777
        #server object
        self.server=TelnetServer(self.port,
            "",
            self.onconnect,
            self.ondisconnect,
            .05)
        #clients (TelnetClient)
        self.clients=[]
        self.actors={} # mudlib actors key:fileno value:actor
        #Gamefield
        self.gamefield=GameField(self.actors)
        #Server state
        self.running=True

    def onconnect(self, client):
        client.send_cc("Witaj...\n")
        client.send_cc("Wprowadz imie:")
        client.request_terminal_type()
        #add client
        self.actors[client.fileno]=Actor(client)
        self.actors[client.fileno].onconnect()
        self.clients.append(client)
        print "++ User connected from %s" % str(client.address)

    def ondisconnect(self, client):
        self.actors[client.fileno].ondisconnect()
        self.actors.pop(client.fileno)
        self.clients.remove(client)
        print "-- User disconnected from %s" % str(client.address)

    def processclient(self):
        """Process client"""

        for client in self.clients:
            if client.idle()>300:client.deactivate()
            #Get actor reresented by connection
            actor=self.actors[client.fileno]
            if actor.login_state==4:client.deactivate()
            #if someone send message
            if client.active and client.cmd_ready:
                #get command
                cmd=client.get_command()
                if cmd=="":continue # skip empty messages
                #print "DD", client.address, cmd
                #If not logged in
                if actor.login_state!=3:
                    Login(actor, cmd) # do login
                #logged in send command to gamefield
                else:self.gamefield.recv(actor, cmd)

    def serverloop(self):
        print "Server started at port %s" % str(self.port)
        try:
            while self.running:
                self.server.poll()
                self.processclient()
                self.gamefield.update()
        except KeyboardInterrupt, e:self.onexit(e)

    def onexit(self, error):
        print "\rStopping Server..."
        print error
        #Unload data
        self.gamefield.unloaddata()
        exit(1)