Changeset 122

Show
Ignore:
Timestamp:
10/30/07 20:17:18 (1 year ago)
Author:
omega
Message:

Y'a encore rien qui marche, mais y'a une bonne base pour le randomchat

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • randomchat/randomchat.py

    r113 r122  
    55import config 
    66 
     7PRS_OFFLINE = 1 
     8PRS_CHAT = 2 
     9PRS_AVAILABLE = 3 
     10PRS_AWAY = 4 
     11PRS_XA = 5 
     12PRS_DND = 6 
     13 
     14def db_connect(config): 
     15    if config.DB_MODULE == 'sqlite': 
     16      from pysqlite2 import dbapi2 as sqlite 
     17      return sqlite.connect(config.SQLITE_DB) 
     18    else: 
     19        raise Exception("Incorrect DB module") 
     20 
     21class Users: 
     22    def __init__(self, db): 
     23        self.db = db 
     24        self.users_list = {} 
     25        self.read_users() 
     26 
     27    def read_users(self): 
     28        cursor = self.db.cursor() 
     29        cursor.execute("SELECT jid FROM randomchat WHERE 1") 
     30        user = cursor.fetchone() 
     31        while user: 
     32            self.users_list[user[0]] = PRS_OFFLINE 
     33            user = cursor.fetchone() 
     34        cursor.close() 
     35 
     36    def has_user(self, jid): 
     37        return jid in self.users_list 
     38 
     39    def add_user(self, jid): 
     40        self.db.execute("INSERT INTO randomchat (jid) VALUES (?)", (jid,)) 
     41        self.db.commit() 
     42 
     43    def remove_user(self, jid): 
     44        self.db.execute("DELETE FROM randomchat WHERE jid=?", (jid,)) 
     45        self.db.commit() 
     46 
     47    def get_chat_partner(jid): 
     48        pass 
     49 
     50 
    751class RandomChat: 
    8     def __init__(self, jid, pwd, server, port=5347): 
     52    def __init__(self, users, jid, pwd, server, port=5347): 
     53        self.users = users 
    954        self.con = xmpp.Component(server, port) 
     55        self.jid = jid 
    1056        if not self.con.connect(): 
    1157            raise Exception('Unable to connect to %s:%s' % (server, port)) 
    1258        if not self.con.auth(jid, pwd): 
    1359            raise Exception('Unable to authenticate as %s' % (jid)) 
    14          
     60 
     61        #register the handlers  
    1562        self.con.RegisterHandler('presence', self.presence_handler) 
     63        self.con.RegisterHandler('presence', self.subscribe_handler, 'subscribe') 
     64        self.con.RegisterHandler('presence', self.subscribed_handler, 'subscribed') 
     65        self.con.RegisterHandler('presence', self.unsubscribe_handler, 'unsubscribe') 
     66        self.con.RegisterHandler('presence', self.unsubscribed_handler, 'unsubscribed') 
     67        self.con.RegisterHandler('message', self.message_handler) 
    1668 
    1769 
     
    1971            self.con.Process(10) 
    2072 
     73 
     74    def subscribe_handler(self, con, prs): 
     75        user = prs.getFrom().getStripped() 
     76        if not self.users.has_user(user): 
     77            self.con.send(xmpp.Presence(to = prs.getFrom(), frm = self.jid, typ = 'subscribe')) 
     78        self.con.send(xmpp.Presence(to = prs.getFrom(), frm = self.jid, typ = 'subscribed')) 
     79 
     80    def subscribed_handler(self, con, prs): 
     81        user = prs.getFrom().getStripped() 
     82        if not self.users.has_user(user): 
     83            self.users.add_user(user) 
     84 
     85    def unsubscribe_handler(self, con, prs): 
     86        self.con.send(xmpp.Presence(to = prs.getFrom(), frm = self.jid, typ = 'unsubscribe')) 
     87 
     88    def unsubscribed_handler(self, con, prs): 
     89        user = prs.getFrom().getStripped() 
     90        self.users.remove_user(user) 
     91        self.con.send(xmpp.Presence(to = prs.getFrom(), frm = self.jid, typ = 'unsubscribed')) 
     92 
    2193    def presence_handler(self, con, prs): 
    22         print '***********************************************************' 
    23         print prs.getFrom() 
    24         print '***********************************************************' 
     94        pass 
    2595 
    26 rc = RandomChat(config.JID, config.PASS, config.SERVER, config.PORT) 
     96    def message_handler(self, con, msg): 
     97        self.init_chat(msg.getFrom()) 
     98 
     99    def init_chat(self, jid): 
     100        other_jid = self.users.get_chat_partner(jid) 
     101 
     102 
     103db = db_connect(config) 
     104users = Users(db) 
     105rc = RandomChat(users, config.JID, config.PASS, config.SERVER, config.PORT)