From d5377b4274c6268276ade3c238a3cb58d3ca6fbb Mon Sep 17 00:00:00 2001
From: Sara <sarasdj@stud.ntnu.no>
Date: Fri, 9 Feb 2024 12:57:02 +0100
Subject: [PATCH] add: server termination on q

---
 .../__pycache__/data_structs.cpython-311.pyc  | Bin 1641 -> 2445 bytes
 server/main.py                                |  40 ++++++++++--------
 .../__pycache__/get_markers.cpython-311.pyc   | Bin 1667 -> 2652 bytes
 server/map/get_markers.py                     |   1 +
 4 files changed, 24 insertions(+), 17 deletions(-)

diff --git a/server/__pycache__/data_structs.cpython-311.pyc b/server/__pycache__/data_structs.cpython-311.pyc
index 397569683b62a9073b0e3b720effd2f1eaba34ab..133d8fe1d896175c75442992de70415e7e6bd522 100644
GIT binary patch
literal 2445
zcmb7FJ!~UI6rT0|+Kw*<^5+nTT<#9B2RcQZ4gms$L?lRYX%Y%7qh)V*oZDpWH8bl#
zA{QyHNI@AXAf>np6wy#pUPYZE#cC_0tLPj#)m8W2tiAp_BzVbwZ{EDon|U+ed;YCZ
z$PtjL{uh0&67n34z9_vx_d6Jz5|_A=PwJ#XB$6Rt5;yaNxbm+VLVkxYk%}Zd3V75p
zPeyn&@aSV6*)_I^nf(Vtm{M%Gc1T07PMuy*p|qaSU4_9Zp`;?Yq>^zZD!Un~xH461
znyWlfDw?Z8I4#z;XoCkV&TOp5N_fzuv1U7=w@;mZVi*#SF2mPd12`pZsZA^xCDP7-
zC8d@OR+_3yw#d1(Y03<b#&iS&z*J&|Q@=Jg&2iHekQWcW__+Etr;Jw{VWU-Dr+hCA
zn$;!?cHaMJZLJEfeafnE3%12W)^b9AuXzv~mgP0P(6SDvlf>@zC*a)(e-q${M6b^r
zD?jPc%mS!vG`9pQe+++JaFb0_$1n}MPAx0WSynx8TRx7bEbIH0?e{#g*9hY*ZM5o?
z!CS=2qag5E0V13eb^{cfLco0mU~2qRfTQ%UlabZ(&-Xh7)KgEWKWBvcS4bjb(2<8P
z!URh91AvK#m*L?RR{;{J@M-Yr@EKID72Pb5L3MLLhJ2iVNNwI?v`#TKKWOZDVauhl
z;oG4YF(g4;Xfo<}O)rGmpb=-o$DXs-pq$6Ky8WZ|1NC+uhw&7*YcxEte7aBl*svX^
z#cb!m$>KSClJaUFCjJkv+6u4?4<n?lf`#{+SQ=P(Ly4t>)vpWEHo!s_3PE-<EN#<Z
z3!qpD0mHII1f&aFLMS6F1DIKs$MJt$&M{jgw2*`mNRh*tp{q_giXQ$sz!CYov<j@e
z5iP8MD)d$P?y+)dEJi)&;%#tFM@#SEY^k^CxNuw$EZH<QHVwfTl7qbl5UVvmu)`!n
z+>Fg449Gf<CIV8IQ-EQzX4RWd?{o;LKOPA6>?@%zzI~MFAQU=UzSWUoRdoNuM6YiM
zEu61{<OI0y2&u7Apmg5@m>{+2W<YACX1J>8XwWt*x~l_~jrhhxo9$7yP3uh{FOBsb
z8mvRJfVSfu(pYr@AG)5#Y}adXCuIw4lyb5mb{*?=((a(s4R<|hH|=@Au)!F6<AA5w
z8wWf^4yQX0xTvvPu=5bZZliez;cWm@O&BN^jk-8S8)w@5=uM<#LvnL$7tj#rmw`xA
zQEBC}1Pnvky>+<&tODlsn&j*vSh=BIDc;OUF9YIWkzuOcbpR-4vI{y97^f>?Jh&dR
zJGdOOtMu2q(i#3dWj4>%q$WkVjV8-XSZzw;GB`$G5#<%@VPLtQ6CTcuCElCId*gQj
zpvV@M&I(bfe6|c}o@_+3rISiDw|KJG$!o=2ha`~A^~%W@D<@GYYz0EGHxNWcVdU|$
zTE#g8>?(X4V7RO_X#RQFOf6$sfqGUF>SFsFp~s=9t8lhSNU8|8*))};#*q)nDa8>+
ztNn%XN%GV78G9Gj;T7^<06MZHNf9YujQ)2tMJjj5BwXR#^}tcgNjE!W60UIWdf-?p
QN|47ST;bgHD;y%hmw0OEga7~l

literal 1641
zcmb_cy>Amq6rWx1+G}GwA2^BaOSo`QU<!nguHbY!ArT3kbZ4Ce6j+v4tKCVm#POP$
zHIT?fbfR!^Wu!EzK@tB3B_+jbtCOyxTVyJ#`@Q`NU`pO<e)B%&&CL6leO0Sf80gXa
zH~g)}*ncEsWTecj3+9A5^eHi_PQlSmOFgEtd(6>aFsJxZW$ZOZLOmt6lwdKwvZ#)7
zpLNPR+0t&x8F${7p*t&u<$*Wcas9EwLt|k130E5lZo4Dbhr%0%Wq;ST_l8``u(EGG
zH=l8LXV(v_(%R<!fjQt$`5-hb+a3$cKCrXHXjW2T)&O(DIO`#(9<KF*^$L!P%N4@%
zmgQT2dG64+vn-Go#aF<X?E+5NM42!XTtX8SQnopp6d>jKm}rp5Gp30S3E57iA|ySR
zN|1_~<gokfOz8@8?HHjZ`Cwa+ryvJG>qLowZYd~#g6b(r+)U}y&v$?6Ka^a^{?H$e
z`&(S@`QE5M65h_O+c$6aVS36%-$BTx^u^fr<&DunXqcuubbZr2T+Xv`Bh%ICl-qzK
z7PNkvYX8)O<|d|EuyK8=y))XGwtW@ag<$;}X<O-{X>D4Y!I^bC8l5w=_PJ?>71P}J
zobiD8s%btMTZ6<Rmaz7WiDgV;k)WDE4UD`3ILg0BE$NpdHV=tEx!M>xWi^|%p_*?9
zw1wsr&=y))|I-qCTs+|WBQz$r^E$yX?~Om=UA|9mQ2hnv`b<wMPPIoHxQ9H{ZExU-
zuqZ6Y9m`HpEWmcYO8h|LI>81&(p{5|NHRz%JzV=TpuD`43E2UlylGw2DmR*_XE|7D
zW2yve8<?t7d~t5=ES2zNbRhNZYzu(L!X9Hz2z<U0{P{CskI5q@=qcEk9OYC;0o1Ob
zi^b4U;&>(Pvl&MemVD22T-!ff{VJ+dzlo*tI^c-?+gv}b1+9(KOF^S~{Clv{I_?Fl
z?c=@ZLUFMYu>{JMII3<(7Z>3s=!YRz2q<~tM}k#?^S*47NYKKNw*a5_rLJF!SPs>a
zj-%!w*^V~BpQt{fzmVytEtfQYe9D(6e=>ee-p+60GCV0Q@^3&?P!uI9vgMUv@gm|3
vmKp*0##*qr6fGFbYQz9X^=Q>l@Mz}Y1L;1V8=7?mx1NU&r2F^{LmbZky3$Xt

diff --git a/server/main.py b/server/main.py
index 68211701..1fc670f9 100644
--- a/server/main.py
+++ b/server/main.py
@@ -6,9 +6,12 @@ from consts import DB_NAME, COLLECTION, MONGO_URI, MONGO_CERT_PATH, SSL_CERT_PAT
 from map.get_markers import get_markers
 import atexit
 import ssl
+import keyboard
 
 app = Flask(__name__)
+terminate_server = 0
 
+"""
 # Initialise MongoDB connection
 try:
     client = MongoClient(MONGO_URI,
@@ -21,7 +24,8 @@ try:
     print("Connected to MongoDB")
 except Exception as e:
     print(f"Failed to connect to MongoDB: {e}")
-
+"""
+    
 # Define HTTP class
 class IceHTTP(BaseHTTPRequestHandler):
     def do_GET(self):
@@ -29,25 +33,30 @@ class IceHTTP(BaseHTTPRequestHandler):
             self.send_response(200)
             self.send_header("Content-type", "text/plain")
             self.end_headers()
+
             self.wfile.write(b"Root path hit!")
         elif self.path == '/update_map':
+            # Fetch marker data
             markers_data, resp_code = get_markers()
 
+            # Set headers
             self.send_response(resp_code)
             self.send_header("Content-type", "application/json")
             self.end_headers()
 
-            # Write the JSON data directly to the response
-            self.wfile.write(markers_data.encode('utf-8'))
+            # Write the JSON data to response object
+            self.wfile.write(markers_data)
 
-        elif self.path == '/test_endpoint':
-            self.send_response(200)
-            self.send_header("Content-type", "text/plain")
-            self.end_headers()
-            self.wfile.write(b"Test path hit!")
+# Listen for pressing of q key to terminate server
+def on_key_press(server, event):
+    if event.name == 'q':
+        print('Terminating server...')
+        server.server_close()
+        keyboard.unhook_all()
+        quit()
 
 
-# Start a server on port 8443 using defined HTTP class
+# Start a server on port 8443 using self defined HTTP class
 if __name__ == "__main__":
     print("Starting server on port ", PORT)
     try:
@@ -60,14 +69,11 @@ if __name__ == "__main__":
         server.socket = ssl_context.wrap_socket(server.socket, server_side=True)
 
         print("Server running on port ", PORT)
-        server.serve_forever()
-    except Exception as e:
-        print(f"Failed to start server on port {PORT}: {e}")
 
+        # Register key press event handler
+        keyboard.on_press(lambda event: on_key_press(server, event))
 
-def on_termination():
-    print("Server is terminating.")
+        server.serve_forever()
 
-# Register the function to be called on exit
-atexit.register(on_termination)
-       
\ No newline at end of file
+    except Exception as e:
+        print(f"Failed to start server on port {PORT}: {e}")
diff --git a/server/map/__pycache__/get_markers.cpython-311.pyc b/server/map/__pycache__/get_markers.cpython-311.pyc
index 15e055720f597867380f0eb67732a0402d57b8eb..43698edae3b8e474e9db41d43ba5065054d66146 100644
GIT binary patch
literal 2652
zcmb_dT}%{L6uvY2zw8gJ6qGGO1&dn}BDOJwB1KuX#z2B-kj?5k&b=%Pv%AC0074c^
zjY)|i(LPB`6HOnG2AkNY^3Wzen8wH1WSeeoY9HDd-Is<2O^i=HcmH6(_Niy)p8NOR
zbI-l!n=|*_ZYKh%cmGV<Z3z9zIwi3d8yhtoLbnk{n3GVbP;(&;`n<%)`4G<`g2qgx
zW%tab*4CO>mchy@l!An;hBdJFPB9?tJLeH1R%}}4!7h}7Y}>^_xGkRL&ssv3YT_`i
z;n)eyQbpVqa>d;tcia>5<i{+MH(nX4gtqlM3RPil5Cv>GW~M*DQ9BkiqQ&B5mTzkd
zm}o^G5!6YA#7RP<)<Kd`lM40p3CcK8&XTw+0UVZ@$JAs(EcwD}7Zi4x8|UFrw~+&B
z<x4{l0?cF61M@N<R?AmDXT(^r729@TIIWBaJ9g~QENr`iU?;A?F6_o0Y*~iDua<(3
zQV4sCPvwKEWe3bbDaZ&n#~ZBr@GgVZYVh|RT!U+I?KZ1i+3N1MSTz}}?!k52tXi-i
z{CyYKZ?n4T>)y9mHEUaFmf~?kiXSVJbr#5h8;$pBz?<-UDbqImzW>0RaZ}2?4c~0U
zM@@4Ut)g_B2#u9*9q+%6QkEcEhRM}3z(`d5{s=#anvmux15h(kJag8R6}OD=B0mgN
zp0i%H4i@WaZW>)N4Wnr;aG*cOXhkh&XJpcT76{9q3R1HMJ!%z1EjC4R?4v3G4xNbp
z_UjkwiI@9(qP^e6exC^S_r#vVZRQwTa}7*+nQ8?Ug_4(I!`u^aP=}OEL}S_{Ce#kp
z&$kptNNQCJ--cUOh!~S&8q6jW)S->W#PI}CRqBijS0d9S79G{7OBF_lHWQJ^6p^T1
z5XDJF5NDz{8pOXs-++5{1Js`y0QX)n_n@F$EmNO>DmwJ~)99W*&e#6%J;0yW-+%Gh
z#r~cg^F?7N&h6SnR`wK^boWrpNrjL^vEST7O=k!$_CD&N)?p$^$!T%Rw~83In6Zt+
zpl-wNDRiM`j!SX(puba$vHpr*tQ|z(BFGUoEg8WvQ48>tZ#zh>@q7|dnX`?JZ$9qr
z44+epqJ|S%Vlo^g>bRDa!?Kc$9_l!FFbq>uL<z?QIUFTgq`0_Eo_XW!l47bRCgXDV
zY{S;ME-5JrlG@$23221P)P11lkzUtZcpqAq4&Uv*)1CIWX8f(?;SE5c+!Ii-mv9{c
zyTTHU!fqoUafPv5@iS!uMJ;$TF00gW{EA3q7W;sW+6ts-FEtKPS9~*{wi|lJxeuvb
zBdQh@G=XwNWjiz$L<z9nDz+R{VS!-`R(}FV=g~S}W2t%O+r4!3-pPkS-Pe)!b!2=U
z3$~}lvE#b0Gwtil_&OJC&uaIr46RN7GBB)%F6x&q>v%*T9n+<RE>ENfl+1vVZTeuX
z>B%mAIINE+^qJJUiQ9dZ`x`O+GOyP`f6gtqw%HPN5$hwP`k16A<n+KqW?<rfwbjzL
zCO#R|FI>`-$~r<<xuZPu?HJE|JH|8Lj`7U5UVg##%8uOrrLL9g6)Dr!n-26o8cMtR
zGOoU-t~$f;xwPwa#&vr8@cFc>KjZ3Ox0$P*3-(tYR9U?^TOiBY0jSe;y&2HnV8$DK
zB<kK%y8YDaXBE}3zolkVWxbWRnii%O+?&s95b)bl1GTyr!gwv{309%URnB0*^w@6-
zHk%&r<ygDf0y^NMd{U(*bw({@9<wZHqtu3DN<xT3UW!CUViJi&Xayt{1^(Oc)hW~_
zTvqcy^H?&LpiWsRPgw<7CJ9Vk@b4EQs-{eenpz-wp7M<7)G{Io>Uf^&dA=$8VN_v>
zGEc}i_O5smPfDa)>4h<tKhz&V!NE8#iyZU$CySi(`6r9&b>o}$R4ztuCT}E{M$?{_
zjHhM3BJ1`p4&990h%BA?dgyNWPI#sDp_Z=i%G7tI-A6L+BlFHIGF`WS>AmK?<xC@g
d2Kja5&!R5<-`^~%(T(rAy_SOr?Ns^G{R3U4nO^_^

delta 983
zcmaJ<O=uHA6n?XR-6We-O^vmsv|>vemD+<|M9PMWKOlur(RLAQx-;FzZW`R(5G}1u
zu?O*1_8@rB;-NiMMNeKW=zR+T>rg!iqFyATUIf9}B&JOT-^_dSy~j82XPC{V+u_Jc
zI2;5fBazqSKED`g?&J`_J-~pG30mbu8X|Cw^Lf53@r&Q02Y?96jJnFSBAQr7k{C$@
zKeSkAKPqBwnI%}QCE0OTCTLrM0J}Q?M6M?xzZ>2RW<px1j0IE4gtaik;sR(9jD{dC
zeet^)oaTCa<H*gTu26vaJk#$ba37-PIV@oDv9v6*ZkSfYsZ9ZZ8?cN6IEX|4Whpp}
zBe)Uo+Q~BbS#bP<RoR*g?_Piz#Jb?y=k|<qLvRor=`RhS6RgNAnn5@^&gt9;n|2o6
zVl!3FJj%ljegyI;-ZW?oJW0R5t_`Zj=9_u@^p7spsN^}PQen)@k*eFN#ziWdDJSjZ
zFrfi6J7tt%nhJJ$nov>CnpulVRtl$cw$YNLtuslM_HMiWReMxR+pkjIBDk8hLp46N
zt$aRvg%S6E7~c2dd5w5XrJ`XGGF7D>QQf5Y7De5|(g|6x{AaNQcV3Fkaa4AQ?VL(E
zDT;{ge~gX}E6NTUGKe#pNm-M`vaMDY2{E;wGE;yO7ZhV3m6oM5&+;!Xc*#rNRqQEb
zT_Ht<yxWRj^hU=#MPFC+qM~n$4|}@dDHH1vWumA|lp2Jl;2rs=;yUu>o<vKc4c6L%
ziR1iQH=pR^*A5{c_leBL8!4ByDR1Aj-QV)?kUt6)$IX;IX$cIM8?_pJwAVNOB){a7
znJmtkq~GdcuK&sG2h5asgwO^A3gxu{!9sbtuL9@QZV&4A2E@GjU6Mm6R)T*`x$qy+
Cpypcu

diff --git a/server/map/get_markers.py b/server/map/get_markers.py
index 06a95e20..fa7524e3 100644
--- a/server/map/get_markers.py
+++ b/server/map/get_markers.py
@@ -28,6 +28,7 @@ def get_markers():
             MarkerTemplate(measurement3, 20.0-measurement3.accuracy, "Yellow"),
         ]
         
+        # NB: return test data as JSON
         return json.dumps([marker.to_dict() for marker in testData]), 200
     
     except Exception as e:
-- 
GitLab