Changeset fffabad for protocols/skype
- Timestamp:
- 2013-01-13T11:41:21Z (12 years ago)
- Branches:
- master
- Children:
- 9ec6b36
- Parents:
- 4cb21b7
- Location:
- protocols/skype
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
protocols/skype/skyped.py
r4cb21b7 rfffabad 3 3 # skyped.py 4 4 # 5 # Copyright (c) 2007 , 2008, 2009, 2010, 2011by Miklos Vajna <vmiklos@frugalware.org>5 # Copyright (c) 2007-2013 by Miklos Vajna <vmiklos@frugalware.org> 6 6 # 7 7 # This program is free software; you can redistribute it and/or modify … … 276 276 sock.close() 277 277 278 class MockedSkype: 279 """Mock class for Skype4Py.Skype(), in case the -m option is used.""" 280 def __init__(self, mock): 281 sock = open(mock) 282 self.lines = sock.readlines() 283 284 def SendCommand(self, c): 285 pass 286 287 def Command(self, msg, Block): 288 if msg == "PING": 289 return ["PONG"] 290 line = self.lines[0].strip() 291 if not line.startswith(">> "): 292 raise Exception("Corrupted mock input") 293 line = line[3:] 294 if line != msg: 295 raise Exception("'%s' != '%s'" % (line, msg)) 296 self.lines = self.lines[1:] # drop the expected incoming line 297 ret = [] 298 while True: 299 # and now send back all the following lines, up to the next expected incoming line 300 if len(self.lines) == 0: 301 break 302 if self.lines[0].startswith(">> "): 303 break 304 if not self.lines[0].startswith("<< "): 305 raise Exception("Corrupted mock input") 306 ret.append(self.lines[0][3:].strip()) 307 self.lines = self.lines[1:] 308 return ret 309 278 310 class SkypeApi: 279 def __init__(self): 280 self.skype = Skype4Py.Skype() 281 self.skype.OnNotify = self.recv 282 self.skype.Client.Start() 311 def __init__(self, mock): 312 if not mock: 313 self.skype = Skype4Py.Skype() 314 self.skype.OnNotify = self.recv 315 self.skype.Client.Start() 316 else: 317 self.skype = MockedSkype(mock) 283 318 284 319 def recv(self, msg_text): … … 335 370 c = self.skype.Command(e, Block=True) 336 371 self.skype.SendCommand(c) 337 self.recv(c.Reply) 372 if hasattr(c, "Reply"): 373 self.recv(c.Reply) # Skype4Py answer 374 else: 375 for i in c: # mock may return multiple iterable answers 376 self.recv(i) 338 377 except Skype4Py.SkypeError: 339 378 pass … … 360 399 # this will be read first by the input handler 361 400 self.buf = None 401 self.mock = None 362 402 363 403 … … 422 462 options = Options() 423 463 try: 424 opts, args = getopt.getopt(sys.argv[1:], "c:dhH:l: np:v", ["config=", "debug", "help", "host=", "log=", "nofork", "port=", "version"])464 opts, args = getopt.getopt(sys.argv[1:], "c:dhH:l:m:np:v", ["config=", "debug", "help", "host=", "log=", "mock=", "nofork", "port=", "version"]) 425 465 except getopt.GetoptError: 426 466 options.usage(1) … … 436 476 elif opt in ("-l", "--log"): 437 477 options.log = arg 478 elif opt in ("-m", "--mock"): 479 options.mock = arg 438 480 elif opt in ("-n", "--nofork"): 439 481 options.daemon = False … … 486 528 server(options.host, options.port) 487 529 try: 488 skype = SkypeApi( )530 skype = SkypeApi(options.mock) 489 531 except Skype4Py.SkypeAPIError, s: 490 532 sys.exit("%s. Are you sure you have started Skype?" % s) -
protocols/skype/skyped.txt
r4cb21b7 rfffabad 39 39 Set the log file in background mode (default: none) 40 40 41 -m, --mock=<file>:: 42 Mock mode: replay session from file, instead of connecting to Skype. 43 41 44 -n, --nofork:: 42 45 Don't run as daemon in the background
Note: See TracChangeset
for help on using the changeset viewer.