
    i88              	         d Z ddlmZ ddlmZ ddlmZ ddlmZm	Z	m
Z
mZmZ  G d dee      Z G d d	ee      Z G d
 dee      Z G d dee      Z G d dee      Z G d dee      Ze G d d             Ze G d d             Ze G d d             Ze G d d             Ze G d d             Ze G d d             Ze G d d             Ze G d  d!             Ze G d" d#             Ze G d$ d%             Ze G d& d'             Ze G d( d)             Ze G d* d+             Z e G d, d-             Z!e G d. d/             Z"e G d0 d1             Z#eeeeee e!e"e#f   Z$d4d2Z%y3)5zEdge Proxy WebSocket message definitions.

This module defines the message types and dataclasses for communication
with the cloud Orchestrator over WebSocket.

This is intentionally kept aligned with `orchestrator/src/edge_proxy/messages.py`.
    )annotations)	dataclass)Enum)AnyDictListOptionalUnionc                  @    e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZy)MessageType
nav_statusrobot_statewaypoint_listerrorpongframe_responsefr_detections	event_lognavigatecancel_navigation	get_statepingcapture_frameN)__name__
__module____qualname__
NAV_STATUSROBOT_STATEWAYPOINT_LISTERRORPONGFRAME_RESPONSEFR_DETECTIONS	EVENT_LOGNAVIGATECANCEL_NAVIGATION	GET_STATEPINGCAPTURE_FRAME     A/home/nelsen/Projects/kognitive/edge-proxy/edge_proxy/messages.pyr   r      sF    JK#MED%N#MI H+ID#Mr+   r   c                       e Zd ZdZdZdZdZdZy)	NavStatusaccepted
navigatingarrivedfailed	cancelledN)r   r   r   ACCEPTED
NAVIGATINGARRIVEDFAILED	CANCELLEDr*   r+   r,   r.   r.   #   s    HJGFIr+   r.   c                       e Zd ZdZdZdZdZdZy)NavErrorCodeNAV_BLOCKEDNAV_TIMEOUTNAV_LOCALIZATION_LOSTNAV_INVALID_GOALNAV_WAYPOINT_NOT_FOUNDN)r   r   r   r;   r<   r=   r>   r?   r*   r+   r,   r:   r:   +   s    KK3)5r+   r:   c                      e Zd ZdZdZdZy)SpeedslownormalfastN)r   r   r   SLOWNORMALFASTr*   r+   r,   rA   rA   3   s    DFDr+   rA   c                      e Zd ZdZdZdZy)GoalTypewaypointposerelativeN)r   r   r   WAYPOINTPOSERELATIVEr*   r+   r,   rI   rI   9   s    HDHr+   rI   c                      e Zd ZdZdZdZdZy)RelativeDirectionforwardbackwardleftrightN)r   r   r   FORWARDBACKWARDLEFTRIGHTr*   r+   r,   rQ   rQ   ?   s    GHDEr+   rQ   c                  ,   e Zd ZU ej                  Zded<   dZded<   dZded<   e	j                  Zded<   dd	Zdd
Zede	j                  fdd       Zedde	j                  f	 	 	 	 	 	 	 	 	 	 	 dd       Zede	j"                  f	 	 	 	 	 	 	 	 	 dd       Zy)NavigateCommandstrtype 
request_idNDict[str, Any]goalspeedc                ,    | j                   i | _         y y N)ra   selfs    r,   __post_init__zNavigateCommand.__post_init__R   s    99DI r+   c                `    | j                   | j                  | j                  | j                  dS )Nr]   r_   ra   rb   ri   re   s    r,   to_dictzNavigateCommand.to_dictV   s(    II//IIZZ	
 	
r+   c                X     | t         j                  |t        j                  |d|      S )N)r]   nameri   )r   r%   rI   rM   )clsrl   r_   rb   s       r,   to_waypointzNavigateCommand.to_waypoint^   s,    %%!"++T:	
 	
r+           c           	     \     | t         j                  |t        j                  |||d|      S )N)r]   xythetari   )r   r%   rI   rN   )rm   rq   rr   rs   r_   rb   s         r,   to_posezNavigateCommand.to_poseg   s0     %%!"--aa%H	
 	
r+   c                Z     | t         j                  |t        j                  ||d|      S )N)r]   	directiondistanceri   )r   r%   rI   rO   )rm   rv   rw   r_   rb   s        r,   to_relativezNavigateCommand.to_relativew   s1     %%!"++)QYZ	
 	
r+   returnNonerz   r`   )rl   r\   r_   r\   rb   r\   rz   'NavigateCommand')rq   floatrr   r~   rs   r~   r_   r\   rb   r\   rz   r}   )
rv   r\   rw   r~   r_   r\   rb   r\   rz   r}   )r   r   r   r   r%   r]   __annotations__r_   ra   rA   rF   rb   rg   rj   classmethodrn   rt   rE   rx   r*   r+   r,   r[   r[   K   s   $$D#$JD.E3
 68u|| 
 
 
 \\

 
 	

 
 
 

 
 
 ZZ

 
 	

 
 

 
r+   r[   c                  T    e Zd ZU ej                  Zded<   dZded<   dZded<   ddZ	y)	CancelNavigationCommandr\   r]   r^   r_   reasonc                J    | j                   | j                  | j                  dS )Nr]   r_   r   r   re   s    r,   rj   zCancelNavigationCommand.to_dict   s!    II//kk
 	
