Open Koseng opened 3 years ago
Example async client test code:
import asyncio
from SimConnect import AircraftRequests, SimConnect
async def main():
sm = SimConnect()
aq = AircraftRequests(sm)
while True:
results = await asyncio.gather(
aq.async_get("RUDDER_DEFLECTION"),
aq.async_get("AMBIENT_PRESSURE"),
aq.async_get('RADIO_HEIGHT'),
aq.async_get("GROUND_ALTITUDE"),
aq.async_get("RUDDER_DEFLECTION"),
aq.async_get("AMBIENT_PRESSURE"),
aq.async_get('RADIO_HEIGHT'),
aq.PositionandSpeedData.async_get('PLANE_LATITUDE'),
aq.PositionandSpeedData.async_get('PLANE_LONGITUDE'),
aq.PositionandSpeedData.async_get('PLANE_ALTITUDE'),
aq.FlightInstrumentationData.async_get('KOHLSMAN_SETTING_HG'))
print(results)
await asyncio.sleep(0.3)
asyncio.run(main())
Moved to asyncio, including a sync wrapper. So everything should be compatible. Introduced async_get(...) next to get(...).
To call async functions, an event loop is necessary. This is provided by the helper thread in AsyncLoop. With that helper, a sync wrapper can be put on top of the async implementation.
Please test.
I also tried tried an implementation with asyncio Futures to replace the wait and sleep pattern. It is the asyncio way to wait for a callback. But it turned out to be much slower in the sync case, so I returned to the current implementation.