/// <summary> /// Client code don't use it if AsyncWebSocketRequests.Instance.Start() is not called which will use a bunch of threads to /// send websocket requests asynchronously /// </summary> /// <param name="webSocketRequest"></param> /// <returns></returns> public object AsyncSendRequest(WebSocketRequest webSocketRequest) { var syncRequest = new WebSocketSyncRequest(webSocketRequest); WebSocketNotificationHandler.InitWaitEvent(syncRequest); AsyncWebSocketRequests.Instance.Add(syncRequest.Request); return WebSocketNotificationHandler.WaitResponse(syncRequest); }
public static object SendRequestReturnResult(WebSocketClient handler, WebSocketRequest request) { var syncRequest = new WebSocketSyncRequest(request); WebSocketNotificationHandler.InitWaitEvent(syncRequest); object result = null; if (handler.SendRequest(request)) { result = WebSocketNotificationHandler.WaitResponse(syncRequest); } return result; }
/// <summary> /// Wait the response for syncRequest /// </summary> /// <param name="syncRequest"></param> /// <returns></returns> public static object WaitResponse(WebSocketSyncRequest syncRequest) { TimeSpan timeoutSpan = NotifyTimeout; //For PutFileProxyRequest, because it's an internal request which is only processed in ESS client // to make sure the block of file bytes will be sent to same child ESS. If one video file is a little // huge, it may spend more than 1min(default), so we set the timeout time to be 30min which should be // enough to send a video file. if (syncRequest.Request.RequestType == WebSocketRequestType.PutFileProxyRequest) { timeoutSpan = TimeSpan.FromMinutes(30); } if (!syncRequest.WaitEvent.WaitOne(timeoutSpan)) { RequestsOnNotification.Remove(syncRequest.Request.RequestId); Console.WriteLine("Timeout for this WebSocket request " + syncRequest.Request); return false; } object status; if ((status = Responses.Get(syncRequest.Request.RequestId)) != null) { Responses.Remove(syncRequest.Request.RequestId); } return status; }
/// <summary> /// Add syncRequest into the notification dictionary /// </summary> /// <param name="syncRequest"></param> public static void InitWaitEvent(WebSocketSyncRequest syncRequest) { RequestsOnNotification.Set(syncRequest.Request.RequestId, syncRequest.WaitEvent); }