diff --git a/.efrocachemap b/.efrocachemap index 7c24deaa..95634cb5 100644 --- a/.efrocachemap +++ b/.efrocachemap @@ -3971,50 +3971,50 @@ "assets/src/ba_data/python/ba/_generated/__init__.py": "https://files.ballistica.net/cache/ba1/ee/e8/cad05aa531c7faf7ff7b96db7f6e", "assets/src/ba_data/python/ba/_generated/enums.py": "https://files.ballistica.net/cache/ba1/b2/e5/0ee0561e16257a32830645239f34", "ballisticacore-windows/Generic/BallisticaCore.ico": "https://files.ballistica.net/cache/ba1/89/c0/e32c7d2a35dc9aef57cc73b0911a", - "build/prefab/full/linux_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/99/7e/a9c63634bc09295b7137efbc5b03", + "build/prefab/full/linux_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/09/7a/85d4792454203266127f6b971463", "build/prefab/full/linux_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/74/1d/fc9e33e565475daaac80da5252f0", - "build/prefab/full/linux_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/8f/36/a76c81f143ca1a8326fa74252e52", - "build/prefab/full/linux_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/c5/c7/73a9f555675a1f775ecb438c2dca", - "build/prefab/full/linux_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/5d/52/4ab44afb5d906b5ac230595a7db0", + "build/prefab/full/linux_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/b4/63/6d776da53bfc773393e28f648da1", + "build/prefab/full/linux_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/f7/ef/e7e331042fa9b2c6ff29a32dab19", + "build/prefab/full/linux_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/18/e9/cc68897f6985e36a82a5a9903da0", "build/prefab/full/linux_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/9c/7b/ac1a200be0f37078af0991faca3b", - "build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/1b/64/89b0a457b5ac3182f7c0e4d56d32", - "build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/cf/4a/adb4c298fba97d7662a54e03e733", - "build/prefab/full/mac_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/be/75/d6f9765c8e9ec02656b9369e05ba", - "build/prefab/full/mac_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/c5/ad/a7b772a315f4e44e584e9b301193", - "build/prefab/full/mac_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/27/c8/e750bd63efc9bc9044434a85a36b", - "build/prefab/full/mac_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/bc/67/ddebb7f7dc9aec9118c8b94f4770", - "build/prefab/full/mac_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/5d/64/bf0bc44efa11f1dc1cebf12d4602", - "build/prefab/full/mac_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/f0/85/0999b7aa41ceeec58d5b624d4f8a", - "build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/d6/08/5f9ebe3042acd98f8358c3938226", - "build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/87/06/72f03c7c44379aa49f921b00257d", - "build/prefab/full/windows_x86_gui/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/98/14/dda7238d3e57474d4e325f8acfec", - "build/prefab/full/windows_x86_gui/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/7c/9e/0257ecd6e0427306d4f15ec071b2", - "build/prefab/full/windows_x86_server/debug/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/2c/b9/4a6dea5818a6dbbada49092242c8", - "build/prefab/full/windows_x86_server/release/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/2c/52/763d351ddf7778dd10a099f1d2d5", - "build/prefab/lib/linux_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/ef/cc/71ff8188172b919a95a28c4ddf49", - "build/prefab/lib/linux_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/63/c9/585a425482ab0e123edfa1a34bb4", - "build/prefab/lib/linux_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/6a/57/e3cc2d31572937022a658b11da46", - "build/prefab/lib/linux_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/f8/61/d65c5c17d96346202ba033f0ba07", - "build/prefab/lib/linux_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/eb/56/58eba010c3d8757925cd83473071", - "build/prefab/lib/linux_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/c4/ea/7855552175e44f75ee6fe6081181", - "build/prefab/lib/linux_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/1e/d6/f3746757eee023903adddc0bbccb", - "build/prefab/lib/linux_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/1b/f3/f9d3c048edbd746e566cafcf5539", - "build/prefab/lib/mac_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/52/bd/64a6cfb863ec403aeb05ad7d6255", - "build/prefab/lib/mac_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/d7/53/61de32567dfe1493748ff9758b85", - "build/prefab/lib/mac_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/0b/ec/e0daab5d68dd2892e904e7b16240", - "build/prefab/lib/mac_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/94/c3/a62f8a2164d81cc61f361ff687cb", - "build/prefab/lib/mac_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/b1/50/311482ff29a7fbe0d7ecee57a9ce", - "build/prefab/lib/mac_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/6b/ae/0611db4ea8ccd933557d79ce6837", - "build/prefab/lib/mac_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/40/1a/2947e4c51e3e7942c1bebcdd877c", - "build/prefab/lib/mac_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/8e/93/73bdecb88823ec41ff22b3254393", - "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/c7/6c/76f09157c10d52254e8ba612f481", - "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/3d/bf/4e956246387aa112aa124ac393e1", - "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/0d/da/a870975b2a953241af857f4385b8", - "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/c0/d8/598c01b061d832067c5797a58390", - "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/14/9a/7f7debd96dfb2255bff2705c93f9", - "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/87/3e/6d30b82d8b27bae4ed4c087d9fdd", - "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/cf/f5/1d89bbfd67b7d01de298082ad6f1", - "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/1c/23/0a72787714d43253658f4d96941c", + "build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/c7/6f/1a6c08dd4c291077b8c51be8e417", + "build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/87/15/0814e3b83974405c970dafc74869", + "build/prefab/full/mac_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/58/9e/e0de1370317a3fb45174236b43ec", + "build/prefab/full/mac_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/54/bb/5285d2bd3f6f9cb2ad858f7ac7d2", + "build/prefab/full/mac_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/ff/2b/6059bcc6ba3ea9d4c88130e906ab", + "build/prefab/full/mac_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/c1/4d/ecf4c523d4afbeb598a74aa19027", + "build/prefab/full/mac_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/15/e9/86c7cbc1e71db412f3bb4338e7b2", + "build/prefab/full/mac_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/dc/fd/69cd2582308fa75400b610702179", + "build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/89/ab/041c9cc32305515f98f4959ac0d7", + "build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/08/fe/a9f1d17d6491b649285e54795097", + "build/prefab/full/windows_x86_gui/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/9f/ee/5423526e849bee73084379a982b6", + "build/prefab/full/windows_x86_gui/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/de/f7/10d02a4e23f68f394758991ea6bb", + "build/prefab/full/windows_x86_server/debug/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/15/ca/af6b357dc05f4ede6b69102a3438", + "build/prefab/full/windows_x86_server/release/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/ce/ad/4b7f1e4234dd207df2191bc31573", + "build/prefab/lib/linux_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/89/e7/bddebae8f1238053c424601c2e1b", + "build/prefab/lib/linux_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/8f/e9/0dbdd88e200fad78ce9ca8af72e0", + "build/prefab/lib/linux_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/8a/41/0aa39ae1cf0f1939b3a6f25f61a1", + "build/prefab/lib/linux_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/18/c7/1f9f11e753dbfd3ce17b1a355b7d", + "build/prefab/lib/linux_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/e5/35/4b65f05089a8dc7552e1d6efeb7e", + "build/prefab/lib/linux_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/5c/3b/8bf5b65f7ba311116ea71c0f157a", + "build/prefab/lib/linux_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/07/6d/3441c6c39ec55e532ad0e2295e54", + "build/prefab/lib/linux_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/21/b0/fe3a4950958bcef9b4e7c09ca1d6", + "build/prefab/lib/mac_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/ad/db/5ca0536cef4adad5c20ef8a21c15", + "build/prefab/lib/mac_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/55/d3/511833367da7546a2fe143e94c48", + "build/prefab/lib/mac_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/5b/64/4536316032cca40227c045c99b8a", + "build/prefab/lib/mac_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/6d/da/bf1b3d173484c6a46022ade973bf", + "build/prefab/lib/mac_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/11/b3/aa5493d4e7c19daedd17474d89e6", + "build/prefab/lib/mac_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/6e/df/ce8a87922ff11b26579c7fb0021a", + "build/prefab/lib/mac_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/7c/b1/2f659ec3185311272e7f1e395255", + "build/prefab/lib/mac_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/97/82/4dd06b79621e5574a257b0882648", + "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/22/61/5634db97f5f1b8d3f306813ac020", + "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/59/15/81836ef75c25113b691ec13dbfe0", + "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/8a/c2/362fa12093fe34dab45f9e276fea", + "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/43/2a/fe49f1ac82e61311edec688aa89f", + "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/14/2c/2f589a7c80b7e1f094f3b1664850", + "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/f8/60/56eb47d7850e87dbb70357b84ddd", + "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/6c/29/c257034a97e0a497a4147dc21744", + "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/cf/41/6e8e28df35b7e144ccd4acbc2601", "src/ballistica/generated/python_embedded/binding.inc": "https://files.ballistica.net/cache/ba1/b3/15/7c6d580b3482870b5b058858624c", "src/ballistica/generated/python_embedded/bootstrap.inc": "https://files.ballistica.net/cache/ba1/d3/db/e73d4dcf1280d5f677c3cf8b47c3" } \ No newline at end of file diff --git a/.idea/dictionaries/ericf.xml b/.idea/dictionaries/ericf.xml index 890c13bb..2f1c9891 100644 --- a/.idea/dictionaries/ericf.xml +++ b/.idea/dictionaries/ericf.xml @@ -735,6 +735,7 @@ erroring errorsound errstr + escval etcpack etsel etxt @@ -922,6 +923,7 @@ funtionality futimens fval + fvar fverts fwefocjwerj gameactivity @@ -1424,6 +1426,7 @@ maxtries maxval maxw + maxwait maxwidth mbytecount mdiv @@ -1453,6 +1456,7 @@ minidom minigame minigames + minping minusbutton minval minver @@ -1989,9 +1993,11 @@ regionid regtp reimported + relfut relpath remainingchecks remoteapp + rentry representer reprlib reqs @@ -2005,6 +2011,7 @@ respawnable respawned respawnicon + responsecount responsetype responsetypes responsetypevar @@ -2439,6 +2446,7 @@ thingie this'll thismodule + threadpool threadtype throwiness ticon @@ -2743,8 +2751,10 @@ zipapp zlib zlibmodule + zoneid zoneinfo zoomtext + zpings zpos zval diff --git a/.idea/inspectionProfiles/Default.xml b/.idea/inspectionProfiles/Default.xml index 9f0a511b..9b9ab7b0 100644 --- a/.idea/inspectionProfiles/Default.xml +++ b/.idea/inspectionProfiles/Default.xml @@ -119,6 +119,7 @@ + diff --git a/CHANGELOG.md b/CHANGELOG.md index 1cfdf0e1..4f48c546 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,5 @@ -### 1.6.12 (20542, 2022-03-25) +### 1.6.12 (20551, 2022-04-14) +- More internal work on V2 master-server communication ### 1.6.11 (20539, 2022-03-23) - Documentation is now generated using pdoc . Thanks Dliwk!! (I'll get it wired up to auto-update to a webpage soon). diff --git a/Makefile b/Makefile index f425382f..e0cb143a 100644 --- a/Makefile +++ b/Makefile @@ -678,7 +678,7 @@ pycharm-full: prereqs meta ################################################################################ # Run all tests. (live execution verification) -test: prereqs +test: prereqs meta @tools/pcommand echo BLU Running all tests... @tools/pcommand pytest -v tests diff --git a/assets/src/ba_data/python/ba/_net.py b/assets/src/ba_data/python/ba/_net.py index 4d146a05..f6c05b9a 100644 --- a/assets/src/ba_data/python/ba/_net.py +++ b/assets/src/ba_data/python/ba/_net.py @@ -25,9 +25,14 @@ class NetworkSubsystem: def __init__(self) -> None: - # Anyone accessing/modifying region_pings should hold this lock. - self.region_pings_lock = threading.Lock() - self.region_pings: dict[str, float] = {} + # Anyone accessing/modifying zone_pings should hold this lock, + # as it is updated by a background thread. + self.zone_pings_lock = threading.Lock() + + # Region IDs mapped to average pings. This will remain empty + # until enough pings have been run to be reasonably certain + # that a nearby server has been pinged. + self.zone_pings: dict[str, float] = {} # For debugging. self.v1_test_log: str = '' diff --git a/assets/src/ba_data/python/bastd/ui/gather/privatetab.py b/assets/src/ba_data/python/bastd/ui/gather/privatetab.py index 33858e6e..26633766 100644 --- a/assets/src/ba_data/python/bastd/ui/gather/privatetab.py +++ b/assets/src/ba_data/python/bastd/ui/gather/privatetab.py @@ -809,7 +809,7 @@ class PrivateGatherTab(GatherTab): { 'type': 'PRIVATE_PARTY_START', 'config': dataclass_to_dict(self._hostingconfig), - 'region_pings': ba.app.net.region_pings, + 'region_pings': ba.app.net.zone_pings, 'expire_time': time.time() + 20, }, callback=ba.WeakCall(self._hosting_state_response)) diff --git a/assets/src/ba_data/python/bastd/ui/settings/nettesting.py b/assets/src/ba_data/python/bastd/ui/settings/nettesting.py index 31dd809e..fbd0f127 100644 --- a/assets/src/ba_data/python/bastd/ui/settings/nettesting.py +++ b/assets/src/ba_data/python/bastd/ui/settings/nettesting.py @@ -192,18 +192,18 @@ def _run_diagnostics(weakwin: weakref.ref[NetTestingWindow]) -> None: _print(f'\nContacting V2 master-server ({baseaddr})...') _print_test_results(lambda: _test_fetch(baseaddr)) - # Get V2 nearby region - with ba.app.net.region_pings_lock: - region_pings = copy.deepcopy(ba.app.net.region_pings) - nearest_region = (None if not region_pings else sorted( - region_pings.items(), key=lambda i: i[1])[0]) + # Get V2 nearby zone + with ba.app.net.zone_pings_lock: + zone_pings = copy.deepcopy(ba.app.net.zone_pings) + nearest_zone = (None if not zone_pings else sorted( + zone_pings.items(), key=lambda i: i[1])[0]) - if nearest_region is not None: - nearstr = f'{nearest_region[0]}: {nearest_region[1]:.0f}ms' + if nearest_zone is not None: + nearstr = f'{nearest_zone[0]}: {nearest_zone[1]:.0f}ms' else: nearstr = '-' - _print(f'\nChecking nearest V2 region ping ({nearstr})...') - _print_test_results(lambda: _test_nearby_region_ping(nearest_region)) + _print(f'\nChecking nearest V2 zone ping ({nearstr})...') + _print_test_results(lambda: _test_nearby_zone_ping(nearest_zone)) if have_error[0]: _print('\nDiagnostics complete. Some diagnostics failed.', @@ -284,12 +284,11 @@ def _test_fetch(baseaddr: str) -> None: raise RuntimeError('Got unexpected response data.') -def _test_nearby_region_ping( - nearest_region: Optional[tuple[str, float]]) -> None: - """Try to ping nearest v2 region.""" - if nearest_region is None: - raise RuntimeError('No nearest region.') - if nearest_region[1] > 500: +def _test_nearby_zone_ping(nearest_zone: Optional[tuple[str, float]]) -> None: + """Try to ping nearest v2 zone.""" + if nearest_zone is None: + raise RuntimeError('No nearest zone.') + if nearest_zone[1] > 500: raise RuntimeError('Ping too high.') diff --git a/ballisticacore-cmake/.idea/dictionaries/ericf.xml b/ballisticacore-cmake/.idea/dictionaries/ericf.xml index 57136017..55d198ef 100644 --- a/ballisticacore-cmake/.idea/dictionaries/ericf.xml +++ b/ballisticacore-cmake/.idea/dictionaries/ericf.xml @@ -361,6 +361,7 @@ ericsson's errname erroring + escval etcdec etcpack evals @@ -449,6 +450,7 @@ funcname fval fvals + fvar fwefocjwerj gamecenter gamedata @@ -693,6 +695,7 @@ mastervers maximus maxtries + maxwait maxwidth mediump memalign @@ -708,6 +711,7 @@ mikirog millisecs minelem + minping minsdl mipmapcount mipmaps @@ -983,15 +987,18 @@ regtp rehel reimported + relfut reloadmedia rendererdata renormalize + rentry rené reprfunc rerase resends resetbtn resetinput + responsecount responsetypes responsetypevar resync @@ -1182,6 +1189,7 @@ theres thismodule threadname + threadpool threadtype ticon tiltage @@ -1341,8 +1349,10 @@ zmin zoffset zomg + zoneid zoneinfo zoomable + zpings zrot diff --git a/config/toolconfigsrc/dir-locals.el b/config/toolconfigsrc/dir-locals.el index 2f645a4b..4c22d685 100644 --- a/config/toolconfigsrc/dir-locals.el +++ b/config/toolconfigsrc/dir-locals.el @@ -11,6 +11,9 @@ ;; Projectile indexing and search will ignore the following ;; (in addition to git-ignored stuff which it ignores by default) (nil . ((projectile-globally-ignored-directories . ("docs" - "src/external")))) + "src/external" + "assets/src/pylib-android" + "assets/src/pylib-apple" + "assets/src/windows")))) ) diff --git a/src/ballistica/ballistica.cc b/src/ballistica/ballistica.cc index fd9f1c32..2c9ed73b 100644 --- a/src/ballistica/ballistica.cc +++ b/src/ballistica/ballistica.cc @@ -21,7 +21,7 @@ namespace ballistica { // These are set automatically via script; don't modify them here. -const int kAppBuildNumber = 20542; +const int kAppBuildNumber = 20551; const char* kAppVersion = "1.6.12"; // Our standalone globals. diff --git a/src/ballistica/graphics/graphics_server.h b/src/ballistica/graphics/graphics_server.h index 589bf1d4..8b1e9f78 100644 --- a/src/ballistica/graphics/graphics_server.h +++ b/src/ballistica/graphics/graphics_server.h @@ -223,15 +223,13 @@ class GraphicsServer : public Module { auto texture_compression_types_are_set() const { return texture_compression_types_set_; } - auto set_renderer_context_lost(bool lost) -> auto { - renderer_context_lost_ = lost; - } + auto set_renderer_context_lost(bool lost) { renderer_context_lost_ = lost; } auto renderer_context_lost() const { return renderer_context_lost_; } auto fullscreen_enabled() const { return fullscreen_enabled_; } // This doesn't actually toggle fullscreen. It is used to inform the game // when fullscreen changes under it. - auto set_fullscreen_enabled(bool fs) -> void { fullscreen_enabled_ = fs; } + auto set_fullscreen_enabled(bool fs) { fullscreen_enabled_ = fs; } auto VideoResize(float h, float v) -> void; #if BA_ENABLE_OPENGL diff --git a/tools/bacommon/net.py b/tools/bacommon/net.py index bd4ef1c9..a7cf78fe 100644 --- a/tools/bacommon/net.py +++ b/tools/bacommon/net.py @@ -17,7 +17,7 @@ if TYPE_CHECKING: @dataclass class ServerNodeEntry: """Information about a specific server.""" - region: Annotated[str, IOAttrs('r')] + zone: Annotated[str, IOAttrs('r')] # FIXME change to 'z' address: Annotated[str, IOAttrs('a')] port: Annotated[int, IOAttrs('p')] diff --git a/tools/efro/error.py b/tools/efro/error.py index adf88702..a35bfac8 100644 --- a/tools/efro/error.py +++ b/tools/efro/error.py @@ -134,3 +134,45 @@ def is_udp_network_error(exc: BaseException) -> bool: }: return True return False + + +def is_asyncio_streams_network_error(exc: BaseException) -> bool: + """Is the provided exception a network-related error? + + This should be passed an exception which resulted from creating and + using asyncio streams. It should return True for any errors that could + conceivably arise due to unavailable/poor network connections, + firewall/connectivity issues, etc. These issues can often be safely + ignored or presented to the user as general 'connection-lost' events. + """ + import errno + import ssl + + if isinstance(exc, ( + ConnectionError, + TimeoutError, + EOFError, + )): + return True + + # Also some specific errno ones. + if isinstance(exc, OSError): + if exc.errno == 10051: # Windows unreachable network error. + return True + if exc.errno in { + errno.ETIMEDOUT, + errno.EHOSTUNREACH, + errno.ENETUNREACH, + }: + return True + + # Am occasionally getting a specific SSL error on shutdown which I + # believe is harmless (APPLICATION_DATA_AFTER_CLOSE_NOTIFY). + # It sounds like it may soon be ignored by Python (as of March 2022). + # Let's still complain, however, if we get any SSL errors besides + # this one. https://bugs.python.org/issue39951 + if isinstance(exc, ssl.SSLError): + if 'APPLICATION_DATA_AFTER_CLOSE_NOTIFY' in str(exc): + return True + + return False diff --git a/tools/efro/rpc.py b/tools/efro/rpc.py index 93bffe6a..ae70399c 100644 --- a/tools/efro/rpc.py +++ b/tools/efro/rpc.py @@ -4,9 +4,7 @@ from __future__ import annotations -import ssl import time -import errno import asyncio import logging import weakref @@ -15,7 +13,7 @@ from dataclasses import dataclass from threading import current_thread from typing import TYPE_CHECKING, Annotated -from efro.error import CommunicationError +from efro.error import CommunicationError, is_asyncio_streams_network_error from efro.util import assert_never from efro.dataclassio import (dataclass_to_json, dataclass_from_json, ioprepped, IOAttrs) @@ -513,38 +511,10 @@ class RPCEndpoint: def _is_expected_connection_error(cls, exc: Exception) -> bool: """Stuff we expect to end our connection in normal circumstances.""" - # HMMM; should we move this to efro.error?.. something - # like is_asyncio_streams_network_error()? - - if isinstance(exc, ( - ConnectionError, - TimeoutError, - EOFError, - _KeepaliveTimeoutError, - )): + if isinstance(exc, _KeepaliveTimeoutError): return True - # Also some specific errno ones. - if isinstance(exc, OSError): - if exc.errno == 10051: # Windows unreachable network error. - return True - if exc.errno in { - errno.ETIMEDOUT, - errno.EHOSTUNREACH, - errno.ENETUNREACH, - }: - return True - - # Am occasionally getting a specific SSL error on shutdown which I - # believe is harmless (APPLICATION_DATA_AFTER_CLOSE_NOTIFY). - # It sounds like it may soon be ignored by Python (as of March 2022). - # Let's still complain, however, if we get any SSL errors besides - # this one. https://bugs.python.org/issue39951 - if isinstance(exc, ssl.SSLError): - if 'APPLICATION_DATA_AFTER_CLOSE_NOTIFY' in str(exc): - return True - - return False + return is_asyncio_streams_network_error(exc) def _check_env(self) -> None: # I was seeing that asyncio stuff wasn't working as expected if