| 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() |
|---|