From 8be5d0d2672841eb52db7042e4899282d200473a Mon Sep 17 00:00:00 2001
From: Oleksandr Husak <oleksandr.husak@mailbox.tu-dresden.de>
Date: Wed, 13 Oct 2021 14:59:36 +0200
Subject: [PATCH] docker container

---
 Dockerfile      |  12 +++++++
 README.md       |  81 ++++++++++++++++++++++++++++++++++++------------
 nginx.conf      |  17 ++++++++++
 src/favicon.ico | Bin 948 -> 15406 bytes
 4 files changed, 91 insertions(+), 19 deletions(-)
 create mode 100644 Dockerfile
 create mode 100644 nginx.conf

diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..52320c2
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,12 @@
+# --- STAGE 1: Build 
+FROM node:14.18-alpine AS build
+WORKDIR /usr/src/app
+COPY package.json package-lock.json ./
+RUN npm install
+COPY . .
+RUN npm run build
+
+# ---STAGE 2: Run 
+FROM nginx:1.17.1-alpine
+COPY nginx.conf /etc/nginx/nginx.conf
+COPY --from=build /usr/src/app/dist/MainApp /usr/share/nginx/html
\ No newline at end of file
diff --git a/README.md b/README.md
index b0e7002..fc89282 100644
--- a/README.md
+++ b/README.md
@@ -1,27 +1,70 @@
-# MainApp
+# Frontend App
 
-This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 12.2.9.
+## Messages
 
