root/trunk/RBPrivate/Prototypes/ChatClient/RuneBladeClient.py

Revision 65, 2.6 kB (checked in by sholloway, 7 years ago)

Subject Observer Updates

Line 
1 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2 #~ Imports
3 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4
5 from Foundation.Jabber import Client
6 from Foundation.Jabber.PresenceMap import PresenceUpdateMap, PresenceMap   
7 from Foundation.Jabber.MessageRouter import MessageRouterByFrom, MessageRouterByType, MessageRouterByID, MessageRouterByThread
8 from Foundation.Jabber.iqTimeResponse import iqTimeResponse
9 from Foundation.Jabber.iqVersionResponse import iqVersionResponse
10 from Foundation.Jabber.iqBrowseResponse import iqBrowseResponse
11 from Foundation.Jabber.iqRosterQuery import iqRosterQuery
12
13 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
14 #~ Definitions
15 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
16
17 class RuneBladeClient(Client.Client):
18     class _Container: pass
19
20     def __init__(self, *args, **kw):
21         apply(Client.Client.__init__, (self,) + args, kw)
22
23         # Install default handlers
24         iqTimeResponse(self)
25         iqVersionResponse(self, 'RuneBlade Chat Client Prototype', '0.01 beta')
26         iqBrowseResponse(self)
27
28         self.Roster = iqRosterQuery(self)
29
30         self.PresenceCtr            = RuneBladeClient._Container()
31         self.PresenceCtr.Map        = PresenceMap(self)
32         self.PresenceCtr.UpdateMap  = PresenceUpdateMap(self)
33
34         self.MessageCtr             = RuneBladeClient._Container()
35         self.MessageCtr.ByFrom      = MessageRouterByFrom(self)
36         self.MessageCtr.ByType      = MessageRouterByType(self)
37         self.MessageCtr.ByID        = MessageRouterByID(self)
38         self.MessageCtr.ByThread    = MessageRouterByThread(self)
39
40
41 def _main_test():
42     import sys
43     from Foundation.SmartSelect import SmartSelect
44     from Foundation.SubjectObserver.Observer import Observer
45     ss = SmartSelect()
46
47     def OnAuth(subject, **UpdateDict):
48         iq = UpdateDict['iq']
49         if iq.type == 'result':
50             print "Authenticated"
51         else:
52             print "NOT AUTHENTICATED"
53
54     def OnChat(subject, **UpdateDict):
55         print "Chat Message"
56         print UpdateDict['message']._toPrettyXML()
57
58     ## shane.holloway Runeblade
59     fileIn = open('IN shane.test1@www.runeblade.com.xml', 'w')
60     fileOut = open('OUT shane.test1@www.runeblade.com.xml', 'w')
61     jc = RuneBladeClient('www.runeblade.com', fileIn=fileIn, fileOut=fileOut)
62     jc.Authenticate('shane.test1', 'testing', 'RuneBladePython', OnAuth)
63     jc.MessageCtr.ByType.Get('chat').AddObserver(OnChat)
64     ss.append(jc)
65
66     try:
67         while 1:
68             ss.Process(1.0)
69             #print '.',
70     except KeyboardInterrupt:
71         print "Quitting!"
72
73 if __name__ == '__main__':
74     _main_test()
Note: See TracBrowser for help on using the browser.