示例#1
0
        /// <summary>
        /// receive an event targeted to this particular player
        /// </summary>
        /// <param name="post"></param>
        static void ListenForMessages()
        {
            _isRunning = true;
            var listener = new ServiceBusListener();

            while (_shouldRun)
            {
                try
                {
                    listener.ListenForMessages();
                }
                catch (WebException ex)
                {
                    // if the server has not created a topic yet for the client then a 404 error will be returned so do not report
                    if (!ex.Message.Contains("The remote server returned an error: (404) Not Found"))
                    {
                        if (OnListenError != null)
                        {
                            OnListenError.Invoke(null, new ErrorEventArgs(ex));
                        }
                    }
                }
                catch (Exception ex)
                {
                    if (OnListenError != null)
                    {
                        OnListenError.Invoke(null, new ErrorEventArgs(ex));
                    }
                }
            }

            _isRunning = false;
        }
示例#2
0
        static void ReadCallBack(IAsyncResult asyncResult)
        {
            try
            {
                // Get the RequestState object from AsyncResult.
                RequestState rs = (RequestState)asyncResult.AsyncState;

                // Retrieve the ResponseStream that was set in RespCallback.
                Stream responseStream = rs.ResponseStream;

                // Read rs.BufferRead to verify that it contains data.
                int read = responseStream.EndRead(asyncResult);
                if (read > 0)
                {
                    // Prepare a Char array buffer for converting to Unicode.
                    Char[] charBuffer = new Char[BUFFER_SIZE];

                    // Convert byte stream to Char array and then to String.
                    // len contains the number of characters converted to Unicode.
                    rs.StreamDecode.GetChars(rs.BufferRead, 0, read, charBuffer, 0);

                    // Append the recently read data to the RequestData stringbuilder
                    // object contained in RequestState.
                    rs.RequestData.Append(
                        Encoding.ASCII.GetString(rs.BufferRead, 0, read));

                    // Continue reading data until
                    // responseStream.EndRead returns –1.
                    responseStream.BeginRead(rs.BufferRead, 0, BUFFER_SIZE, new AsyncCallback(ReadCallBack), rs);
                }
                else
                {
                    if (rs.RequestData.Length > 0)
                    {
                        HandlePacket(rs.RequestData.ToString());
                    }
                    // Close down the response stream.
                    responseStream.Close();
                    // Set the ManualResetEvent so the main thread can exit.
                    allDone.Set();
                }
            }
            catch (Exception ex)
            {
                if (OnListenError != null)
                {
                    OnListenError.Invoke(null, new ErrorEventArgs(ex));
                }
            }

            return;
        }
示例#3
0
        public void ListenForMessages()
        {
            if (_isRunning != null && !_isRunning.IsCompleted)
            {
                return;
            }

            var address = new Uri(CommonConfiguration.Instance.BackboneConfiguration.GetServiceSubscriptionsAddress(Queue, CommonConfiguration.Instance.PlayerId));

            try
            {
                WebRequest request = WebRequest.Create(address);

                if (_sasProvider == null)
                {
                    _sasProvider = new SharedAccessSignatureTokenProvider(CommonConfiguration.Instance.BackboneConfiguration.IssuerName,
                                                                          CommonConfiguration.Instance.BackboneConfiguration.IssuerSecret,
                                                                          new TimeSpan(1, 0, 0));
                }

                var token = _sasProvider.GetToken(CommonConfiguration.Instance.BackboneConfiguration.GetRealm(), "POST", new TimeSpan(1, 0, 0));
                request.Headers[HttpRequestHeader.Authorization] = token.TokenValue;
                request.Method = "DELETE";
                RequestState rs = new RequestState();
                rs.Request = request;

                _isRunning = request.BeginGetResponse(new AsyncCallback(RespCallback), rs);
            }
            catch (WebException ex)
            {
                // if the server has not created a topic yet for the client then a 404 error will be returned so do not report
                if (!ex.Message.Contains("The remote server returned an error: (404) Not Found"))
                {
                    if (OnListenError != null)
                    {
                        OnListenError.Invoke(this, new System.IO.ErrorEventArgs(ex));
                    }
                }
            }
            catch (Exception ex)
            {
                if (OnListenError != null)
                {
                    OnListenError.Invoke(this, new System.IO.ErrorEventArgs(ex));
                }
            }
        }
示例#4
0
        private static void RespCallback(IAsyncResult ar)
        {
            try
            {
                // Get the RequestState object from the async result.
                RequestState rs = (RequestState)ar.AsyncState;

                // Get the WebRequest from RequestState.
                WebRequest req = rs.Request;

                // Call EndGetResponse, which produces the WebResponse object
                //  that came from the request issued above.
                WebResponse resp = req.EndGetResponse(ar);

                //  Start reading data from the response stream.
                Stream ResponseStream = resp.GetResponseStream();

                // Store the response stream in RequestState to read
                // the stream asynchronously.
                rs.ResponseStream = ResponseStream;

                //  Pass rs.BufferRead to BeginRead. Read data into rs.BufferRead
                IAsyncResult iarRead = ResponseStream.BeginRead(rs.BufferRead, 0, BUFFER_SIZE, new AsyncCallback(ReadCallBack), rs);

                if (iarRead.IsCompleted != true)
                {
                    Debug.LogWarning("ServiceBusListener.RespCallback() invalid read.");
                }
            }
            catch (Exception ex)
            {
                if (OnListenError != null)
                {
                    OnListenError.Invoke(null, new ErrorEventArgs(ex));
                }
            }
        }