|
@ -188,7 +188,6 @@ class Network(PrintError): |
|
|
self.default_server = pick_random_server() |
|
|
self.default_server = pick_random_server() |
|
|
|
|
|
|
|
|
self.main_taskgroup = None |
|
|
self.main_taskgroup = None |
|
|
self._jobs = [] |
|
|
|
|
|
|
|
|
|
|
|
# locks |
|
|
# locks |
|
|
self.restart_lock = asyncio.Lock() |
|
|
self.restart_lock = asyncio.Lock() |
|
@ -791,9 +790,7 @@ class Network(PrintError): |
|
|
with open(path, 'w', encoding='utf-8') as f: |
|
|
with open(path, 'w', encoding='utf-8') as f: |
|
|
f.write(json.dumps(cp, indent=4)) |
|
|
f.write(json.dumps(cp, indent=4)) |
|
|
|
|
|
|
|
|
async def _start(self, jobs=None): |
|
|
async def _start(self): |
|
|
if jobs is None: jobs = self._jobs |
|
|
|
|
|
self._jobs = jobs |
|
|
|
|
|
assert not self.main_taskgroup |
|
|
assert not self.main_taskgroup |
|
|
self.main_taskgroup = SilentTaskGroup() |
|
|
self.main_taskgroup = SilentTaskGroup() |
|
|
|
|
|
|
|
@ -802,7 +799,7 @@ class Network(PrintError): |
|
|
await self._init_headers_file() |
|
|
await self._init_headers_file() |
|
|
async with self.main_taskgroup as group: |
|
|
async with self.main_taskgroup as group: |
|
|
await group.spawn(self._maintain_sessions()) |
|
|
await group.spawn(self._maintain_sessions()) |
|
|
[await group.spawn(job) for job in jobs] |
|
|
[await group.spawn(job) for job in self._jobs] |
|
|
except Exception as e: |
|
|
except Exception as e: |
|
|
traceback.print_exc(file=sys.stderr) |
|
|
traceback.print_exc(file=sys.stderr) |
|
|
raise e |
|
|
raise e |
|
@ -818,8 +815,14 @@ class Network(PrintError): |
|
|
self._start_interface(self.default_server) |
|
|
self._start_interface(self.default_server) |
|
|
self.trigger_callback('network_updated') |
|
|
self.trigger_callback('network_updated') |
|
|
|
|
|
|
|
|
def start(self, jobs=None): |
|
|
def start(self, jobs: List=None): |
|
|
asyncio.run_coroutine_threadsafe(self._start(jobs=jobs), self.asyncio_loop) |
|
|
self._jobs = jobs or [] |
|
|
|
|
|
asyncio.run_coroutine_threadsafe(self._start(), self.asyncio_loop) |
|
|
|
|
|
|
|
|
|
|
|
async def add_job(self, job): |
|
|
|
|
|
async with self.restart_lock: |
|
|
|
|
|
self._jobs.append(job) |
|
|
|
|
|
await self.main_taskgroup.spawn(job) |
|
|
|
|
|
|
|
|
async def _stop(self, full_shutdown=False): |
|
|
async def _stop(self, full_shutdown=False): |
|
|
self.print_error("stopping network") |
|
|
self.print_error("stopping network") |
|
|