kore

An easy to use, scalable and secure web application framework for writing web APIs in C.
Commits | Files | Refs | README | LICENSE | git clone https://git.kore.io/kore.git

commit 5e84ebdab23e83d9bf9524162c3a95cddb2405b2
parent 582e18d2ec4ffbe4ca3b05499fb9eaee1c16b451
Author: Joris Vink <joris@coders.se>
Date:   Sun,  2 May 2021 16:07:41 +0200

Simplify the echo example, kore can just run the file nowadays.

Diffstat:
examples/python-echo/README.md | 11+++++++++++
examples/python-echo/conf/build.conf | 34----------------------------------
examples/python-echo/conf/python-echo.conf | 3---
examples/python-echo/src/echo.py | 67-------------------------------------------------------------------
examples/python-echo/src/init.c | 25-------------------------
5 files changed, 11 insertions(+), 129 deletions(-)

diff --git a/examples/python-echo/README.md b/examples/python-echo/README.md @@ -0,0 +1,11 @@ +Example of using the asynchronous python api to create a simple +echo server. + +Kore must have been built with PYTHON=1. + +On the command-line run the following + +$ kore echo.py + +Then connect to 127.0.0.1 port 6969 using netcat or so and you'll +see it echo back everything you send it. diff --git a/examples/python-echo/conf/build.conf b/examples/python-echo/conf/build.conf @@ -1,34 +0,0 @@ -# python-echo build config -# You can switch flavors using: kodev flavor [newflavor] - -# Set to yes if you wish to produce a single binary instead -# of a dynamic library. If you set this to yes you must also -# set kore_source together with kore_flavor. -single_binary=yes -kore_source=../../ -kore_flavor=NOTLS=1 PYTHON=1 - -# The flags below are shared between flavors -cflags=-Wall -Wmissing-declarations -Wshadow -cflags=-Wstrict-prototypes -Wmissing-prototypes -cflags=-Wpointer-arith -Wcast-qual -Wsign-compare - -cxxflags=-Wall -Wmissing-declarations -Wshadow -cxxflags=-Wpointer-arith -Wcast-qual -Wsign-compare - -# Mime types for assets served via the builtin asset_serve_* -#mime_add=txt:text/plain; charset=utf-8 -#mime_add=png:image/png -#mime_add=html:text/html; charset=utf-8 - -dev { - # These flags are added to the shared ones when - # you build the "dev" flavor. - cflags=-g - cxxflags=-g -} - -#prod { -# You can specify additional flags here which are only -# included if you build with the "prod" flavor. -#} diff --git a/examples/python-echo/conf/python-echo.conf b/examples/python-echo/conf/python-echo.conf @@ -1,3 +0,0 @@ -# python-echo configuration - -python_import src/echo.py diff --git a/examples/python-echo/src/echo.py b/examples/python-echo/src/echo.py @@ -1,67 +0,0 @@ -# -# Copyright (c) 2013-2018 Joris Vink <joris@coders.se> -# -# Permission to use, copy, modify, and distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. -# -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -# - -import kore -import socket - -class EchoServer: - # Setup socket + wrap it inside of a kore socket so we can use it. - def __init__(self): - sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - sock.setblocking(False) - sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) - sock.bind(("127.0.0.1", 6969)) - sock.listen() - - self.conn = kore.socket_wrap(sock) - - # Wait for a new client to connect, then create a new task - # that calls handle_client with the ocnnected client as - # the argument. - async def run(self): - while True: - try: - client = await self.conn.accept() - kore.task_create(self.handle_client(client)) - client = None - except Exception as e: - kore.fatal("exception %s" % e) - - # Each client will run as this co-routine. - # In this case we pass a timeout of 1 second to the recv() call - # which will throw a TimeoutError exception in case the timeout - # is hit before data is read from the socket. - # - # This timeout argument is optional. If none is specified the call - # will wait until data becomes available. - async def handle_client(self, client): - while True: - try: - data = await client.recv(1024, 1000) - if data is None: - break - await client.send(data) - except TimeoutError as e: - print("timed out reading (%s)" % e) - except Exception as e: - print("client got exception %s" % e) - client.close() - -# Setup the server object. -server = EchoServer() - -# Create a task that will execute inside of Kore as a co-routine. -kore.task_create(server.run()) diff --git a/examples/python-echo/src/init.c b/examples/python-echo/src/init.c @@ -1,25 +0,0 @@ -/* - * Copyright (c) 2020 Joris Vink <joris@coders.se> - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include <kore/kore.h> -#include <kore/hooks.h> - -/* Let kore handle the default option parsing. */ -void -kore_parent_configure(int argc, char **argv) -{ - kore_default_getopt(argc, argv); -}