@@ -110,14 +110,13 @@ private void RegisterEvents() {
110110 {
111111 JsonUtils . JsonDataParseResult < T > dataResult = JsonUtils . ParseData < T > ( inputMessage . Data ? . GetRawText ( ) ) ;
112112 var data = dataResult . Data ;
113- if ( data == null )
114- {
115- var errorMessage = $ "Input was invalid, see Data as a reference. Error: { dataResult . Message } ";
116- _ = _server . SendMessageToSingle (
117- session ,
118- JsonSerializer . Serialize ( OutputMessage . CreateError ( errorMessage , inputMessage , dataResult . Empty ) , JsonUtils . GetOptions ( ) )
119- ) ;
120- }
113+ if ( data != null ) return data ;
114+
115+ var errorMessage = $ "Input was invalid, see Data as a reference. Error: { dataResult . Message } ";
116+ _ = _server . SendMessageToSingle (
117+ session ,
118+ JsonSerializer . Serialize ( OutputMessage . CreateError ( errorMessage , inputMessage , dataResult . Empty ) , JsonUtils . GetOptions ( ) )
119+ ) ;
121120 return data ;
122121 }
123122
@@ -136,7 +135,7 @@ private void PostNotification(WebSocketSession session, InputMessage inputMessag
136135
137136 // Image
138137 Debug . WriteLine ( $ "Overlay handle { overlayHandle } for '{ data . Title } '") ;
139- Debug . WriteLine ( $ "Image Hash: { CreateMd5 ( data . ImageData ) } ") ;
138+ Debug . WriteLine ( $ "Image Hash: { MiscUtils . HashMd5 ( data . ImageData ) } ") ;
140139 var bitmap = new NotificationBitmap_t ( ) ;
141140 try
142141 {
@@ -194,27 +193,76 @@ private void PostImageNotification(WebSocketSession session, InputMessage inputM
194193 overlay = new Overlay ( $ "OpenVROverlayPipe[{ channel } ]", channel ) ;
195194 if ( ! overlay . IsInitialized ( ) ) return ;
196195
197- overlay . DoneEvent += ( _ , args ) =>
196+ overlay . DoneEvent += ( _ , doneEvent ) =>
198197 {
199- OnOverlayDoneEvent ( args ) ;
198+ OnOverlayDoneEvent ( doneEvent ) ;
199+ } ;
200+ overlay . OverlayEvent += ( _ , overlayEvent ) =>
201+ {
202+ OnOverlayEvent ( overlayEvent ) ;
200203 } ;
201204 Session . Overlays . TryAdd ( channel , overlay ) ;
202205 }
203206 if ( overlay . IsInitialized ( ) ) overlay . EnqueueNotification ( sessionId , data , nonce ) ;
204207 }
205208
206- private void OnOverlayDoneEvent ( string [ ] args )
209+ private void OnOverlayDoneEvent ( OverlayDone doneEvent )
207210 {
208- if ( args . Length != 3 ) return ;
209-
210- var sessionId = args [ 0 ] ;
211- var nonce = args [ 1 ] ;
212- var error = args [ 2 ] ;
213- var sessionExists = Session . Sessions . TryGetValue ( sessionId , out var session ) ;
211+ var sessionExists = Session . Sessions . TryGetValue ( doneEvent . SessionId , out var session ) ;
214212 if ( sessionExists ) _ = _server . SendMessageToSingleOrAll ( session , JsonSerializer . Serialize (
215- error . Length > 0
216- ? OutputMessage . CreateError ( error , null , nonce , InputMessageKeyEnum . EnqueueOverlay )
217- : OutputMessage . CreateResult ( "OK" , null , nonce , InputMessageKeyEnum . EnqueueOverlay ) , JsonUtils . GetOptions ( ) )
213+ doneEvent . Error . Length > 0
214+ ? OutputMessage . CreateError ( doneEvent . Error , null , doneEvent . Nonce , doneEvent . Channel , InputMessageKeyEnum . EnqueueOverlay )
215+ : OutputMessage . CreateResult ( "OK" , null , doneEvent . Nonce , doneEvent . Channel , InputMessageKeyEnum . EnqueueOverlay ) , JsonUtils . GetOptions ( ) )
216+ ) ;
217+ }
218+
219+ private void OnOverlayEvent ( OverlayEvent overlayEvent )
220+ {
221+ var sessionExists = Session . Sessions . TryGetValue ( overlayEvent . SessionId , out var session ) ;
222+ if ( ! sessionExists ) return ;
223+
224+ var typeEnum = ( EVREventType ) overlayEvent . Event . eventType ;
225+ var mouse = overlayEvent . Event . data . mouse ;
226+ var scroll = overlayEvent . Event . data . scroll ;
227+ var touchpad = overlayEvent . Event . data . touchPadMove ;
228+ dynamic ? data ;
229+ switch ( typeEnum )
230+ {
231+ case EVREventType . VREvent_MouseMove :
232+ data = new OutputDataPosition ( mouse . x , mouse . y ) ;
233+ break ;
234+ case EVREventType . VREvent_MouseButtonDown :
235+ case EVREventType . VREvent_MouseButtonUp :
236+ var buttonEnum = ( EVRMouseButton ) mouse . button ;
237+ data = new OutputDataButton ( buttonEnum ) ;
238+ break ;
239+ case EVREventType . VREvent_ScrollSmooth :
240+ data = new OutputDataPosition ( scroll . xdelta , scroll . ydelta ) ;
241+ break ;
242+ case EVREventType . VREvent_ScrollDiscrete :
243+ data = new OutputDataPosition ( scroll . xdelta , scroll . ydelta ) ;
244+ break ;
245+ case EVREventType . VREvent_TouchPadMove :
246+ data = new OutputDataPosition ( touchpad . fValueXRaw , touchpad . fValueYRaw ) ;
247+ break ;
248+ default :
249+ data = null ;
250+ break ;
251+ }
252+ if ( data == null ) return ;
253+
254+ var eventName = Enum . GetName ( typeof ( EVREventType ) , typeEnum ) ;
255+ if ( eventName == null ) return ;
256+
257+ _ = _server . SendMessageToSingleOrAll ( session , JsonSerializer . Serialize (
258+ OutputMessage . CreateResult (
259+ eventName . Replace ( "VREvent_" , "" ) ,
260+ data ,
261+ overlayEvent . Nonce ,
262+ overlayEvent . Channel ,
263+ InputMessageKeyEnum . OverlayEvent
264+ ) , JsonUtils . GetOptions ( )
265+ )
218266 ) ;
219267 }
220268 #endregion
@@ -274,11 +322,9 @@ private void InitServer(Action<SuperServer.ServerStatus, int> serverStatus)
274322 case InputMessageKeyEnum . None :
275323 break ;
276324 case InputMessageKeyEnum . EnqueueNotification :
277- // TODO: Need to instantiate DATA with CONSTRUCTOR in DATA OBJECTS check OPENVR2WS
278325 if ( session != null ) PostNotification ( session , inputMessage ) ;
279326 break ;
280327 case InputMessageKeyEnum . EnqueueOverlay :
281- // TODO: Need to instantiate DATA with CONSTRUCTOR in DATA OBJECTS check OPENVR2WS
282328 if ( session != null ) PostImageNotification ( session , inputMessage ) ;
283329 break ;
284330 case InputMessageKeyEnum . DismissOverlay :
@@ -315,20 +361,5 @@ public void Shutdown()
315361 _shouldShutDown = true ;
316362 _ = _server . Stop ( ) ;
317363 }
318-
319- private static string CreateMd5 ( string input ) // https://stackoverflow.com/a/24031467
320- {
321- // Use input string to calculate MD5 hash
322- var inputBytes = Encoding . ASCII . GetBytes ( input ) ;
323- var hashBytes = MD5 . HashData ( inputBytes ) ;
324-
325- // Convert the byte array to hexadecimal string
326- var sb = new StringBuilder ( ) ;
327- foreach ( var t in hashBytes )
328- {
329- sb . Append ( t . ToString ( "X2" ) ) ;
330- }
331- return sb . ToString ( ) ;
332- }
333364 }
334365}
0 commit comments