From db2e6c4f15812f23ced99b0dfffdb019f634d947 Mon Sep 17 00:00:00 2001 From: Andrew Gundersen Date: Tue, 15 Dec 2020 15:30:42 -0600 Subject: [PATCH] minor improvments --- __pycache__/agent.cpython-38.pyc | Bin 2048 -> 1367 bytes __pycache__/mail.cpython-38.pyc | Bin 1645 -> 1573 bytes __pycache__/mailroom.cpython-38.pyc | Bin 968 -> 968 bytes __pycache__/message.cpython-38.pyc | Bin 708 -> 758 bytes __pycache__/server.cpython-38.pyc | Bin 1206 -> 917 bytes __pycache__/session.cpython-38.pyc | Bin 1803 -> 1794 bytes __pycache__/typs.cpython-38.pyc | Bin 1110 -> 1115 bytes agent.py | 46 +++++----------------------- mail.py | 27 ++++++++-------- message.py | 4 +++ schemes.py | 33 -------------------- server.py | 28 +++-------------- session.py | 19 ++++++------ typs.py | 2 +- 14 files changed, 39 insertions(+), 120 deletions(-) delete mode 100644 schemes.py diff --git a/__pycache__/agent.cpython-38.pyc b/__pycache__/agent.cpython-38.pyc index e02fcf36c48affe73aacdc1f047fdfe6102c204e..e0a1799db4ca3f40d59a7aee0d7f3d0449e448bf 100644 GIT binary patch delta 610 zcmZ{h&q~8U5XQ5~ZnI5Itp7m8gBK6EhmsYdncL7dCl*G}1Z-W5p|Ln@BWLM%xd;bGFiFruG%tHLSCvp9h- zmh!04?R9^0x(KTJg&5auF{9u4*#0`!XVlp+u33}au$I|0cMN6Wk#FX_mZeE9;Pm(; zQ^S4OG7RG+N+F&i5M9b(4!iKy=)$w#N&O%uqkpHUQS8daQCfve4dDK-2RH;`8ZwQ^ zK0~_6Ex)KI?b+=j5e7*{NXjH7k{@S#-YELhWKu?RCF2FjrNG5MGrmxx`q3U=%6a1) a9iZxdm|QL&r*L`{R~WGfC>g${v_1f|I)JGF literal 2048 zcmZuyPj4eN6t~Bo$#k0j+dr%T0a;GuKr4X|2ha*sw6K>hqT0(`M#I?cPMUav?X;wt zp6Hctu!mIQ(l5b{X41 zcP6T`U{(%mTTA0@s%A8rsJbd`t&V$VwSB#C;~jWk@SR?%dM{u8*gGqyyTNr8-HHLO zaqh!3+aLsKNkLi)62fsvuIWKPavdY}X^kimeokj^*kf>}CUlMOd8BL=uJzozI^yr_j#4m>T7xDW9HZ2ttq8It-kpUG9 zqQ~dai$e6UJ|I%AgE<6V5HfD%uQrfpz}6+IvGvhZZ-UD{(}+tWLj4F8abWl^D&9kZ z4D}NfcbL5ox{qNR3ahrvAUKB!BjR1Zguj`D<>IC@Si}W#=@4_^gJVLi=M$exF zjBh1-r4?7;_P`e4K^i9Ok^q zmQdd+)jsuJ?nS(h9x!zl!rMZt-3h7V1A|>7CL?GE=x$M0(B1kenA|~xr-82jItPmo%Y{px>38Hz|vjdG+jxR$fPAoVV z51UdL{SN9E<$Kec7}Go*+|50uY6pG#yuX1ac*7Kh z%Zg&uh{+Jw-Jlx@Ksg+Y<_6Ao`qq+@O1aT=^tX* zGVpkr?B6nK1*UF-a~aodU~3~~8i+JacrMQ%ZY;m99&yUs9D0-7M@gt)1{u@LutT}>}In`td4A|ON#=FP(MMB z*2WHI#zw+_B_BTk_W?mR$O1`D3C5nG6izXJpBVIfnV;TV9G2uH-DSN=?8iW!mL z9y6LmuUg6-v~c@3@e&dl%HO_s!K@1DMa}$;*J&%N(T4kOpYdtgP&EIEv$F?GxhUCUy&Ef za&K36#$6>=RCQH&%7>xuVFXO59z-J*pYnHP7%ji89uurzf9O-NM_?rqD^h#XQ{Hng zp@Sz0vEj&Md0M41Q*h&@p1k_(8Nc~RJ`55vNVpYwnoUeme0(OSUdFJ$yoq{}i3D!+^TC<_o*K z`w-r1GWO=Q_Qqt+YI;T$IVW@OJPMwVUh|tBE^IJMO`4a+$z`D4^6KrZG&qt(IK7VA zl9~03H&boQRTOXy;X1~QyEuk&V79@@~ zw}bOSbKAKOjv{l|&)CD>z^I}tHm4Ok<29-2IfZ^1Y>o|VC)Z_}9^uq)LE)w1#J>nE z);-*S1RFec3rV=sV)-=9wb{l}H}{P_K@3}Lw|Wn5ZHtssPT>3s{OF>^b=Dw>EtDXq zls1$yFVyj*$^6@k4*o=ha0LOim>mS%fr$ZZR90z~jdESRE|lqF{8Endg1-gG=Hv*% eeZfT_{Ov9!?Lt}0j{mNf9ctrEuAu1!JAVL9u&@OH diff --git a/__pycache__/mailroom.cpython-38.pyc b/__pycache__/mailroom.cpython-38.pyc index ab55b25b7de20e26f01bb9316b0defcbc0e2afbc..dced2a86ee35b235828e07b86f53408a58afb80e 100644 GIT binary patch delta 20 acmX@XeuAAll$V!_0SGQ?UfsyOml*&xdIfF( delta 20 acmX@XeuAAll$V!_0SI(9pW4X1ml*&v`~^q= diff --git a/__pycache__/message.cpython-38.pyc b/__pycache__/message.cpython-38.pyc index 20e50b36d79678f3901e207dcbbb37911e68d5d8..2380ee2de6a5b1526a1ccf1dd99ae6ba803b93ac 100644 GIT binary patch delta 367 zcmX@Y`i+%0l$V!_0SLC}T#dg!kvE-j)5KDv`Uy1*S!@ef7c$f`)-YzVmoQ{;WV06q zl`t&e1o0O#GBNMK?>v}RxU;XMkZ!1W-dl9W*$Z!AeLhk z0g^@HlVzFA3&eqHibPQfF(CIAb5UuY8jw-U1SA+3izI-gCQA_;kSbyZ5n!DlQLNfI XY;yBcN^?@}Kx&IYx;U6PSU6+>vFuIF delta 271 zcmeyydW4lXl$V!_0SFS7?uz%E$eYeMYhtO9e?<*L7TW^Wg$%WfB@7GLYZ$XQ7Bbc{ zm2d*Zxn?t@Fx4=DX=b1d_iTo_tj&y!3_vlS1-vzk3mH8bQW!iK7#RxHN*J;j7w}Hz zW7KEln{3BuBEp@XS`wd|n3ac^KswMSx_H=wyE;^AJ&>e339JAp+#yVlFDpQvx!InScZXV-d(CO_m}yAXUT+ SBEUL9q8QpI-(r$xlmr0eY&L)Z diff --git a/__pycache__/server.cpython-38.pyc b/__pycache__/server.cpython-38.pyc index dbfe3b22defb2fbe898d25402cab3f9ebc364f7a..66aea7c203572f509ff0fe32d54f8605cbb53049 100644 GIT binary patch delta 526 zcmZvYJ4?e*7>2)d$*q@oLC`@_6x1Me=&Fc|pa?G2rHhoFh>kL{R@g3GVIa z=Hx8+8(cEE`6nFwPAk>HggoDcJUK6U@g5!jxLhs(UWxsFQei!Ro*eZyHs=Hv)&taC zVG9SVCtTrSE%fe!?3MCU3zau~R28A2Pg0V?fZk9|`z)n>J^-XOz}-Fw*aHIE7UZ4~ zoN5rz!)t#x7NJ;Dp;A#2R{|$@e)_so8!fXBQeCq;GKzJ;@D!# zGbic^q?hf`gV_lase}MlVw~F4{wlb#m_5^l)-rBW=)(X;i7+ckX$tq_gu`UyFrYb? zVe?WJ(FmAyu;jec&}Y)dR(fNYKbP}%BZ?QXQyc-rXVT9uSeIDYCtJDoarZ|V$|J88 zo$A$JZ-&SjoPuJVpQ|LU^KLg1k{Nv(k#l|3QIeW@(qPKKM3loLjQh_y>yW!!?L>52 W;kNmfGVi%$cvB?hgfn;2b-n?!VQnY? literal 1206 zcmZuw&2AGh5cc1ClWh`Os6hNj9FQUbxgZV|LL5K>2^B;^LcT=H+D*4fb|c#XS}mt? zgeO2qyGNb_!9)1UiB~`z7(1mD39tOkc<#tZOLT}GLbFW2Du{f78)c! zz&qL$?P-~%)1A`T{Pq=uGJpG@0ns5pzrZx_0W7L-%B+$beHYnsq6){XdSeIJ@p-D#nc45%FQk%v zqm0SR;>O^Fiw|`XZ!L{33BQiC+BS|&)Shv4tgK5iozGI6j&kXuxy}m<-uLFl@rQ*~ zg%xW?6>^l0K_9^`2p6YjugLP!@o{Q*loqS9{O5!b9jT`IE2T%XG@m-Yn9J0vL8N{1 z;m#!`h}B`E+h7xX>H9O%Ct>;X*6_Je+6+@UUH~@@K@9IHGqL4-co^~Z88B1DSm_}g zg}ZLd_grt9E{betbVz>`u7g|4MFvysJ?H1tn5hLGvz{>4YRflBAaxW8TM{@-$$ep&Q?;*9~<{)s#G z;PKWo$DTZX`phM-)k{-m6J?EymKE`l9V6i@tCvis`L^|`H4FgZb*wLg9CQTRHD#gC zz(RLDT=cNw!86k5JzVe*(&=j#_=n&BdsXZ9tdxtXy5mb~P6M=X_y{0jm=Q)>ms%^o E0pp__lmGw# diff --git a/__pycache__/session.cpython-38.pyc b/__pycache__/session.cpython-38.pyc index 550c1e780337ac9dc80a5d1d3b963477c84b4bbb..61f4152d83645ed2d05f4ffa34366514e9903f9f 100644 GIT binary patch delta 697 zcmZ8f&ui2`6rNwn&em?$ZS6`e!uA*!Jc%Hv_~W35>Sfi#UP4T!b<$+AOwv-y!h-c6 zhzH401U>fX-{8rAKyYs2AK}&aqUh3r`SRYI_ue<(8BGygF(YLd~9Y)B^yaZXp%S!-40~$21*%#Vvc6fee6-l3$M^U9rddloMNSVrP7AO0_ zYXflqK)?CHH|SRLi+^97$LIjyxIck1ZT3b5=z)T;YrA;ZLs$oJUX?2~vlqag{v)$0 zIkX#?gFkFKK=P>7394(5YcJv95<9qVHC4GjRJM8Mz1_ybmMf&~rOzbW%|`f>1!}ij z2$vBy5&m~=tv<#W07|d0t)#-2T{)2JZ9J4t)Vffu9y`QzoCn)Mz&EuxS8eLq-rLyR V$(u!)9^~paj?!NSNhO2Le*?mglr8`O delta 715 zcmZuv&ui2`6rP!6lF5?YZMVXTh*WQ3OK;x%i3dTnm(@!^LfjeKgk(}?rXpow!S&`z z;>DXi_Ta(4!J~hHx%!XzURJOcC(M`kUcP+q$IQFYhtcfCa5x~a_P+ke)&U{E(7CuE zMjpVn2Onp%Tarjx@svL%l1cA9k)GmZp!_maUMbc*jlNY=x?&d;(Dq?JLXkZHM@ssI zEyElr=or7RriNSxt5gzeFq88nZbc|!NxT)I2#yZcuO`}U)UeIz1~Lt&(#Q7 zV}R4~TxnV8!`&Ks0cH{zObTV0qRw5O71C^DfZIx`V>1CejcaJ;Rr5A8YVpQkr6xko zwgs_&@|mmn@lsK7oAOUL@sB=NLi-jjvCOm`2lEww)<_gmB8W|5D4J{lcG@pj^jbZS1m=J-H+kpQ`*NHoIBTp)I O4>c?@1cit7==}y#hO@}l9{i`dW)qv zH7Biz1*oJ5q_&6+M6d&il?+9klT{eIMY%yDoTvoXf@m@zF8Ac6Olo>O zs4`$9K&~qi01_Zv%mgGjn85txiGq@og_tw6!RCnqB{Z3f5Eg(0kQ@Ov251YjYCSJV zh7UyW1BqKKDVfP7MOfVoQX>K+B!L)aHHfdtS|kjT69N$+CxIOVR*GaL-1)aSY;yBc QN^?@}n1O01d$RBX0MpkwEdT%j delta 374 zcmcc3agBpFl$V!_0SF$aoQwZ7k#`X<3y22=EED%AF_kb+e4wNh#hO@}l9{i`a*L%n zH7BhIq^yV)M6dygl?+83lQkK;ML}j2ai9{MlTR`pmtqGA3ZTh=xLlK0F{$ZsqsoAd z-~@^B0|}6}VkRKL!35?fPZX4#EY6&v4K_~%D51$*gs=c4faD0UF+f|GRqJ^`GQ1#y z4@lf%Ny$tuDZ=VzkQ!kiAqm7Vt3iBC)*>O0oFIq*ISK3_uu>!|;m*IsVUwGmQks)$ M#|%_E*^h-607q6h+W-In diff --git a/agent.py b/agent.py index 4d654b3..2d0fbc3 100644 --- a/agent.py +++ b/agent.py @@ -16,52 +16,22 @@ class Agent: self.service = None self.client_connection = connection - def fetch(self, entity, invocation): - # Create the intent. - params = { - "entity": entity, - "service": self.service, - "invocation": invocation - } - intent = typs.Intent(name="fetch", params=params) - - self.send_agent_intent(intent) - intent = self.recv_agent_intent() - - response = intent.params.get("response") - return response - - def notify(self, text, end=False): - # Create the intent. - params = { - "text": text, - "service": "message", - "end": end - } - intent = typs.Intent(name="notify", params=params) - - # Send intent to agent. - self.send_agent_intent(intent) - async def recv_agent_intent(self): package = await self.client_connection.recv() - intent = self.__decode(package) - return intent + jpackage = self.__decode(package) + return jpackage - async def send_agent_intent(self, intent): - package = self.__encode(intent) + async def send_agent_intent(self, jpackage): + package = self.__encode(jpackage) await self.client_connection.send(package) - def __encode(self, intent: typs.Intent): - package = json.dumps(intent.__dict__) + def __encode(self, jpackage): + package = json.dumps(jpackage) return package - def __decode(self, package) -> typs.Intent: + def __decode(self, package): jpackage = json.loads(package) - name = jpackage.get("name") - params = jpackage.get("params") - intent = typs.Intent(name, params) - return intent + return jpackage diff --git a/mail.py b/mail.py index 1f6cbbb..7ca46d7 100644 --- a/mail.py +++ b/mail.py @@ -10,8 +10,8 @@ class Mail: Two main IO methods. Will translate intents to mail and vice versa. Should be a parent class of Session. """ - def __init__(self): - self.crimata_id = False + def __init__(self, crimata_id): + self.crimata_id = crimata_id # Receive intent. async def mailbox_recv(self): @@ -20,27 +20,26 @@ class Mail: return intent # Send intent. - def mailbox_send(self, intent): - mail = self.__encode(intent) + def mailbox_send(self, jpackage): + mail = self.__encode(jpackage) print(f"Putting message into outbox {self.crimata_id}") mailroom.put_mail(self.crimata_id, mail) - def __encode(self, intent: typs.Intent) -> typs.Mail: - p = intent.params + def __encode(self, jpackage) -> typs.Mail: + j = jpackage owner = self.crimata_id - target = p.get("target") - text = p.get("text") - audio = p.get("audio") + target = j.get("target") + print(target) + text = j.get("text") + audio = j.get("audio") mail = typs.Mail(owner, target, text, audio) return mail @staticmethod - def __decode(mail: typs.Mail) -> typs.Intent: - name = "message" - params = { + def __decode(mail: typs.Mail): + jpackage = { "owner": mail.owner, "text": mail.text, #dev only "audio": mail.audio } - intent = typs.Intent(name, params) - return intent \ No newline at end of file + return jpackage \ No newline at end of file diff --git a/message.py b/message.py index ef5959b..9f803b5 100644 --- a/message.py +++ b/message.py @@ -22,6 +22,10 @@ async def messenger(): while not mailbox.outbox.empty(): message = mailbox.outbox.get() + # Assert mailbox for target. + if message.target not in mailroom.subs: + mailroom.create_mailbox(message.target) + # Get mailbox of target and put mail there. target_mailbox = mailroom.get_mailbox(message.target) print(f"{mailbox.name} -> {target_mailbox.name}: {message.text}") diff --git a/schemes.py b/schemes.py deleted file mode 100644 index b8ecb26..0000000 --- a/schemes.py +++ /dev/null @@ -1,33 +0,0 @@ -# schemes.py - - -class Schemes: - - def handle_intent(self, intent): - print(f"Handling {intent.name}.") - - # Set the service. - self.service = intent.name - - # Run intent endpoint. - if intent.name == "init": - self.init(intent) - - if intent.name == "message": - self.message(intent) - - # Init session by setting Crimata ID. - def init(self, intent): - self.crimata_id = intent.params.get("crimata_id") - print(f"Initalized for {self.crimata_id}") - - # Push message to anoter Crimata ID. - #! Push message to backend. - def message(self, intent): - text = intent.params.get("text") - target = intent.params.get("target") #crimata_id - - print(f"Messaging {target}: '{text}'") - - # Uses mail.Mail interface. - self.mailbox_send(intent) \ No newline at end of file diff --git a/server.py b/server.py index c7bbdc0..c7e4121 100644 --- a/server.py +++ b/server.py @@ -11,24 +11,11 @@ import session HOST = "localhost" PORT = 8764 -token_refs = {} - # Makes instance of a Messenger session for every client that connects. -async def launch_session(token, connection): +async def launch_session(crimata_id, connection): # Create the session. - s = session.Session(connection) - - # Login if token. - if token in token_refs.keys(): - crimata_id = token_refs.get(token) - s.crimata_id = crimata_id - - print(f"Reconnected: {crimata_id}") - - # Update client's login token. - intent = typs.Intent("token", params={"text": token}) - await s.send_agent_intent(intent) + s = session.Session(connection, crimata_id) # Run core loops. await asyncio.gather( @@ -39,20 +26,13 @@ async def launch_session(token, connection): ) - # Update state before end. - token_refs.update({token: s.crimata_id}) - print("Ended session.") async def main(connection, path): - token = await connection.recv() - - # Create Session ID if None. - if token not in token_refs.keys(): - token = str(uuid.uuid4()) + crimata_id = await connection.recv() # Start session with token. - await launch_session(token, connection) #! Not stopping on disconnect + await launch_session(crimata_id, connection) #! Not stopping on disconnect # Run run for every new connection. async def lift(): diff --git a/session.py b/session.py index 9c1d648..2e1f806 100644 --- a/session.py +++ b/session.py @@ -6,39 +6,38 @@ import websockets import mail import agent -import schemes -class Session(schemes.Schemes, agent.Agent, mail.Mail): +class Session(agent.Agent, mail.Mail): """Launch instance for every client connection. Will recv messages from client and push them to mailbox. Also, will pull messages from mailbox and send to client. """ - def __init__(self, connection): + def __init__(self, connection, crimata_id): + mail.Mail.__init__(self, crimata_id) agent.Agent.__init__(self, connection) - mail.Mail.__init__(self) self.on = True - print("Launched sesssion.") + print(f"Launched sesssion for {crimata_id}.") # Recv intents run desired endpoint. async def do_agent_intents(self): while self.on: try: - intent = await asyncio.wait_for( + jpackage = await asyncio.wait_for( self.recv_agent_intent(), timeout=0.2) except asyncio.TimeoutError: continue except websockets.exceptions.ConnectionClosed: await self.shutdown() - continue + continue # Call corresponding endpoint. - self.handle_intent(intent) + self.mailbox_send(jpackage) # Send mail back to agent. #! Pulling message from backend. @@ -51,14 +50,14 @@ class Session(schemes.Schemes, agent.Agent, mail.Mail): # Try recv. try: - intent = await asyncio.wait_for( + jpackage = await asyncio.wait_for( self.mailbox_recv(), timeout=0.2) except asyncio.TimeoutError: continue # Send message to Agent. print("Sending message") - await self.send_agent_intent(intent) + await self.send_agent_intent(jpackage) # Shutdown protocol. async def shutdown(self): diff --git a/typs.py b/typs.py index 2368957..5af12a4 100644 --- a/typs.py +++ b/typs.py @@ -6,7 +6,7 @@ import asyncio class Mail: - def __init__(self, owner, target, text): + def __init__(self, owner, target, text, audio): self.owner = owner self.target = target self.text = text -- 2.43.0