Module call

Source Code for Module call

  1  print('****************************************************************************'); 
  2  print('SkypeKit Python Wrapper Tutorial: Making outgoing (conference) calls'); 
  3  print('****************************************************************************'); 
  4  
 
  5  # This example demonstrates, how to:
 
  6  # 1. Make outgoing (multi-target) calls.
 
  7  # 2. Catch voice activity events during calls.
 
  8  
 
  9  # NB! You will need to launch the SkypeKit runtime before running this example.
 
 10  
 
 11  #----------------------------------------------------------------------------------
 
 12  # Importing necessary libraries. Note that you will need to set the keyFileName value
 
 13  # in the keypair.py file.
 
 14  
 
 15  import sys; 
 16  import keypair; 
 17  from time import sleep; 
 18  
 
 19  sys.path.append(keypair.distroRoot + '/ipc/python'); 
 20  sys.path.append(keypair.distroRoot + '/interfaces/skype/python'); 
 21  
 
 22  try: 
 23          import Skype; 
 24  except ImportError: 
 25      raise SystemExit('Program requires Skype and skypekit modules'); 
 26  
 
 27  #----------------------------------------------------------------------------------
 
 28  # Taking skypename and password arguments from command-line.
 
 29  
 
 30  if len(sys.argv) < 4: 
 31          print('Usage: python autoanswer.py <skypename> <password> <call target>'); 
 32          sys.exit(); 
 33  
 
 34  accountName = sys.argv[1]; 
 35  accountPsw  = sys.argv[2]; 
 36  
 
 37  # Collecting call target list from command-line arguments.
 
 38  # 3rd and subsequent arguments are our call targets.
 
 39  callTargets = []; 
 40  for i in range(3, len(sys.argv)): 
 41          callTargets.append(sys.argv[i]); 
 42          
 
 43  loggedIn                = False; 
 44  isCallFinished  = False; 
 45  
 
 46  #----------------------------------------------------------------------------------
 
 47  # Defining our own Account property change callback and assigning it to the
 
 48  # SkyLib.Account class.
 
 49  
 
50 -def AccountOnChange (self, property_name):
51 global loggedIn; 52 if property_name == 'status': 53 if self.status == 'LOGGED_IN': 54 loggedIn = True; 55 print('Login complete.');
56 57 Skype.Account.OnPropertyChange = AccountOnChange; 58 59 Skype.isLiveSessionUp = False; 60 Skype.liveSession = 0; 61 62 #---------------------------------------------------------------------------------- 63 # Defining our own Participant property change callback 64 # Unlike with incoming calls - we can assume that we already have the Conversation 65 # object - as we retrieved it ourselves when initiating the call. This makes our life 66 # much easier. So much so that we can make do without any Conversation callback 67 # at all and put all our logic into Participant class. 68 # 69 # We can use the self.voice_status == 'SPEAKING' property change to detect when 70 # any given participant reached live status and 'VOICE_STOPPED' for detecting when 71 # they left the call. 72 # 73 # When the self.voice_status == 'VOICE_STOPPED' fires for ourselves - the call has 74 # ended. Note that in case of conference call, the rest of the participants will 75 # drop too - when the conference host (us) went non-live. 76
77 -def ParticipantOnChange (self, property_name):
78 if property_name == 'voice_status': 79 80 # It makes sense to only display 'joined call' and 'left call' 81 # feedback messages for people other than ourselves. 82 if self.identity != accountName: 83 if self.voice_status == 'SPEAKING': 84 print(self.identity + ' has joined the call.'); 85 86 if self.voice_status == 'VOICE_STOPPED': 87 print(self.identity + ' has left the call.'); 88 89 if (self.identity == accountName) and (self.voice_status == 'VOICE_STOPPED'): 90 global isCallFinished; 91 isCallFinished = True; 92 93 # This property enables you to have neat voice activity indicators in your UI. 94 if property_name == 'sound_level': 95 print(self.identity + ' sound level: ' + str(self.sound_level));
96 97 Skype.Participant.OnPropertyChange = ParticipantOnChange; 98 99 100 #---------------------------------------------------------------------------------- 101 # Creating our main Skype object 102 103 try: 104 MySkype = Skype.GetSkype(keypair.keyFileName); 105 MySkype.Start(); 106 except Exception: 107 raise SystemExit('Unable to create Skype instance'); 108 109 #---------------------------------------------------------------------------------- 110 # Retrieving account and logging in with it. Then waiting in loop. 111 112 account = MySkype.GetAccount(accountName); 113 114 print('Logging in with ' + accountName); 115 account.LoginWithPassword(accountPsw, False, False); 116 117 while loggedIn == False: 118 sleep(1); 119 120 liveConversation = MySkype.GetConversationByParticipants(callTargets, True, False); 121 122 # We need the Participant list to get Participant property change events firing. 123 # If we don't have the participant objects - no events for us. 124 callParticipants = liveConversation.GetParticipants('ALL'); 125 126 # ..but as we already need to have this list, we might as well use it for feedback. 127 if len(callParticipants) > 0: 128 for P in callParticipants: 129 if P.identity != accountName: 130 print('Calling ' + P.identity + '..'); 131 132 isCallFinished = False; 133 liveConversation.RingOthers(callTargets, False, ''); 134 135 print('Press ENTER to finish the call and exit.'); 136 raw_input(''); 137 138 # Checking if the call was already finished (because of other participants dropping 139 # or whether we will need to drop the call ourselves. Going offline without properly 140 # shutting down the live session can cause confusion to remote clients. 141 if not isCallFinished: 142 liveConversation.LeaveLiveSession(False); 143 while not isCallFinished: 144 sleep(1); 145 146 print('The call has ended.'); 147 print('Exiting..'); 148 MySkype.stop(); 149