From d072f9ee9c124d2b022bda9d0bfb6c404ea30e99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krist=C3=B3f=20T=C3=B3th?= Date: Tue, 3 Apr 2018 16:20:12 +0200 Subject: [PATCH] Extend documentation with framework basics --- README.md | 15 +++++++++++++-- docs/tfw_architecture.png | Bin 0 -> 36115 bytes 2 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 docs/tfw_architecture.png diff --git a/README.md b/README.md index 79963d9..2ec6302 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # baseimage-tutorial-framework -This is the beating heart of TFW – the Docker baseimage consisting of the backend internals of the framework. +This is the beating heart of TFW – the Docker baseimage containing the internals of the framework. All tutorial-framework challenges are child images of this one: their `Dockerfile`s all begin with `FROM avatao/tutorial-framework`. @@ -9,4 +9,15 @@ This document explains the general concepts of TFW and should be the first thing For more on building and running you should consult the `test-tutorial-framework` repo. ## The framework -*... in progress ...* + +The goal of the tutorial-framework is to help content developers in creating interactive tutorials for the Avatao platform. + +To make this possible TFW implements a robust messaging system and provides several pre-written components built upon it, such as a file editor or a terminal (running in your browser). + +The foundation of the whole framework is the messaging system connecting the frontend with the backend. +Frontend components use websockets to connect to TFW, which you can hook to several *event handlers* to define ways to handle specific messages. + +![TFW architecture](docs/tfw_architecture.png) + +Note that our reference frontend implementation is written in Angular (`frontend-tutorial-framework` repository). +Most of pre-made `EventHandler`s are writen in Python3, but you can write event handlers in any language that has ZeroMQ bindings (this virtually means any language). diff --git a/docs/tfw_architecture.png b/docs/tfw_architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..5fdcddfa0443459631fbce06cd4da49db7d56ad5 GIT binary patch literal 36115 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

fEDEHrT)f%5-~bn$RoI3DXS;EcY+Rx7T$JP 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 literal 0 HcmV?d00001