-## Development server
+- Public MQTT brocker from [hivemq](https://www.hivemq.com/public-mqtt-broker/).
+    - `ipos/client/position`: relative position of an agent to a curent root point
+    - `ipos/client/root`: update a root point. Default is `{"latitude": 51.02545, "longitude": 13.72295}`.
+- Messages description: [SimpleSceneIntegration Interface](https://md.inf.tu-dresden.de/IPos_IFSimpleSceneIntegration).
 
-Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files.
 
-## Code scaffolding
+## Run
+- 1. Install all dependency and run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files.
+    - if you don't want to install all dependencies, you can simply run the application in a container.
+        1. `docker build -t frontend-osm .`
+        2. `docker run -p 4200:80 frontend-osm:latest`
+        3. Navigate to `http://localhost:4200/`
+- 2. Send messages to a `hivemq` public brocker
+    - topic `ipos/client/position`
+        - new positions
+        - ```json
+            {
+            "object": [
+                {
+                "id": "Employee1",
+                "sensorId": "UWB_1",
+                "type": "HUMAN",
+                "sensorType": "UWB",
+                "position": {
+                    "refSystemId": "ROOT",
+                    "point": {
+                    "x": 13,
+                    "y": 22,
+                    "z": 3
+                    },
+                    "accuracy": 1
+                },
+                "orientation": {
+                    "x": 1,
+                    "y": 0.5,
+                    "z": 1,
+                    "w": 1.5
+                },
+                "lastPosUpdate": "2021-09-14T09:41:20+00:00"
+                }
+            ],
+            "type": "EntryNotification"
+            }
+          ```
+            - More objects can be added to the `"object": []`
+            - There are special colours for objects with id `"Employee1"` - `"Employee4"`. Config: [MarkerColorMap](src/environments/environment.ts)
+    - topic `ipos/client/root`
+        - ```json
+            {
+            "refSystemId": "ROOT",
+            "point": {
+                "latitude": 51.02535,
+                "longitude": 13.72285
+            },
+            "accuracy": 1
+            }
+            ```
 
-Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`.
 
-## Build
 
-Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory.
+## Help
+- This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 12.2.9.
+- Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory.
+- Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`.
+- Validate JSON: [jsonformatter.org](https://jsonformatter.org/)
 
-## Running unit tests
-
-Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io).
-
-## Running end-to-end tests
-
-Run `ng e2e` to execute the end-to-end tests via a platform of your choice. To use this command, you need to first add a package that implements end-to-end testing capabilities.
-
-## Further help
-
-To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
diff --git a/nginx.conf b/nginx.conf
new file mode 100644
index 0000000..4b93bdc
--- /dev/null
+++ b/nginx.conf
@@ -0,0 +1,17 @@
+events{}
+
+http {
+
+    include /etc/nginx/mime.types;
+
+    server {
+        listen 80;
+        server_name frontendOSM;
+        root /usr/share/nginx/html;
+        index index.html;
+
+        location / {
+            try_files $uri $uri/ /index.html;
+        }
+    }
+}
diff --git a/src/favicon.ico b/src/favicon.ico
index 997406ad22c29aae95893fb3d666c30258a09537..1f6eaacef448b7dd372818e93ab05d15225817c7 100644
GIT binary patch
literal 15406
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

literal 948
zcmeAS@N?(olHy`uVBq!ia0y~yV31*8V36ZrV_;ygKUz1Rfq{Xuz$3Dlfq`2Hgc&d0
zt^32kz?|mk;uzx5IW^qdM>tSq@8_3ird$#$b)PtmGj%avUXLD+Sz&S#OH+=Bed~^k
zE(t5$l#lUxmp*pmH4IGd;gaZCq}bXq{|D!ekIpR10+!S`*{d|ox^icu@gBap=gxSl
z)qcKL`~J+{;`cM7wI-iz2<>oODaSCydtP5<MW1wf<TuBx!dGjq8vAe_U9d%#;n2;~
ztIzqnEH{y!wal35e7{x1Hsg%~d-G=p@OUvc9hsl6?CH^zIAcH4dH&5h)pmyZ`;AmY
znu9nUgJNH3mcPBjX#coaKr*U4j!%Z~oA~*{^O0@2@w29<wr*Hd6m9W4?iJTNwSxEO
zbZ7LQcdSjGd{tNB!=E*W4}Mcz_;n3qgHgODkLx_m$6c$kW=vUJwv9RWv=qawDF4jI
zecb79^1?aT*Gg5}<XPMZSbg{U^>^))gz^vCs#x@S-}tn_vPR|kz1LqIe!rYt))!zS
zvoY(Akln64y_z>0QjMl1s!cRVJi24!LcTlil2T>5&o<0i>s<dc?er26S5@8W8`pM;
z?OJ_(o%8XhesAw(MP$yZOFrqWQ!;;jh~)Cir!V|3V%SyvTVbY;X7SZaVH{WAn5iz&
z=um#RWTxWF*#F&(9!oDx@K6yA5`DY&SzM6FU&o1Nh8mJ$_K`0-W?itG(RWrOO6tS(
z!$-ac=AQN8Fk0<BB}&XQ`TaF6*~v@SoLSx?;oQ+;r1+?{g<-$Og0AfnQ<NAsxaYUD
z+I=d#@j<}$!(6siDyny?5-zS^_E<WE|Fc@(z6)mqJUBACq7-f4Ff?>mExzc#e(SB@
zpT5qXq@xuU7Pi&!lysUFld}wm*K3YgSJ&p#-Wvt7zg$RJsLW@&^@+eF`2?fN5XBd}
zYR&gAzj?o-u2HA8y}zpX#FqnS-c)`HnSE9~tZm`$gD*b2i2bTRB<E}-y2QP;#X<GV
zM02Ca4I=mURp)zkC^<~)h~voUs^i%;FYU;h>57S0T%Iz2GuuD?dAA3DV$B=lZOvyH
z6r$};vfMbhvpd#2)ab(g!yh-Ek7Z~$GM#H>zhpq@2A(^5;i*}LzgRN!Zg8aEKBmo3
zU~_+0pvT;%56#ba?9GZ^(LVK@^z27^d%wKo4BR!RsX!tAv-hD-_1uOUt()YuJC_P2
zIa#nij44Xwx_+jyrA#kp&fiDVG#=mia(wT_^268u`LO+C{8`>(vCFyVAp-*ggQu&X
J%Q~loCIA*?vmyWh

-- 
GitLab