r+   Nr|   )
r   r   r   r   r&   r]   r   r_   r   rj   r*   r+   r,   r   r      s+    --D#-JFC
r+   r   c                  F    e Zd ZU ej                  Zded<   dZded<   ddZy)GetStateCommandr\   r]   r^   r_   c                4    | j                   | j                  dS Nr]   r_   r   re   s    r,   rj   zGetStateCommand.to_dict       		AAr+   Nr|   )	r   r   r   r   r'   r]   r   r_   rj   r*   r+   r,   r   r      s"    %%D#%JBr+   r   c                  8    e Zd ZU ej                  Zded<   ddZy)PingMessager\   r]   c                    d| j                   iS )Nr]   )r]   re   s    r,   rj   zPingMessage.to_dict   s    		""r+   Nr|   )r   r   r   r   r(   r]   r   rj   r*   r+   r,   r   r      s      D# #r+   r   c                  F    e Zd ZU ej                  Zded<   dZded<   ddZy)CaptureFrameCommandr\   r]   r^   r_   c                4    | j                   | j                  dS r   r   re   s    r,   rj   zCaptureFrameCommand.to_dict   r   r+   Nr|   )	r   r   r   r   r)   r]   r   r_   rj   r*   r+   r,   r   r      s"    ))D#)JBr+   r   c                      e Zd ZU ej                  Zded<   dZded<   dZded<   dZ	ded<   dZ
ded	<   d
Zded<   d
Zded<   d
Zded<   ddZedd       Zy
)NavStatusMessager\   r]   r^   r_   statusdestinationro   r~   progressNzOptional[float]eta_secOptional[str]r   
error_codec                   | j                   | j                  | j                  | j                  | j                  d}| j
                  | j
                  |d<   | j                  | j                  |d<   | j                  | j                  |d<   |S )N)r]   r_   r   r   r   r   r   r   r]   r_   r   r   r   r   r   r   rf   payloads     r,   rj   zNavStatusMessage.to_dict   s}    II//kk++#
 <<#!%GI;;" $GH??&$(OOGL!r+   c                J    | |j                  dt        j                        |j                  dd      |j                  dd      |j                  dd      t        |j                  dd            |j                  d      |j                  d	      |j                  d
            S )Nr]   r_   r^   r   r   r   ro   r   r   r   r   )getr   r   r~   rm   datas     r,   	from_dictzNavStatusMessage.from_dict   s    &+"8"89xxb188Hb)3488J45HHY'88H%xx-	
 		
