Ejemplo n.º 1
0
 private void SendMessage(object message)
 {
     using (EneterTrace.Entering())
     {
         byte[] aMessage = (byte[])message;
         HttpWebClient.Post(myUri, aMessage);
     }
 }
Ejemplo n.º 2
0
        private void DoPolling()
        {
            using (EneterTrace.Entering())
            {
                myIsListeningToResponses = true;
                myListeningToResponsesStartedEvent.Set();

                try
                {
                    // Create URI for polling.
                    string aParameters = "?id=" + myResponseReceiverId;
                    Uri    aPollingUri = new Uri(myUri, aParameters);

                    bool aServiceClosedConnection = false;
                    while (!myStopReceivingRequestedFlag && !aServiceClosedConnection)
                    {
                        myStopPollingWaitingEvent.WaitOne(myPollingFrequencyMiliseconds);

                        if (!myStopReceivingRequestedFlag)
                        {
                            // Send poll request to get messages from the service.
                            WebResponse anHttpResponse = HttpWebClient.Get(aPollingUri);

                            // Convert the response to the fast memory stream
                            using (MemoryStream aBufferedResponse = new MemoryStream())
                            {
                                Stream aResponseStream = anHttpResponse.GetResponseStream();

                                // Write the incoming response to the fast memory stream.
                                StreamUtil.ReadToEnd(aResponseStream, aBufferedResponse);
                                aBufferedResponse.Position = 0;

                                // The response can contain more messages.
                                while (!myStopReceivingRequestedFlag && !aServiceClosedConnection && aBufferedResponse.Position < aBufferedResponse.Length)
                                {
                                    Action <MessageContext> aResponseHandler = myResponseMessageHandler;

                                    ProtocolMessage aProtocolMessage = myProtocolFormatter.DecodeMessage((Stream)aBufferedResponse);
                                    MessageContext  aMessageContext  = new MessageContext(aProtocolMessage, myUri.Host);

                                    if (aProtocolMessage != null && aProtocolMessage.MessageType == EProtocolMessageType.CloseConnectionRequest)
                                    {
                                        aServiceClosedConnection = true;
                                    }

                                    try
                                    {
                                        if (aResponseHandler != null)
                                        {
                                            aResponseHandler(aMessageContext);
                                        }
                                    }
                                    catch (Exception err)
                                    {
                                        EneterTrace.Warning(TracedObject + ErrorHandler.DetectedException, err);
                                    }
                                }
                            }
                        }
                    }
                }
                catch (WebException err)
                {
                    string anErrorStatus = err.Status.ToString();
                    EneterTrace.Error(TracedObject + "detected an error during listening to response messages. Error status: '" + anErrorStatus + "'. ", err);
                }
                catch (Exception err)
                {
                    EneterTrace.Error(TracedObject + ErrorHandler.FailedInListeningLoop, err);
                }

                myIsListeningToResponses = false;
                myListeningToResponsesStartedEvent.Reset();

                // If the connection was closed from the service.
                if (!myStopReceivingRequestedFlag)
                {
                    Action <MessageContext> aResponseHandler = myResponseMessageHandler;
                    CleanConnection(false);

                    try
                    {
                        aResponseHandler(null);
                    }
                    catch (Exception err)
                    {
                        EneterTrace.Warning(TracedObject + ErrorHandler.DetectedException, err);
                    }
                }
            }
        }