示例#1
0
文件: login.py 项目: nmg1986/imclient
class Login(gtk.Window):
    def __init__(self):
    	gtk.Window.__init__(self)

        self.msg=MsgFactory()	

	self.set_default_size(400,200)
	self.set_position(gtk.WIN_POS_CENTER_ALWAYS)
	self.set_keep_above(True)
	self.set_decorated(False)
	self.connect('key-press-event',self.login)
	self.layout=LayOut(self)
	self.add(self.layout)

	#self.fix=gtk.Fixed()
	#self.fix.set_size_request(400,100)
	#self.layout.put(self.fix,0,50)

	label=gtk.Label("用户名")
	self.layout.put(label,100,55)
	self.username=gtk.Entry()
	self.username.set_has_frame(False)
	self.username.grab_focus()
	self.username.set_size_request(150,25)
	self.layout.put(self.username,150,50)

	label=gtk.Label("密 码")
	self.layout.put(label,100,105)
	self.password=gtk.Entry()
	self.password.set_has_frame(False)
	self.password.set_size_request(150,25)
	self.layout.put(self.password,150,100)

    def run(self):
    	self.show_all()
        self.connector=reactor.connectTCP(HOST,PORT,ClientFactory(self))
        self.transport=self.connector.transport
        reactor.run()
    def login(self,widget,event):
    	if event.keyval == 65293:
	   username=self.username.get_text()
	   password=self.password.get_text()
           self.sendLoginMsg(username,password)
        if event.keyval == 65307:
            self.destroy()
            gtk.main_quit()
    def sendLoginMsg(self,username,password):
           Type='CUSTOM_USER_LOGIN'
           PassWord=md5(password).hexdigest()
           UserName=username
           SerialNumber=0
           msg=self.msg.packMsg(Type,UserName,PassWord,SerialNumber)
           print("Sending login-msg ...")
           self.transport.write(msg)
           print("Done")
           for child in self.layout.get_children():
                self.layout.remove(child)
示例#2
0
class ChatFactory(Factory):
    def __init__(self):
        self.clients = {}
        self.loopcall=LoopingCall(self.getOnLineUser)
        self.loopcall.start(60,False)
        self.msg=MsgFactory()
        #self.mysql=MySql()
    def buildProtocol(self,addr):
        protocol=Chat()
        protocol.factory=self
        protocol.msg=self.msg
        #protocol.mysql=self.mysql
        return protocol
    def stopFactory(self):
        #logger.info("Shutdown database connection")
        for transport in self.clients.values():
            transport.loseConnection()
        #self.mysql.close()
        #logger.info("Done")
    def addClient(self,*newclient):
        if newclient[0] in self.clients :
            self.clients.pop(newclient[0])
        self.clients[newclient[0]]=newclient[1]

    def delClient(self,client):
        if self.clients.has_key(client):
            self.clients.pop(client)
    def getClient(self,guid):
        return self.clients.get(guid,None)

    def sendAll(self, message):
        for proto in self.clients:
            proto.transport.write(message + "\n")
    def sendNotify(self,guid,mysql,notify):
        ''' users is a generator object ''' 
        users=mysql.getUsers(guid)
        for user in users:
           if user in self.clients:
               if user != guid:
                    logger.debug("Sending {!s}...{!s}".format(notify,user))
                    msg=self.msg.packMsg(notify,guid)
                    logger.debug("Sending {!s} msg : {!s}".format(notify,msg))
                    self.clients[user].transport.write(msg)
    def getOnLineUser(self):
        user=len(self.clients)
        logger.debug("Online user num is {}".format(user))