r+   r|   )r   r`   rz   z'NavStatusMessage')r   r   r   r   r   r]   r   r_   r   r   r   r   r   r   rj   r   r   r*   r+   r,   r   r      sq    &&D#&JFCKHe#G_# FM  $J$  

 

r+   r   c                  R    e Zd ZU dZded<   dZded<   dZded<   d	dZed
d       Z	y)Posero   r~   rq   rr   rs   c                J    | j                   | j                  | j                  dS )Nrq   rr   rs   r   re   s    r,   rj   zPose.to_dict   s    VV$&&4::>>r+   c           
          | t        |j                  dd            t        |j                  dd            t        |j                  dd                  S )Nrq   ro   rr   rs   r   )r~   r   r   s     r,   r   zPose.from_dict   sH    DHHS#&'DHHS#&'#./
 	
r+   Nr|   )r   r`   rz   z'Pose')
r   r   r   rq   r   rr   rs   rj   r   r   r*   r+   r,   r   r      s7    AuNAuNE5? 
 
r+   r   c                  D    e Zd ZU dZded<   dZded<   d
dZedd       Zy	)Batteryd   intlevelFboolchargingc                4    | j                   | j                  dS )Nr   r   r   re   s    r,   rj   zBattery.to_dict   s    ??r+   c           	     z     | t        |j                  dd            t        |j                  dd                  S )Nr   r   r   Fr   )r   r   r   r   s     r,   r   zBattery.from_dict   s0    TXXgs34tDHHZY^D_?`aar+   Nr|   )r   r`   rz   z	'Battery')	r   r   r   r   r   r   rj   r   r   r*   r+   r,   r   r      s2    E3Hd@ b br+   r   c                      e Zd ZU ej                  Zded<   dZded<   dZded<   d	Z	ded
<   dZ
ded<   d	Zded<   dZded<   d	Zded<   ddZddZedd       Zy)
RobotStater\   r]   ro   r~   	timestampNr   rK   r^   locationr   battery	nav_statenav_progressnav_destinationc                r    | j                   t               | _         | j                  t               | _        y y rd   )rK   r   r   r   re   s    r,   rg   zRobotState.__post_init__  s-    99DI<<"9DL  r+   c           	         | j                   | j                  | j                  j                         | j                  | j
                  j                         | j                  | j                  | j                  dS )Nr]   r   rK   r   r   r   r   r   )	r]   r   rK   rj   r   r   r   r   r   re   s    r,   rj   zRobotState.to_dict  sZ    IIII%%'||++- --#33	
 		
r+   c                    | |j                  dt        j                        t        |j                  dd            t        j                  |j                  di             |j                  dd      t        j                  |j                  di             |j                  dd      t        |j                  d	d            |j                  d
d            S )Nr]   r   ro   rK   r   r^   r   r   r   r   r   )r   r   r   r~   r   r   r   r   s     r,   r   zRobotState.from_dict  s    &+"9"9:DHH[#67 45XXj"-%%dhhy"&=>hh{B/txx<= HH%6;	
 		
r+   ry   r|   )r   r`   rz   z'RobotState')r   r   r   r   r   r]   r   r   rK   r   r   r   r   r   rg   rj   r   r   r*   r+   r,   r   r      sv    ''D#'IuD$HcGWIsL%OS%

 

 

r+   r   c                  `    e Zd ZU dZded<   dZded<   dZded<   dZded<   dd	Ze	dd
       Z
y)Waypointr^   r\   rl   ro   r~   rq   rr   rs   c                `    | j                   | j                  | j                  | j                  dS )Nrl   rq   rr   rs   r   re   s    r,   rj   zWaypoint.to_dict.  s!    		TVVdjjQQr+   c                     | |j                  dd      t        |j                  dd            t        |j                  dd            t        |j                  dd                  S )Nrl   r^   rq   ro   rr   rs   r   )r   r~   r   s     r,   r   zWaypoint.from_dict1  sV    &"%DHHS#&'DHHS#&'#./	
 	
r+   Nr|   )r   r`   rz   z
'Waypoint')r   r   r   rl   r   rq   rr   rs   rj   r   r   r*   r+   r,   r   r   '  sA    D#NAuNAuNE5R 
 
