/// <summary> /// The on message. /// </summary> /// <param name="connectionId"> /// The connection id. /// </param> /// <param name="data"> /// The data. /// </param> /// <param name="dataSize"> /// The data size. /// </param> public void OnMessage(int connectionId, IntPtr data, long dataSize) { Task.Run(() => { IntPtr tempPtr = IntPtr.Zero; try { var managedArray = new byte[dataSize]; Marshal.Copy(data, managedArray, 0, (int)dataSize); tempPtr = Marshal.AllocHGlobal(managedArray.Length); Marshal.Copy(managedArray, 0, tempPtr, managedArray.Length); var requestString = Encoding.UTF8.GetString(managedArray); var requestInfo = new RequestInfo(requestString); switch (requestInfo.Type) { case MessageType.Echo: WebsocketMessageSender.Send(connectionId, requestInfo.Data); break; case MessageType.TargetRecepient: WebsocketMessageSender.Send(requestInfo.TargetConnectionId, requestInfo.Data); break; case MessageType.Broadcast: WebsocketMessageSender.Broadcast(connectionId, requestInfo.Data); break; case MessageType.ControllerAction: var jsonData = JsonMapper.ToObject <JsonData>(requestString); var request = new ChromelyRequest(jsonData); var response = RequestTaskRunner.Run(request); WebsocketMessageSender.Send(connectionId, response); break; default: WebsocketMessageSender.Send(connectionId, requestInfo.Data); break; } } catch (Exception exception) { Log.Error(exception); } finally { // Free the unmanaged memory. Marshal.FreeHGlobal(tempPtr); } }); }
/// <summary> /// The broadcast. /// </summary> /// <param name="connectionId"> /// The connection id. /// </param> /// <param name="data"> /// The data. /// </param> public void Broadcast(int connectionId, string data) { WebsocketMessageSender.Broadcast(connectionId, data); }
/// <summary> /// The broadcast. /// </summary> /// <param name="connectionId"> /// The connection id. /// </param> /// <param name="response"> /// The response. /// </param> public void Broadcast(int connectionId, ChromelyResponse response) { WebsocketMessageSender.Broadcast(connectionId, response); }
/// <summary> /// The broadcast. /// </summary> /// <param name="connectionId"> /// The connection id. /// </param> /// <param name="data"> /// The data. /// </param> /// <param name="dataSize"> /// The data size. /// </param> public void Broadcast(int connectionId, IntPtr data, long dataSize) { WebsocketMessageSender.Broadcast(connectionId, data, dataSize); }