예제 #1
0
        /// <summary>
        /// background worker getting request from the blocking queue and send it out.
        /// </summary>
        private async void SendMessageWorker()
        {
            Debug.WriteLine("Entering OODSS Send Message Loop");
            while (_isRunning && !_cancellationTokenSource.Token.IsCancellationRequested)
            {
                try
                {
                    //Hold the thread here until it receives a request to be processed.
                    RequestQueueObject q = _requestQueue.Take(_cancellationTokenSource.Token);

                    // push pull
                    Debug.WriteLine("Trying to send the string: {0}", q.Uid);

                    //SendDone = new ManualResetEventSlim(false);
                    await CreatePacketFromMessageAndSend(q);

                    //SendDone.Wait(_cancellationTokenSource.Token);

                    Debug.WriteLine("---sent Request: {0}", q.Uid);
                }
                catch (OperationCanceledException e)
                {
                    Debug.WriteLine("SendWorker: The operation was cancelled." + e.CancellationToken);
                    break;
                }
                catch (Exception e)
                {
                    Debug.WriteLine("Caught Exception :\n " + e.StackTrace);
                }
            }
        }
예제 #2
0
        /// <summary>
        /// prepare the message and send it to the websocket server
        /// </summary>
        /// <param name="requestObject"></param>
        private async Task CreatePacketFromMessageAndSend(RequestQueueObject requestObject)
        {
            long   uid           = requestObject.Uid;
            string requestString = GenerateStringFromRequest(requestObject.RequestMessage);

            byte[] uidBytes     = BitConverter.GetBytes(uid);
            byte[] messageBytes = Encoding.UTF8.GetBytes(requestString);
            byte[] outMessage   = new byte[uidBytes.Length + messageBytes.Length];
            Buffer.BlockCopy(uidBytes, 0, outMessage, 0, uidBytes.Length);
            Buffer.BlockCopy(messageBytes, 0, outMessage, uidBytes.Length, messageBytes.Length);
            await OODSSPlatformSpecifics.Get().SendMessageFromWebSocketClientAsync(_webSocketClient, outMessage);
        }
예제 #3
0
        /// <summary>
        /// Send Request Message asynchronously and get response
        /// </summary>
        /// <param name="request">request message</param>
        /// <returns>response message</returns>
        public async Task <ResponseMessage> RequestAsync(RequestMessage request)
        {
            TaskCompletionSource <ResponseMessage> tcs = new TaskCompletionSource <ResponseMessage>();
            long currentMessageUid = GenerateUid();

            RequestQueueObject queueRequest = new RequestQueueObject(request, currentMessageUid, tcs);

            _pendingRequests.Put(currentMessageUid, queueRequest);
            _requestQueue.Add(queueRequest);

            return(await tcs.Task);
        }
 /// <summary>
 /// prepare the message and send it to the websocket server
 /// </summary>
 /// <param name="requestObject"></param>
 private async Task CreatePacketFromMessageAndSend(RequestQueueObject requestObject)
 {
     long uid = requestObject.Uid;
     string requestString = GenerateStringFromRequest(requestObject.RequestMessage);
     byte[] uidBytes = BitConverter.GetBytes(uid);
     byte[] messageBytes = Encoding.UTF8.GetBytes(requestString);
     byte[] outMessage = new byte[uidBytes.Length + messageBytes.Length];
     Buffer.BlockCopy(uidBytes, 0, outMessage, 0, uidBytes.Length);
     Buffer.BlockCopy(messageBytes, 0, outMessage, uidBytes.Length, messageBytes.Length);
     await OODSSPlatformSpecifics.Get().SendMessageFromWebSocketClientAsync(_webSocketClient, outMessage);
 }
        /// <summary>
        /// Send Request Message asynchronously and get response
        /// </summary>
        /// <param name="request">request message</param>
        /// <returns>response message</returns>
        public async Task<ResponseMessage> RequestAsync(RequestMessage request)
        {
            TaskCompletionSource<ResponseMessage> tcs = new TaskCompletionSource<ResponseMessage>();
            long currentMessageUid = GenerateUid();

            RequestQueueObject queueRequest = new RequestQueueObject(request, currentMessageUid, tcs);

            _pendingRequests.Put(currentMessageUid, queueRequest);
            _requestQueue.Add(queueRequest);

            return await tcs.Task;
        }