r+   r   c                  `    e Zd ZU ej                  Zded<   dZded<   d	dZd
dZ	e
dd       Zy)WaypointListMessager\   r]   NzList[Waypoint]	waypointsc                ,    | j                   g | _         y y rd   )r   re   s    r,   rg   z!WaypointListMessage.__post_init__@  s    >>!DN "r+   c                v    | j                   | j                  D cg c]  }|j                          c}dS c c}w )Nr]   r   )r]   r   rj   )rf   wps     r,   rj   zWaypointListMessage.to_dictD  s.    II15@2"**,@
 	
@s   6c                    |j                  dg       }|D cg c]  }t        j                  |       }} | |j                  dt        j                        |      S c c}w )Nr   r]   r   )r   r   r   r   r   )rm   r   waypoints_datar   r   s        r,   r   zWaypointListMessage.from_dictJ  sT    +r26DEX''+E	E)B)BCyYY Fs   Ary   r|   )r   r`   rz   z'WaypointListMessage')r   r   r   r   r   r]   r   r   rg   rj   r   r   r*   r+   r,   r   r   ;  s<    ))D#) $I~$ 
 Z Zr+   r   c                  t    e Zd ZU ej                  Zded<   dZded<   dZded<   dZ	ded<   d
dZ
edd       Zy	)ErrorMessager\   r]   r^   r_   r   messagec                `    | j                   | j                  | j                  | j                  dS )Nr]   r_   r   r   r   re   s    r,   rj   zErrorMessage.to_dictX  s(    II//ZZ||	
 	
r+   c           	          | |j                  dt        j                        |j                  dd      |j                  dd      |j                  dd            S )Nr]   r_   r^   r   r   r   )r   r   r    r   s     r,   r   zErrorMessage.from_dict`  sM    &+"3"34xxb1((7B'HHY+	
 	
r+   Nr|   )r   r`   rz   z'ErrorMessage')r   r   r   r   r    r]   r   r_   r   r   rj   r   r   r*   r+   r,   r   r   Q  sH    !!D#!JE3OGS
 
 
r+   r   c                  X    e Zd ZU ej                  Zded<   dZded<   ddZe	d	d       Z
y)
PongMessager\   r]   r^   statec                4    | j                   | j                  dS )Nr]   r   r   re   s    r,   rj   zPongMessage.to_dicto  s    		DJJ77r+   c                r     | |j                  dt        j                        |j                  dd            S )Nr]   r   r^   r   )r   r   r!   r   s     r,   r   zPongMessage.from_dictr  s,    )9)9:$((7TVBWXXr+   Nr|   )r   r`   rz   z'PongMessage')r   r   r   r   r!   r]   r   r   rj   r   r   r*   r+   r,   r   r   j  s6      D# E3O8 Y Yr+   r   c                  t    e Zd ZU ej                  Zded<   dZded<   dZded<   dZ	ded<   dd	Z
edd
       Zy)FrameResponseMessager\   r]   r^   r_   Nr   jpeg_b64r   c                    | j                   | j                  d}| j                  | j                  |d<   | j                  | j                  |d<   |S )Nr   r   r   r]   r_   r   r   r   s     r,   rj   zFrameResponseMessage.to_dict~  sI    +/99DOO"T==$"&--GJ::!#zzGGr+   c                     | |j                  dt        j                        |j                  dd      |j                  d      |j                  d            S )Nr]   r_   r^   r   r   r   )r   r   r"   r   s     r,   r   zFrameResponseMessage.from_dict  sI    &+"<"<=xxb1XXj)((7#	
 	
