Skip to content

Commit 19f42b4

Browse files
committed
feat: persist peer id between restarts
1 parent 1538156 commit 19f42b4

File tree

2 files changed

+40
-14
lines changed

2 files changed

+40
-14
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,3 +127,5 @@ dmypy.json
127127

128128
# Pyre type checker
129129
.pyre/
130+
131+
.peerjsrc

http-proxy.py

Lines changed: 38 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import requests
88
from typing import Any
99
import coloredlogs
10+
from pathlib import Path
1011

1112
# from aiortc import RTCIceCandidate, RTCSessionDescription
1213
from peerjs.peer import Peer, PeerOptions
@@ -21,7 +22,10 @@
2122
LOG_LEVEL = logging.INFO
2223

2324
peer = None
24-
myPeerId = None
25+
savedPeerId = None
26+
# persisted config dict
27+
config = {}
28+
CONFIG_FILE = '.peerjsrc'
2529
AMBIANIC_PNP_HOST = 'ambianic-pnp.herokuapp.com' # 'localhost'
2630
AMBIANIC_PNP_PORT = 443 # 9779
2731
AMBIANIC_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+
5881
def _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

Comments
 (0)