diff --git a/Python/src/example.py b/Python/src/example.py
new file mode 100644
index 0000000..f381e5d
--- /dev/null
+++ b/Python/src/example.py
@@ -0,0 +1,72 @@
+from time import sleep
+import xpc
+
+def ex():
+ print "X-Plane Connect example script"
+ print "Setting up simulation"
+ with xpc.XPlaneConnect() as client:
+ # Verify connection
+ try:
+ # If X-Plane does not respond to the request, a timeout error
+ # will be raised.
+ client.getDREF("sim/test/test_float")
+ except:
+ print "Error establishing connection to X-Plane."
+ print "Exiting..."
+ return
+
+ # Set position of the player aircraft
+ print "Setting position"
+ # Lat Lon Alt Pitch Roll Yaw Gear
+ posi = [37.524, -122.06899, 2500, 0, 0, 0, 1]
+ client.sendPOSI(posi)
+
+ # Set position of a non-player aircraft
+ print "Setting NPC position"
+ # Lat Lon Alt Pitch Roll Yaw Gear
+ posi = [37.52465, -122.06899, 2500, 0, 20, 0, 1]
+ client.sendPOSI(posi, 1)
+
+ # Set angle of attack, velocity, and orientation using the DATA command
+ print "Setting orientation"
+ data = [\
+ [18, 0, -998, 0, -998, -998, -998, -998, -998],\
+ [ 3, 130, 130, 130, 130, -998, -998, -998, -998],\
+ [16, 0, 0, 0, -998, -998, -998, -998, -998]\
+ ]
+ client.sendDATA(data)
+
+ # Set control surfaces and throttle of the player aircraft using sendCTRL
+ print "Setting controls"
+ ctrl = [0.0, 0.0, 0.0, 0.8]
+ client.sendCTRL(ctrl)
+
+ # Pause the sim
+ print "Pausing"
+ client.pauseSim(True)
+ sleep(2)
+
+ # Toggle pause state to resume
+ print "Resuming"
+ client.pauseSim(False)
+
+ # Stow landing gear using a dataref
+ print "Stowing gear"
+ gear_dref = "sim/cockpit/switches/gear_handle_status"
+ client.sendDREF(gear_dref, 0)
+
+ # Let the sim run for a bit.
+ sleep(4)
+
+ # Make sure gear was stowed successfully
+ gear_status = client.getDREF(gear_dref)
+ if gear_status[0] == 0:
+ print "Gear stowed"
+ else:
+ print "Error stowing gear"
+
+ print "End of Python client example"
+ raw_input("Press any key to exit...")
+
+if __name__ == "__main__":
+ ex()
\ No newline at end of file
diff --git a/Python/src/xpc.py b/Python/src/xpc.py
index 5138d55..cf7d5e0 100644
--- a/Python/src/xpc.py
+++ b/Python/src/xpc.py
@@ -43,6 +43,13 @@ class XPlaneConnect(object):
def __del__(self):
self.close()
+ # Define __enter__ and __exit__ to support the `with` construct.
+ def __enter__(self):
+ return self
+
+ def __exit__(self, type, value, traceback):
+ self.close()
+
def close(self):
'''Closes the specified connection and releases resources associated with it.'''
if self.socket is not None:
diff --git a/Python/xplaneConnect.pyproj b/Python/xplaneConnect.pyproj
index 0919359..c288a9c 100644
--- a/Python/xplaneConnect.pyproj
+++ b/Python/xplaneConnect.pyproj
@@ -5,7 +5,7 @@
2.0
3c7a940d-17c8-4e91-882f-9bc8b1d2f54b
.
- src\xpc.py
+ src\example.py
.