From bf5c1bf8b3d95d12a5578b36bd40fc7eb920c7ec Mon Sep 17 00:00:00 2001 From: Dmitry Vasiliev Date: Sat, 2 Jan 2010 19:06:36 +0300 Subject: [PATCH] Added examples --- .gitignore | 3 ++- examples/generator.erl | 18 ++++++++++++++++++ examples/generator.py | 18 ++++++++++++++++++ examples/handler.erl | 20 ++++++++++++++++++++ examples/handler.py | 20 ++++++++++++++++++++ examples/hello.erl | 12 ++++++++++++ examples/hello.py | 12 ++++++++++++ 7 files changed, 102 insertions(+), 1 deletion(-) create mode 100644 examples/generator.erl create mode 100644 examples/generator.py create mode 100644 examples/handler.erl create mode 100644 examples/handler.py create mode 100644 examples/hello.erl create mode 100644 examples/hello.py diff --git a/.gitignore b/.gitignore index c6db4ea0..9a3acd22 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ *.swp -*.pyc +*.py[co] +*.beam /src/*.egg-info /build /dist diff --git a/examples/generator.erl b/examples/generator.erl new file mode 100644 index 00000000..fe031d2b --- /dev/null +++ b/examples/generator.erl @@ -0,0 +1,18 @@ +-module(generator). +-export([generate/1]). + +generate(N) when N >= 0 -> + Port = open_port({spawn, "python handler.py"}, + [{packet, 1}, nouse_stdio, binary, {env, [{"PYTHONPATH", "../src"}]}]), + generate(Port, N), + receive + {Port, {data, Data}} -> + port_close(Port), + binary_to_term(Data) + end. + +generate(Port, 0) -> + port_command(Port, term_to_binary(stop)); +generate(Port, N) -> + port_command(Port, term_to_binary(now())), + generate(Port, N - 1). diff --git a/examples/generator.py b/examples/generator.py new file mode 100644 index 00000000..72312f6a --- /dev/null +++ b/examples/generator.py @@ -0,0 +1,18 @@ +import time + +from erlport import Port, Protocol +from erlport import Atom + + +class EventGenerator(Protocol): + + def handle(self, port, n): + while n > 0: + port.write(tuple(time.localtime())) + n -= 1 + port.write(Atom("stop")) + + +if __name__ == "__main__": + proto = EventGenerator() + proto.run(Port()) diff --git a/examples/handler.erl b/examples/handler.erl new file mode 100644 index 00000000..5992e9d7 --- /dev/null +++ b/examples/handler.erl @@ -0,0 +1,20 @@ +-module(handler). +-export([handle/1]). + +handle(N) when N >= 0 -> + Port = open_port({spawn, "python generator.py"}, + [{packet, 1}, nouse_stdio, binary, {env, [{"PYTHONPATH", "../src"}]}]), + port_command(Port, term_to_binary(N)), + handle(Port, []). + +handle(Port, Acc) -> + receive + {Port, {data, Data}} -> + case binary_to_term(Data) of + stop -> + port_close(Port), + lists:reverse(Acc); + Term -> + handle(Port, [Term | Acc]) + end + end. diff --git a/examples/handler.py b/examples/handler.py new file mode 100644 index 00000000..a1baabd7 --- /dev/null +++ b/examples/handler.py @@ -0,0 +1,20 @@ +from erlport import Port, Protocol +from erlport import Atom + + +class EventHandler(Protocol): + + def __init__(self): + self.collected = [] + + def handle(self, port, message): + if message == Atom("stop"): + port.write(self.collected) + self.collected = [] + else: + self.collected.append(message) + + +if __name__ == "__main__": + proto = EventHandler() + proto.run(Port()) diff --git a/examples/hello.erl b/examples/hello.erl new file mode 100644 index 00000000..2d0e5b9f --- /dev/null +++ b/examples/hello.erl @@ -0,0 +1,12 @@ +-module(hello). +-export([hello/1]). + +hello(Name) -> + Port = open_port({spawn, "python hello.py"}, + [{packet, 1}, nouse_stdio, binary, {env, [{"PYTHONPATH", "../src"}]}]), + port_command(Port, term_to_binary({hello, Name})), + receive + {Port, {data, Data}} -> + port_close(Port), + binary_to_term(Data) + end. diff --git a/examples/hello.py b/examples/hello.py new file mode 100644 index 00000000..fbb6733f --- /dev/null +++ b/examples/hello.py @@ -0,0 +1,12 @@ +from erlport import Port, Protocol + + +class HelloProtocol(Protocol): + + def handle_hello(self, name): + return "Hello, %s" % name + + +if __name__ == "__main__": + proto = HelloProtocol() + proto.run(Port())