summaryrefslogtreecommitdiff
path: root/examples/oecho_set.py
diff options
context:
space:
mode:
Diffstat (limited to 'examples/oecho_set.py')
-rwxr-xr-xexamples/oecho_set.py71
1 files changed, 71 insertions, 0 deletions
diff --git a/examples/oecho_set.py b/examples/oecho_set.py
new file mode 100755
index 0000000..93cae8f
--- /dev/null
+++ b/examples/oecho_set.py
@@ -0,0 +1,71 @@
+#!/bin/python
+
+# Ouroboros - Copyright (C) 2016 - 2020
+#
+# A simple echo application
+#
+# Dimitri Staessens <[email protected]>
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following
+# disclaimer in the documentation and/or other materials provided
+# with the distribution.
+#
+# 3. Neither the name of the copyright holder nor the names of its
+# contributors may be used to endorse or promote products derived
+# from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+# OF THE POSSIBILITY OF SUCH DAMAGE.
+
+from ouroboros.event import *
+import argparse
+
+
+def client():
+ f = flow_alloc("oecho")
+ f.writeline("Hello, PyOuroboros!")
+ print(f.readline())
+ f.dealloc()
+
+
+def server():
+ print("Starting the server.")
+ while True:
+ f = flow_accept()
+ print("New flow.")
+ fs = FlowSet([f])
+ fq = FEventQueue()
+ fs.wait(fq)
+ f2, _ = fq.next()
+ line = f2.readline()
+ print("Message from client is " + line)
+ f2.writeline(line)
+ f2.dealloc()
+
+
+if __name__ == "__main__":
+ parser = argparse.ArgumentParser(description='A simple echo client/server')
+ parser.add_argument('-l', '--listen', help='run as a server', action='store_true')
+ args = parser.parse_args()
+ if args.listen is True:
+ server()
+ else:
+ client()