r+   r|   )r   r`   rz   z'FrameResponseMessage')r   r   r   r   r"   r]   r   r_   r   r   rj   r   r   r*   r+   r,   r   r   w  sI    **D#*J"Hm"E= 
 
r+   r   c                  |    e Zd ZU ej                  Zded<   dZded<   dZded<   dZ	d	ed
<   ddZ
ddZedd       Zy)FRDetectionsMessager\   r]   NzList[Dict[str, Any]]
detectionsro   r~   r   zOptional[Dict[str, Any]]metricsc                ,    | j                   g | _         y y rd   )r   re   s    r,   rg   z!FRDetectionsMessage.__post_init__  s    ??" DO #r+   c                    | j                   | j                  | j                  d}| j                  | j                  |d<   |S )N)r]   r   r   r   r]   r   r   r   r   s     r,   rj   zFRDetectionsMessage.to_dict  s=    II//#

 <<#!%GIr+   c           
          | |j                  dt        j                        |j                  dg       t        |j                  dd            |j                  d            S )Nr]   r   r   ro   r   r   )r   r   r#   r~   r   s     r,   r   zFRDetectionsMessage.from_dict  sP    &+";";<xxb1DHH[#67HHY'	
 	
r+   ry   r|   )r   r`   rz   z'FRDetectionsMessage')r   r   r   r   r#   r]   r   r   r   r   rg   rj   r   r   r*   r+   r,   r   r     sP    ))D#)'+J$+Iu(,G%,! 
 
r+   r   c                      e Zd ZU ej                  Zded<   dZded<   dZded<   dZ	ded<   dZ
ded<   dZd	ed
<   dZded<   dZded<   ddZddZedd       Zy)EventLogMessager\   r]   r^   event_id
event_typer_   r   ro   r~   r   Fr   replayNr`   r   c                ,    | j                   i | _         y y rd   )r   re   s    r,   rg   zEventLogMessage.__post_init__  s    <<DL  r+   c           	         | j                   | j                  | j                  | j                  | j                  | j
                  | j                  | j                  dS )Nr]   r   r   r_   r   r   r   r   r   re   s    r,   rj   zEventLogMessage.to_dict  sD    II////kkkk||	
 		
r+   c                b    | |j                  dt        j                        |j                  dd      |j                  dd      |j                  dd      |j                  dd      t        |j                  dd            t	        |j                  d	d
            |j                  di             S )Nr]   r   r^   r   r_   r   r   ro   r   Fr   r   )r   r   r$   r~   r   r   s     r,   r   zEventLogMessage.from_dict  s    &+"7"78XXj"-xxb1xxb188Hb)DHH[#67512HHY+	
 		
r+   ry   r|   )r   r`   rz   z'EventLogMessage')r   r   r   r   r$   r]   r   r   r   r_   r   r   r   r   rg   rj   r   r   r*   r+   r,   r   r     sv    %%D#%HcJJFCIuFD"G^"

 

 

r+   r   c                   | j                  d      }|st        d      |}|t        j                  k(  rt        j                  |       S |t        j                  k(  rt        j                  |       S |t        j                  k(  rt        j                  |       S |t        j                  k(  rt        j                  |       S |t        j                  k(  rt        j                  |       S |t        j                  k(  rt        j                  |       S |t        j                   k(  rt"        j                  |       S |t        j$                  k(  rt&        j                  |       S y )Nr]   zMissing 'type' field in message)r   
ValueErrorr   r   r   r   r   r   r   r   r    r   r!   r   r"   r   r#   r   r$   r   )r   msg_type_strmsg_types      r,   parse_edge_messager     s   88F#L:;;H;)))))$//;***##D));,,,",,T22;$$$%%d++;###$$T**;---#--d33;,,,",,T22;(((((..r+   N)r   r`   rz   zOptional[IncomingMessage])&__doc__
__future__r   dataclassesr   enumr   typingr   r   r   r	   r
   r\   r   r.   r:   rA   rI   rQ   r[   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   IncomingMessager   r*   r+   r,   <module>r      s@   # !  3 3$#t $&T 63 6C sD T  8
 8
 8
v 

 

 

 B B B # # # B B B %
 %
 %
P 
 
 
" 	b 	b 	b '
 '
 '
T 
 
 
& Z Z Z* 
 
 
0 	Y 	Y 	Y 
 
 
0 
 
 
< %
 %
 %
P 	r+   