77import  requests 
88from  typing  import  Any 
99import  coloredlogs 
10+ from  pathlib  import  Path 
1011
1112# from aiortc import RTCIceCandidate, RTCSessionDescription 
1213from  peerjs .peer  import  Peer , PeerOptions 
2122LOG_LEVEL  =  logging .INFO 
2223
2324peer  =  None 
24- myPeerId  =  None 
25+ savedPeerId  =  None 
26+ # persisted config dict 
27+ config  =  {}
28+ CONFIG_FILE  =  '.peerjsrc' 
2529AMBIANIC_PNP_HOST  =  'ambianic-pnp.herokuapp.com'  # 'localhost' 
2630AMBIANIC_PNP_PORT  =  443  # 9779 
2731AMBIANIC_PNP_SECURE  =  True  # False 
@@ -55,37 +59,56 @@ async def join_peer_room(peer=None):
5559 log .debug ('myRoom members %r' , peerIds )
5660
5761
62+ def  _savePeerId (peerId = None ):
63+  assert  peerId 
64+  global  savedPeerId 
65+  savedPeerId  =  peerId 
66+  config ['peerId' ] =  peerId 
67+  with  open (CONFIG_FILE , 'w' ) as  outfile :
68+  json .dump (config , outfile )
69+ 
70+ 
71+ def  _loadConfig ():
72+  global  config 
73+  global  savedPeerId 
74+  conf_file  =  Path (CONFIG_FILE )
75+  if  conf_file .exists ():
76+  with  conf_file .open () as  infile :
77+  config  =  json .load (infile )
78+  savedPeerId  =  config .get ('peerId' , None )
79+ 
80+ 
5881def  _setPnPServiceConnectionHandlers (peer = None ):
5982 assert  peer 
60-  global  myPeerId 
83+  global  savedPeerId 
6184 @peer .on (PeerEventType .Open ) 
6285 async  def  peer_open (id ):
6386 log .warning ('Peer signaling connection open.' )
64-  global  myPeerId 
87+  global  savedPeerId 
6588 # Workaround for peer.reconnect deleting previous id 
6689 if  peer .id  is  None :
6790 log .warning ('pnpService: Received null id from peer open' )
68-  peer .id  =  myPeerId 
91+  peer .id  =  savedPeerId 
6992 else :
70-  if  myPeerId  !=  peer .id :
93+  if  savedPeerId  !=  peer .id :
7194 log .info (
7295 'PNP Service returned new peerId. Old %s, New %s' ,
73-  myPeerId ,
96+  savedPeerId ,
7497 peer .id 
7598 )
76-  myPeerId   =   peer .id 
77-  log .info ('myPeerId : %s' , peer .id )
99+  _savePeerId ( peer .id ) 
100+  log .info ('savedPeerId : %s' , peer .id )
78101
79102 @peer .on (PeerEventType .Disconnected ) 
80103 async  def  peer_disconnected (peerId ):
81-  global  myPeerId 
104+  global  savedPeerId 
82105 log .info ('pnpService: Peer %s disconnected from server.' , peerId )
83106 # Workaround for peer.reconnect deleting previous id 
84107 if  not  peer .id :
85108 log .info ('BUG WORKAROUND: Peer lost ID. ' 
86109 'Resetting to last known ID.' )
87-  peer ._id  =  myPeerId 
88-  peer ._lastServerId  =  myPeerId 
110+  peer ._id  =  savedPeerId 
111+  peer ._lastServerId  =  savedPeerId 
89112 await  peer .reconnect ()
90113
91114 @peer .on (PeerEventType .Close ) 
@@ -155,8 +178,8 @@ async def pnp_service_connect() -> Peer:
155178 # If we already have an assigned peerId, we will reuse it forever. 
156179 # We expect that peerId is crypto secure. No need to replace. 
157180 # Unless the user explicitly requests a refresh. 
158-  global  myPeerId 
159-  log .info ('last saved myPeerId  %s' , myPeerId )
181+  global  savedPeerId 
182+  log .info ('last saved savedPeerId  %s' , savedPeerId )
160183 new_token  =  util .randomToken ()
161184 log .info ('Peer session token %s' , new_token )
162185 options  =  PeerOptions (
@@ -165,7 +188,7 @@ async def pnp_service_connect() -> Peer:
165188 secure = AMBIANIC_PNP_SECURE ,
166189 token = new_token 
167190 )
168-  peer  =  Peer (id = myPeerId , peer_options = options )
191+  peer  =  Peer (id = savedPeerId , peer_options = options )
169192 log .info ('pnpService: peer created with id %s , options: %r' ,
170193 peer .id ,
171194 peer .options )
@@ -224,6 +247,7 @@ def _config_logger():
224247 # add_signaling_arguments(parser) 
225248 # args = parser.parse_args() 
226249 # if args.verbose: 
250+  _loadConfig ()
227251 _config_logger ()
228252 # add formatter to ch 
229253 log .debug ('Log level set to debug' )
0 commit comments