コード例 #1
1
ファイル: PipeServerLib.cs プロジェクト: Helen1987/edu
		private static IEnumerator<Int32> PipeServerAsyncEnumerator(AsyncEnumerator ae) {
			// Each server object performs asynchronous operation on this pipe
			using (var pipe = new NamedPipeServerStream(
				"Echo", PipeDirection.InOut, -1, PipeTransmissionMode.Message,
				PipeOptions.Asynchronous | PipeOptions.WriteThrough)) {
				// Asynchronously accept a client connection
				pipe.BeginWaitForConnection(ae.End(), null);
				yield return 1;

				// A client connected, let's accept another client
				var aeNewClient = new AsyncEnumerator();
				aeNewClient.BeginExecute(PipeServerAsyncEnumerator(aeNewClient),
					aeNewClient.EndExecute);

				// Accept the client connection
				pipe.EndWaitForConnection(ae.DequeueAsyncResult());

				// Asynchronously read a request from the client
				Byte[] data = new Byte[1000];
				pipe.BeginRead(data, 0, data.Length, ae.End(), null);
				yield return 1;

				// The client sent us a request, process it
				Int32 bytesRead = pipe.EndRead(ae.DequeueAsyncResult());

				// Just change to upper case
				data = Encoding.UTF8.GetBytes(
					Encoding.UTF8.GetString(data, 0, bytesRead).ToUpper().ToCharArray());

				// Asynchronously send the response back to the client
				pipe.BeginWrite(data, 0, data.Length, ae.End(), null);
				yield return 1;

				// The response was sent to the client, close our side of the connection
				pipe.EndWrite(ae.DequeueAsyncResult());
			} // Close happens in a finally block now!
		}
コード例 #2
0
        static IEnumerator <int> ListenerFiber(AsyncEnumerator ae)
        {
            var listeningServer = new TcpListener(IPAddress.Loopback, 9998);

            listeningServer.Start();
            while (!ae.IsCanceled())
            {
                listeningServer.BeginAcceptTcpClient(ae.End(0, listeningServer.EndAcceptTcpClient), null);
                yield return(1);

                if (ae.IsCanceled())
                {
                    yield break;
                }
                var clientSocket = listeningServer.EndAcceptTcpClient(ae.DequeueAsyncResult());
                var clientAe     = new AsyncEnumerator()
                {
                    SyncContext = null
                };
                clientAe.BeginExecute(
                    ClientFiber(clientAe, clientSocket),
                    ar =>
                {
                    try
                    {
                        clientAe.EndExecute(ar);
                    }
                    catch { }
                }, null);
            }
        }
コード例 #3
0
        public void Post(Uri uri, Action <JsonRpcResponse, Exception> resultCallback)
        {
            if (uri == null)
            {
                throw new ArgumentNullException("uri");
            }

            if (resultCallback == null)
            {
                throw new ArgumentNullException("resultCallback");
            }

            try
            {
                var ae = new AsyncEnumerator();
                ae.BeginExecute(this.GetPostEnumerator(uri, ae, resultCallback), ar =>
                {
                    ae.EndExecute(ar);
                });
            }
            catch (System.Security.SecurityException ex)
            {
                resultCallback(null, ex);
            }
        }
コード例 #4
0
        public void AddLookups(QuotePage[] pages)
        {
            // precondition checking
            if (pages == null)
            {
                throw new ArgumentNullException();
            }
            else if (pages.Length == 0)
            {
                throw new ArgumentException();
            }

            foreach (QuotePage page in pages)
            {
                if (page == null)
                {
                    throw new ArgumentException();
                }
                else if (!_cultureMapper.Contains(page.Culture))
                {
                    throw new CultureNotSupportedException(page.Culture);
                }
            }

            IsBusy = true;

            AsyncEnumerator asyncEnumerator = GetAsyncEnumerator();

            asyncEnumerator.BeginExecute(ProcessUpdateLookups(asyncEnumerator, pages), asyncEnumerator.EndExecute);
        }
コード例 #5
0
 public void AsyncGetInitData()
 {
     Debug.Assert(_Token != null, "token can't be null");
     IInitDataProvider provider = new InitDataProvider();
     provider.Completed += GetInitDataCompletedCallback;
     var ae = new AsyncEnumerator();
     ae.BeginExecute(provider.AsyncGetInitData(_Token, ae), ae.EndExecute);
 }
コード例 #6
0
 public void AsyncGetLoginData()
 {
     Token token = SessionManager.Default.GetToken(_LoginInfo.Parameter.Request.ClientInfo.Session);
     IInitDataProvider initDataProvider = new InitDataProvider();
     initDataProvider.Completed += LoadInitDataCompletedCallback;
     AsyncEnumerator ae = new AsyncEnumerator();
     ae.BeginExecute(initDataProvider.AsyncGetInitData(token, ae), ae.EndExecute);
 }
コード例 #7
0
        private void ExecuteWithAsyncEnumerator()
        {
            SetStatus("Working..", StatusState.Busy);

            AsyncEnumerator ae = new AsyncEnumerator();

            ae.BeginExecute(ExecuteWithAsyncEnumerator(ae), ae.EndExecute, null);
        }
コード例 #8
0
        /// <summary>
        /// Asynchronously copies the contents of the source stream to the destination stream.
        /// </summary>
        /// <param name="source">The stream containing the data to be copied.</param>
        /// <param name="destination">The stream that will receive the copied data.</param>
        /// <param name="bufferSize">The size of the internal buffer that should be used to copy the data in chunks.</param>
        /// <param name="reportProgress">A callback method that is called after each chunk is copied to the destination stream.</param>
        /// <param name="callback">An optional asynchronous callback, to be called when copy completes.</param>
        /// <param name="state">A user-provided object that distinguishes this particular asynchronous operation from other operations.</param>
        /// <returns></returns>
        public static IAsyncResult BeginCopyStream(/* this */ Stream source, Stream destination, Int32 bufferSize, Action <Int64> reportProgress, AsyncCallback callback, Object state)
        {
            var ae = new AsyncEnumerator <Int64>("CopyStream")
            {
                SyncContext = null
            };

            return(ae.BeginExecute(CopyStream(ae, source, destination, bufferSize, reportProgress), callback, state));
        }
コード例 #9
0
        public void AsyncGetInitData()
        {
            Debug.Assert(_Token != null, "token can't be null");
            IInitDataProvider provider = new InitDataProvider();

            provider.Completed += GetInitDataCompletedCallback;
            var ae = new AsyncEnumerator();

            ae.BeginExecute(provider.AsyncGetInitData(_Token, ae), ae.EndExecute);
        }
コード例 #10
0
        public void AsyncGetLoginData()
        {
            Token             token            = SessionManager.Default.GetToken(_LoginInfo.Parameter.Request.ClientInfo.Session);
            IInitDataProvider initDataProvider = new InitDataProvider();

            initDataProvider.Completed += LoadInitDataCompletedCallback;
            AsyncEnumerator ae = new AsyncEnumerator();

            ae.BeginExecute(initDataProvider.AsyncGetInitData(token, ae), ae.EndExecute);
        }
コード例 #11
0
        static void Main(string[] args)
        {
            var ae = new AsyncEnumerator()
            {
                SyncContext = null
            };
            var mainOp = ae.BeginExecute(ListenerFiber(ae), null, null);

            // block until main server is finished
            ae.EndExecute(mainOp);
        }
コード例 #12
0
    public static void Main()
    {
        String[] urls = new String[] {
         "http://Wintellect.com/",
         "http://1.1.1.1/",   // Demonstrates error recovery
         "http://www.Devscovery.com/"
          };

          // Demonstrate process
          AsyncEnumerator ae = new AsyncEnumerator();
          ae.EndExecute(ae.BeginExecute(ProcessAllAndEachOps(ae, urls), null));
    }
コード例 #13
0
    private static IEnumerator <Int32> PipeServerAsyncEnumerator(AsyncEnumerator ae)
    {
        // Each server object performs asynchronous operations on this pipe
        using (var pipe = new NamedPipeServerStream(
                   "Echo", PipeDirection.InOut, -1, PipeTransmissionMode.Message,
                   PipeOptions.Asynchronous | PipeOptions.WriteThrough)) {
            // Asynchronously accept a client connection
            pipe.BeginWaitForConnection(ae.End(), null);
            yield return(1);

            // A client connected, let's accept another client
            var aeNewClient = new AsyncEnumerator();
            aeNewClient.BeginExecute(PipeServerAsyncEnumerator(aeNewClient), aeNewClient.EndExecute);

            // Accept the client connection
            pipe.EndWaitForConnection(ae.DequeueAsyncResult());

            // Asynchronously read a request from the client
            Byte[] data = new Byte[1000];
            pipe.BeginRead(data, 0, data.Length, ae.End(), null);
            yield return(1);

            // The client sent us a request, process it.
            Int32 bytesRead = pipe.EndRead(ae.DequeueAsyncResult());

            // Get the timestamp of this client's request
            DateTime now = DateTime.Now;

            // We want to save the timestamp of the most-recent client request. Since multiple
            // clients are running concurrently, this has to be done in a thread-safe way
            s_gate.BeginRegion(SyncGateMode.Exclusive, ae.End()); // Request exclusive access
            yield return(1);                                      // The iterator resumes when exclusive access is granted

            if (s_lastClientRequestTimestamp < now)
            {
                s_lastClientRequestTimestamp = now;
            }

            s_gate.EndRegion(ae.DequeueAsyncResult()); // Relinquish exclusive access

            // My sample server just changes all the characters to uppercase
            // But, you can replace this code with any compute-bound operation
            data = Encoding.UTF8.GetBytes(
                Encoding.UTF8.GetString(data, 0, bytesRead).ToUpper().ToCharArray());

            // Asynchronously send the response back to the client
            pipe.BeginWrite(data, 0, data.Length, ae.End(), null);
            yield return(1);

            // The response was sent to the client, close our side of the connection
            pipe.EndWrite(ae.DequeueAsyncResult());
        } // Close the pipe
    }
コード例 #14
0
        public void  GetImagesAsync(string searchString, Action <IList <Image> > callback, int count = 5)
        {
            if (String.IsNullOrEmpty(searchString))
            {
                throw new ArgumentNullException("searchString");
            }
            _searchString = searchString;
            _totalImages  = count;
            _callback     = callback;
            AsyncEnumerator asyncEnumerator = new AsyncEnumerator();

            asyncEnumerator.BeginExecute(GetAllImages(asyncEnumerator), EnumeratorExecutionComplete);
        }
コード例 #15
0
 public void  GetImagesAsync(string searchString,Action<IList<Image>> callback, int count = 5)
 {
     if (String.IsNullOrEmpty( searchString))
     {
         throw new ArgumentNullException("searchString"); 
     }
     _searchString = searchString;
     _totalImages  = count;
     _callback = callback;
     AsyncEnumerator asyncEnumerator = new AsyncEnumerator();
     asyncEnumerator.BeginExecute(GetAllImages(asyncEnumerator), EnumeratorExecutionComplete);
       
 }
コード例 #16
0
        private IEnumerator <Int32> GetAllImages(AsyncEnumerator ae)
        {
            Int32 CurrentPage      = 0;
            Int32 _totalImagesTemp = _totalImages;

            //   while(_totalImagesTemp>0)
            {
                AsyncEnumerator asyncE = new AsyncEnumerator();
                asyncE.BeginExecute(GetImagesFromGoogle(asyncE,
                                                        GetGoogleSearchUrl(CurrentPage++),
                                                        _totalImagesTemp > _numberOfImagesInAPage ? _numberOfImagesInAPage : _totalImagesTemp), ae.EndVoid(0, DiscardWebRequest));
                _totalImagesTemp = _totalImagesTemp - _numberOfImagesInAPage;
                yield return(1);
            }
        }
コード例 #17
0
 private IEnumerator<Int32> GetAllImages(AsyncEnumerator ae)
 {
     Int32 CurrentPage=0;
    Int32 _totalImagesTemp=_totalImages ;
    _GoogledImages = new List<Image>();
     while(_totalImagesTemp>0)
     {
         AsyncEnumerator asyncE = new AsyncEnumerator();
         asyncE.BeginExecute(GetImagesFromGoogle(asyncE,
                           GetGoogleSearchUrl(CurrentPage++),
                           _totalImagesTemp > _numberOfImagesInAPage ? _numberOfImagesInAPage : _totalImagesTemp), ae.EndVoid(0, DiscardWebRequest));
         _totalImagesTemp = _totalImagesTemp - _numberOfImagesInAPage;
         yield return 1;   
     }
     
 }
コード例 #18
0
    private static void ImplementedViaAsyncEnumerator()
    {
        // Start 1 server per CPU
        for (Int32 n = 0; n < Environment.ProcessorCount; n++)
        {
            var ae = new AsyncEnumerator();
            ae.BeginExecute(PipeServerAsyncEnumerator(ae), ae.EndExecute);
        }

        // Now make a 100 client requests against the server
        for (Int32 n = 0; n < 100; n++)
        {
            var ae = new AsyncEnumerator();
            ae.BeginExecute(PipeClientAsyncEnumerator(ae, "localhost", "Request #" + n), ae.EndExecute);
        }
    }
コード例 #19
0
ファイル: Receiver.cs プロジェクト: BclEx/rhino-esb
        private void BeginAcceptFileCallback(IAsyncResult result)
        {
            FileWatcherFile file;
            try { file = _listener.EndAcceptFile(result); }
            catch (ObjectDisposedException) { return; }
            catch (Exception e) { _logger.Warn("Error on EndAcceptFile", e); StartAcceptingFile(); return; }

            _logger.DebugFormat("Accepting connection from {0}", file.EndPoint);
            var enumerator = new AsyncEnumerator("Receiver from " + file.EndPoint);
            enumerator.BeginExecute(ProcessRequest(file, enumerator), ar =>
            {
                try { enumerator.EndExecute(ar); }
                catch (Exception e) { _logger.Warn("Failed to recieve message", e); }
            });

            StartAcceptingFile();
        }
コード例 #20
0
ファイル: Page.xaml.cs プロジェクト: pdckxd/bugtrackingsystem
      private void FlickrButton_Click(object sender, RoutedEventArgs e) {
         // Initiate a Flickr request
         String input = Input.Text.Replace(' ', '+');

#if !AsyncEnumerator
         WebRequest request = HttpWebRequest.Create(
            new Uri(String.Format("http://api.flickr.com/services/rest/?method=flickr.photos.search&api_key={0}&tags={1}&per_page=10",
               FlickrKey.Key, input)));
         request.BeginGetResponse(WebRequestComplete, request);
#else
#if DEBUG
         AsyncEnumerator.EnableDebugSupport();
#endif
         AsyncEnumerator ae = new AsyncEnumerator("Query Flickr Photos");
         ae.BeginExecute(GetPhotos(ae, input), ae.EndExecute);
#endif
      }
コード例 #21
0
    public static void Main()
    {
        AsyncEnumerator.EnableDebugSupport();
          // Add this to watch window: AsyncEnumerator.GetInProgressList();
          // Also, you can hover over a variable that is of my AsyncEnumerator type

          String[] urls = new String[] {
         "http://Wintellect.com/",
         "http://1.1.1.1/",   // Demonstrates error recovery
         "http://www.Devscovery.com/"
          };

          // Demonstrate process
          AsyncEnumerator ae = new AsyncEnumerator();
           ae.SuspendCallback += sr=>{ Console.WriteLine(123); };
           ae.ResumeCallback += sr=> { Console.WriteLine(321); };
          ae.EndExecute(ae.BeginExecute(ProcessAllAndEachOps(ae, urls), null));
    }
コード例 #22
0
        internal void UpdateQuotesAsync(QuotePage page)
        {
            AsyncEnumerator asyncEnumerator = new AsyncEnumerator();

            lock (_asyncEnumerators)
            {
                _asyncEnumerators.Add(asyncEnumerator);
            }

            asyncEnumerator.BeginExecute(ProcessCollectQuotes(asyncEnumerator, page.Topic, page.Culture, page.Uri,
                                                              (quotes, topicTranslations) =>
            {
                page.Items             = quotes;
                page.TopicTranslations = topicTranslations;

                OnQuotesCollectingCompleted(new QuotesCollectingCompletedEventArgs(page, true));
            }),
                                         asyncEnumerator.EndExecute);
        }
コード例 #23
0
        internal void CollectQuotesAsync(string topic, CultureInfo culture, Uri uri)
        {
            AsyncEnumerator asyncEnumerator = new AsyncEnumerator();

            lock (_asyncEnumerators)
            {
                _asyncEnumerators.Add(asyncEnumerator);
            }

            asyncEnumerator.BeginExecute(ProcessCollectQuotes(asyncEnumerator, topic, culture, uri,
                                                              (quotes, topicTranslations) =>
            {
                QuotePage page = new QuotePage(topic, uri, culture, quotes, topicTranslations);

                OnQuotesCollectingCompleted(new QuotesCollectingCompletedEventArgs(page, false));
                _playlist.Add(page);
            }),
                                         asyncEnumerator.EndExecute);
        }
コード例 #24
0
ファイル: Async.cs プロジェクト: JeffreyZhao/talks
 public static void Transfer(
     string urlIn,
     string urlOut,
     Action<double> onProgress,
     Action<int> onComplete,
     Action<Exception> onError)
 {
     var ae = new AsyncEnumerator();
     ae.BeginExecute(GetAsyncEnumerator(ae, urlIn, urlOut, onProgress, onComplete), ar =>
     {
         try
         {
             ae.EndExecute(ar);
         }
         catch (Exception ex)
         {
             onError(ex);
         }
     });
 }
コード例 #25
0
ファイル: Async.cs プロジェクト: dolfly/talks
        public static void Transfer(
            string urlIn,
            string urlOut,
            Action <double> onProgress,
            Action <int> onComplete,
            Action <Exception> onError)
        {
            var ae = new AsyncEnumerator();

            ae.BeginExecute(GetAsyncEnumerator(ae, urlIn, urlOut, onProgress, onComplete), ar =>
            {
                try
                {
                    ae.EndExecute(ar);
                }
                catch (Exception ex)
                {
                    onError(ex);
                }
            });
        }
コード例 #26
0
ファイル: Sender.cs プロジェクト: stantoxt/rhino-queues
        public void Send()
        {
            var enumerator = new AsyncEnumerator(
                string.Format("Sending {0} messages to {1}", Messages.Length,
                              Destination)
                );

            logger.DebugFormat("Starting to send {0} messages to {1}", Messages.Length, Destination);
            enumerator.BeginExecute(SendInternal(enumerator), result =>
            {
                try
                {
                    enumerator.EndExecute(result);
                }
                catch (Exception exception)
                {
                    logger.Warn("Failed to send message", exception);
                    Failure(exception);
                }
            });
        }
コード例 #27
0
        public void AddLookup(string topic, CultureInfo culture)
        {
            // precondition checking
            if (topic == null || culture == null)
            {
                throw new ArgumentNullException();
            }
            else if (topic.Length == 0)
            {
                throw new ArgumentException();
            }
            else if (!_cultureMapper.Contains(culture))
            {
                throw new CultureNotSupportedException(culture);
            }

            IsBusy = true;

            AsyncEnumerator asyncEnumerator = GetAsyncEnumerator();

            asyncEnumerator.BeginExecute(ProcessLookup(asyncEnumerator, topic, culture), asyncEnumerator.EndExecute);
        }
コード例 #28
0
        private void BeginAcceptTcpClientCallback(IAsyncResult result)
        {
            TcpClient client;

            try
            {
                client = listener.EndAcceptTcpClient(result);
            }
            catch (ObjectDisposedException)
            {
                return;
            }

            logger.DebugFormat("Accepting connection from {0}", client.Client.RemoteEndPoint);
            var enumerator = new AsyncEnumerator(
                "Receiver from " + client.Client.RemoteEndPoint
                );

            enumerator.BeginExecute(ProcessRequest(client, enumerator), ar =>
            {
                try
                {
                    enumerator.EndExecute(ar);
                }
                catch (Exception exception)
                {
                    logger.Warn("Failed to recieve message", exception);
                }
            });

            try
            {
                listener.BeginAcceptTcpClient(BeginAcceptTcpClientCallback, null);
            }
            catch (ObjectDisposedException)
            {
            }
        }
コード例 #29
0
ファイル: Receiver.cs プロジェクト: nkmajeti/rhino-tools
        private void BeginAcceptTcpClientCallback(IAsyncResult result)
        {
            TcpClient client;
            try
            {
                client = listener.EndAcceptTcpClient(result);
            }
            catch (ObjectDisposedException)
            {
                return;
            }

            logger.DebugFormat("Accepting connection from {0}", client.Client.RemoteEndPoint);
            var enumerator = new AsyncEnumerator(
                "Receiver from " + client.Client.RemoteEndPoint
                );
            enumerator.BeginExecute(ProcessRequest(client, enumerator), ar =>
            {
                try
                {
                    enumerator.EndExecute(ar);
                }
                catch (Exception exception)
                {
                    logger.Warn("Failed to recieve message", exception);
                }
            });

            try
            {
                listener.BeginAcceptTcpClient(BeginAcceptTcpClientCallback, null);
            }
            catch (ObjectDisposedException)
            {
            }
        }
コード例 #30
0
 private void GetImages_Click(object sender, RoutedEventArgs e)
 {
     BlankImages();
      m_ae = new AsyncEnumerator();
      m_ae.BeginExecute(DownloadImages(m_ae), m_ae.EndExecute);
 }
コード例 #31
0
        private IEnumerator <int> ProcessRequest(TcpClient client, AsyncEnumerator ae)
        {
            try
            {
                using (client)
                    using (var stream = client.GetStream())
                    {
                        var sender = client.Client.RemoteEndPoint;

                        var lenOfDataToReadBuffer = new byte[sizeof(int)];

                        var lenEnumerator = new AsyncEnumerator(ae.ToString());
                        try
                        {
                            lenEnumerator.BeginExecute(
                                StreamUtil.ReadBytes(lenOfDataToReadBuffer, stream, lenEnumerator, "length data", false), ae.End());
                        }
                        catch (Exception exception)
                        {
                            logger.Warn("Unable to read length data from " + sender, exception);
                            yield break;
                        }

                        yield return(1);

                        try
                        {
                            lenEnumerator.EndExecute(ae.DequeueAsyncResult());
                        }
                        catch (Exception exception)
                        {
                            logger.Warn("Unable to read length data from " + sender, exception);
                            yield break;
                        }

                        var lengthOfDataToRead = BitConverter.ToInt32(lenOfDataToReadBuffer, 0);
                        if (lengthOfDataToRead < 0)
                        {
                            logger.WarnFormat("Got invalid length {0} from sender {1}", lengthOfDataToRead, sender);
                            yield break;
                        }
                        logger.DebugFormat("Reading {0} bytes from {1}", lengthOfDataToRead, sender);

                        var buffer = new byte[lengthOfDataToRead];

                        var readBufferEnumerator = new AsyncEnumerator(ae.ToString());
                        try
                        {
                            readBufferEnumerator.BeginExecute(
                                StreamUtil.ReadBytes(buffer, stream, readBufferEnumerator, "message data", false), ae.End());
                        }
                        catch (Exception exception)
                        {
                            logger.Warn("Unable to read message data from " + sender, exception);
                            yield break;
                        }
                        yield return(1);

                        try
                        {
                            readBufferEnumerator.EndExecute(ae.DequeueAsyncResult());
                        }
                        catch (Exception exception)
                        {
                            logger.Warn("Unable to read message data from " + sender, exception);
                            yield break;
                        }

                        Message[] messages = null;
                        try
                        {
                            messages = SerializationExtensions.ToMessages(buffer);
                            logger.DebugFormat("Deserialized {0} messages from {1}", messages.Length, sender);
                        }
                        catch (Exception exception)
                        {
                            logger.Warn("Failed to deserialize messages from " + sender, exception);
                        }

                        if (messages == null)
                        {
                            try
                            {
                                stream.BeginWrite(ProtocolConstants.SerializationFailureBuffer, 0,
                                                  ProtocolConstants.SerializationFailureBuffer.Length, ae.End(), null);
                            }
                            catch (Exception exception)
                            {
                                logger.Warn("Unable to send serialization format error to " + sender, exception);
                                yield break;
                            }
                            yield return(1);

                            try
                            {
                                stream.EndWrite(ae.DequeueAsyncResult());
                            }
                            catch (Exception exception)
                            {
                                logger.Warn("Unable to send serialization format error to " + sender, exception);
                            }

                            yield break;
                        }

                        IMessageAcceptance acceptance = null;
                        byte[]             errorBytes = null;
                        try
                        {
                            acceptance = acceptMessages(messages);
                            logger.DebugFormat("All messages from {0} were accepted", sender);
                        }
                        catch (QueueDoesNotExistsException)
                        {
                            logger.WarnFormat("Failed to accept messages from {0} because queue does not exists", sender);
                            errorBytes = ProtocolConstants.QueueDoesNoExiststBuffer;
                        }
                        catch (Exception exception)
                        {
                            errorBytes = ProtocolConstants.ProcessingFailureBuffer;
                            logger.Warn("Failed to accept messages from " + sender, exception);
                        }

                        if (errorBytes != null)
                        {
                            try
                            {
                                stream.BeginWrite(errorBytes, 0,
                                                  errorBytes.Length, ae.End(), null);
                            }
                            catch (Exception exception)
                            {
                                logger.Warn("Unable to send processing failure from " + sender, exception);
                                yield break;
                            }
                            yield return(1);

                            try
                            {
                                stream.EndWrite(ae.DequeueAsyncResult());
                            }
                            catch (Exception exception)
                            {
                                logger.Warn("Unable to send processing failure from " + sender, exception);
                            }
                            yield break;
                        }

                        logger.DebugFormat("Sending reciept notice to {0}", sender);
                        try
                        {
                            stream.BeginWrite(ProtocolConstants.RecievedBuffer, 0, ProtocolConstants.RecievedBuffer.Length,
                                              ae.End(), null);
                        }
                        catch (Exception exception)
                        {
                            logger.Warn("Could not send reciept notice to " + sender, exception);
                            acceptance.Abort();
                            yield break;
                        }
                        yield return(1);

                        try
                        {
                            stream.EndWrite(ae.DequeueAsyncResult());
                        }
                        catch (Exception exception)
                        {
                            logger.Warn("Could not send reciept notice to " + sender, exception);
                            acceptance.Abort();
                            yield break;
                        }

                        logger.DebugFormat("Reading acknowledgement about accepting messages to {0}", sender);

                        var acknowledgementBuffer = new byte[ProtocolConstants.AcknowledgedBuffer.Length];

                        var readAcknoweldgement = new AsyncEnumerator(ae.ToString());
                        try
                        {
                            readAcknoweldgement.BeginExecute(
                                StreamUtil.ReadBytes(acknowledgementBuffer, stream, readAcknoweldgement, "acknowledgement", false),
                                ae.End());
                        }
                        catch (Exception exception)
                        {
                            logger.Warn("Error reading acknowledgement from " + sender, exception);
                            acceptance.Abort();
                            yield break;
                        }
                        yield return(1);

                        try
                        {
                            readAcknoweldgement.EndExecute(ae.DequeueAsyncResult());
                        }
                        catch (Exception exception)
                        {
                            logger.Warn("Error reading acknowledgement from " + sender, exception);
                            acceptance.Abort();
                            yield break;
                        }

                        var senderResponse = Encoding.Unicode.GetString(acknowledgementBuffer);
                        if (senderResponse != ProtocolConstants.Acknowledged)
                        {
                            logger.WarnFormat("Sender did not respond with proper acknowledgement, the reply was {0}",
                                              senderResponse);
                            acceptance.Abort();
                        }

                        bool commitSuccessful;
                        try
                        {
                            acceptance.Commit();
                            commitSuccessful = true;
                        }
                        catch (Exception exception)
                        {
                            logger.Warn("Unable to commit messages from " + sender, exception);
                            commitSuccessful = false;
                        }

                        if (commitSuccessful == false)
                        {
                            bool writeSuccessful;
                            try
                            {
                                stream.BeginWrite(ProtocolConstants.RevertBuffer, 0, ProtocolConstants.RevertBuffer.Length,
                                                  ae.End(),
                                                  null);
                                writeSuccessful = true;
                            }
                            catch (Exception e)
                            {
                                logger.Warn("Unable to send revert message to " + sender, e);
                                writeSuccessful = false;
                            }

                            if (writeSuccessful)
                            {
                                yield return(1);


                                try
                                {
                                    stream.EndWrite(ae.DequeueAsyncResult());
                                }
                                catch (Exception exception)
                                {
                                    logger.Warn("Unable to send revert message to " + sender, exception);
                                }
                            }
                        }
                    }
            }
            finally
            {
                var copy = CompletedRecievingMessages;
                if (copy != null)
                {
                    copy();
                }
            }
        }
コード例 #32
0
        private void ExecuteJavaTraderRequest()
        {
            var ae = new AsyncEnumerator();

            ae.BeginExecute(InitDataService.GetInitData(_Request, ae), ae.EndExecute);
        }
コード例 #33
0
 private void ExecuteJavaTraderRequest()
 {
     var ae = new AsyncEnumerator();
     ae.BeginExecute(InitDataService.GetInitData(_Request, ae), ae.EndExecute);
 }
コード例 #34
0
ファイル: Sender.cs プロジェクト: stantoxt/rhino-queues
        private IEnumerator <int> SendInternal(AsyncEnumerator ae)
        {
            try
            {
                using (var client = new TcpClient())
                {
                    try
                    {
                        client.BeginConnect(Destination.Host, Destination.Port,
                                            ae.End(),
                                            null);
                    }
                    catch (Exception exception)
                    {
                        logger.WarnFormat("Failed to connect to {0} because {1}", Destination, exception);
                        Failure(exception);
                        yield break;
                    }

                    yield return(1);

                    try
                    {
                        client.EndConnect(ae.DequeueAsyncResult());
                    }
                    catch (Exception exception)
                    {
                        logger.WarnFormat("Failed to connect to {0} because {1}", Destination, exception);
                        Failure(exception);
                        yield break;
                    }

                    logger.DebugFormat("Successfully connected to {0}", Destination);

                    using (var stream = client.GetStream())
                    {
                        var buffer = Messages.Serialize();

                        var bufferLenInBytes = BitConverter.GetBytes(buffer.Length);

                        logger.DebugFormat("Writing length of {0} bytes to {1}", buffer.Length, Destination);

                        try
                        {
                            stream.BeginWrite(bufferLenInBytes, 0, bufferLenInBytes.Length, ae.End(), null);
                        }
                        catch (Exception exception)
                        {
                            logger.WarnFormat("Could not write to {0} because {1}", Destination,
                                              exception);
                            Failure(exception);
                            yield break;
                        }

                        yield return(1);

                        try
                        {
                            stream.EndWrite(ae.DequeueAsyncResult());
                        }
                        catch (Exception exception)
                        {
                            logger.WarnFormat("Could not write to {0} because {1}", Destination,
                                              exception);
                            Failure(exception);
                            yield break;
                        }

                        logger.DebugFormat("Writing {0} bytes to {1}", buffer.Length, Destination);

                        try
                        {
                            stream.BeginWrite(buffer, 0, buffer.Length, ae.End(), null);
                        }
                        catch (Exception exception)
                        {
                            logger.WarnFormat("Could not write to {0} because {1}", Destination,
                                              exception);
                            Failure(exception);
                            yield break;
                        }

                        yield return(1);

                        try
                        {
                            stream.EndWrite(ae.DequeueAsyncResult());
                        }
                        catch (Exception exception)
                        {
                            logger.WarnFormat("Could not write to {0} because {1}", Destination,
                                              exception);
                            Failure(exception);
                            yield break;
                        }

                        logger.DebugFormat("Successfully wrote to {0}", Destination);

                        var recieveBuffer = new byte[ProtocolConstants.RecievedBuffer.Length];
                        var readConfirmationEnumerator = new AsyncEnumerator();

                        try
                        {
                            readConfirmationEnumerator.BeginExecute(
                                StreamUtil.ReadBytes(recieveBuffer, stream, readConfirmationEnumerator, "recieve confirmation", false), ae.End());
                        }
                        catch (Exception exception)
                        {
                            logger.WarnFormat("Could not read confirmation from {0} because {1}", Destination,
                                              exception);
                            Failure(exception);
                            yield break;
                        }

                        yield return(1);

                        try
                        {
                            readConfirmationEnumerator.EndExecute(ae.DequeueAsyncResult());
                        }
                        catch (Exception exception)
                        {
                            logger.WarnFormat("Could not read confirmation from {0} because {1}", Destination,
                                              exception);
                            Failure(exception);
                            yield break;
                        }

                        var recieveRespone = Encoding.Unicode.GetString(recieveBuffer);
                        if (recieveRespone == ProtocolConstants.QueueDoesNotExists)
                        {
                            logger.WarnFormat(
                                "Response from reciever {0} is that queue does not exists",
                                Destination);
                            Failure(new QueueDoesNotExistsException());
                            yield break;
                        }
                        else if (recieveRespone != ProtocolConstants.Recieved)
                        {
                            logger.WarnFormat(
                                "Response from reciever {0} is not the expected one, unexpected response was: {1}",
                                Destination, recieveRespone);
                            Failure(null);
                            yield break;
                        }

                        try
                        {
                            stream.BeginWrite(ProtocolConstants.AcknowledgedBuffer, 0,
                                              ProtocolConstants.AcknowledgedBuffer.Length, ae.End(), null);
                        }
                        catch (Exception exception)
                        {
                            logger.WarnFormat("Failed to write acknowledgement to reciever {0} because {1}",
                                              Destination, exception);
                            Failure(exception);
                            yield break;
                        }

                        yield return(1);

                        try
                        {
                            stream.EndWrite(ae.DequeueAsyncResult());
                        }
                        catch (Exception exception)
                        {
                            logger.WarnFormat("Failed to write acknowledgement to reciever {0} because {1}",
                                              Destination, exception);
                            Failure(exception);
                            yield break;
                        }

                        var bookmarks = Success();

                        buffer = new byte[ProtocolConstants.RevertBuffer.Length];
                        var  readRevertMessage    = new AsyncEnumerator(ae.ToString());
                        bool startingToReadFailed = false;
                        try
                        {
                            readRevertMessage.BeginExecute(
                                StreamUtil.ReadBytes(buffer, stream, readRevertMessage, "revert", true), ae.End());
                        }
                        catch (Exception)
                        {
                            //more or less expected
                            startingToReadFailed = true;
                        }
                        if (startingToReadFailed)
                        {
                            yield break;
                        }
                        yield return(1);

                        try
                        {
                            readRevertMessage.EndExecute(ae.DequeueAsyncResult());
                            var revert = Encoding.Unicode.GetString(buffer);
                            if (revert == ProtocolConstants.Revert)
                            {
                                logger.Warn("Got back revert message from receiver, reverting send");
                                Revert(bookmarks);
                            }
                        }
                        catch (Exception)
                        {
                            // expected, there is nothing to do here, the
                            // reciever didn't report anything for us
                        }
                    }
                }
            }
            finally
            {
                var completed = SendCompleted;
                if (completed != null)
                {
                    completed();
                }
            }
        }
コード例 #35
0
 private void button1_Click(object sender, RoutedEventArgs e)
 {
     var ae = new AsyncEnumerator("String download");
      ae.BeginExecute(DownloadString(ae, "http://Wintellect.com/"), ae.EndExecute);
 }
コード例 #36
0
        private IEnumerator <Int32> UploadFileInBlocks(AsyncEnumerator ae, String pathname, CloudBlockBlob blob, Action <Int32> blockUploaded)
        {
            Int64 fileLength;

            using (var fs = new FileStream(pathname, FileMode.Open, FileAccess.Read, FileShare.Read))
                using (var mmf = MemoryMappedFile.CreateFromFile(fs, null, fileLength = fs.Length, MemoryMappedFileAccess.Read, null, HandleInheritability.None, false)) {
                    Byte[] uploadedBlocks = new Byte[(fileLength - 1) / m_blockSize + 1];

                    // Find out which blocks have been uploaded already?
                    blob.BeginDownloadBlockList(BlockListingFilter.Uncommitted, AccessCondition.GenerateEmptyCondition(), null, null, ae.End(), null);
                    yield return(1);

                    try {
                        foreach (ListBlockItem lbi in blob.EndDownloadBlockList(ae.DequeueAsyncResult()))
                        {
                            Int32 blockId = lbi.Name.FromBase64ToInt32();
                            uploadedBlocks[blockId] = 1;
                            blockUploaded(blockId);
                        }
                    }
                    catch (StorageException e) {
                        if ((HttpStatusCode)e.RequestInformation.HttpStatusCode != HttpStatusCode.NotFound)
                        {
                            throw;
                        }
                    }

                    // Start uploading the remaining blocks:
                    Int32 blocksUploading = 0;

                    foreach (var blockNumber in GetBlockNumbersFromArray(uploadedBlocks))
                    {
                        // Start uploading up to 'm_concurrency' blocks
                        blocksUploading++;
                        var aeBlock = new AsyncEnumerator("Block #" + blockNumber);
                        aeBlock.BeginExecute(UploadBlock(aeBlock, mmf, blob, blockNumber,
                                                         (blockNumber == uploadedBlocks.Length - 1) ? fileLength % m_blockSize : m_blockSize), ae.End(), blockNumber);
                        if (blocksUploading < m_concurrency)
                        {
                            continue;
                        }

                        // As each block completes uploading, start uploading a new block (if any are left)
                        yield return(1);

                        blocksUploading--;
                        IAsyncResult result = ae.DequeueAsyncResult();
                        AsyncEnumerator.FromAsyncResult(result).EndExecute(result);
                        blockUploaded((Int32)result.AsyncState);
                    }

                    // Wait until all blocks have finished uploading and then commit them all
                    for (; blocksUploading > 0; blocksUploading--)
                    {
                        yield return(1);

                        IAsyncResult result = ae.DequeueAsyncResult();
                        AsyncEnumerator.FromAsyncResult(result).EndExecute(result);
                        blockUploaded((Int32)result.AsyncState);
                    }

                    // Commit all the blocks in order:
                    blob.BeginPutBlockList(Enumerable.Range(0, uploadedBlocks.Length).Select(b => b.ToBase64()), ae.End(), null);
                    yield return(1);

                    blob.EndPutBlockList(ae.DequeueAsyncResult());
                }
        }
コード例 #37
0
 public void Login(LoginParameter parameter)
 {
     AsyncEnumerator ae = new AsyncEnumerator();
     ae.BeginExecute(_LoginProvider.AsyncLogin(parameter, ae), ae.EndExecute);
 }
コード例 #38
0
ファイル: TcpClient.cs プロジェクト: pdckxd/bugtrackingsystem
 public static void Start(String server, String message)
 {
     AsyncEnumerator ae = new AsyncEnumerator();
      ae.BeginExecute(Process(ae, server, message), ae.EndExecute, null);
 }
コード例 #39
0
ファイル: RequestTable.cs プロジェクト: RobertHu/TraderServer
        private XElement  GetInitDataAction(SerializedObject request, Token token)
        {
            XElement  result=null;
            if (token != null && token.AppType == iExchange.Common.AppType.Mobile)
            {
                System.Data.DataSet initData = Mobile.Manager.GetInitData(token);
                List<string> argList = XmlRequestCommandHelper.GetArguments(request.Content);
                Guid selectedAccountId = (argList != null && argList.Count > 0 ? new Guid(argList[0]) : Guid.Empty);
                InitDataService.Init(request.Session, initData);
                result = Mobile.Manager.Initialize(token, initData, selectedAccountId);
                //test:
                if (System.Configuration.ConfigurationManager.AppSettings["MobileDebug"]=="true")
                {
                    ////test place
                    //string s = "<PlacingInstruction AccountId=\"cbcdb06f-141a-415f-bdda-a676bd5759b7\" InstrumentId=\"864ac5d7-b872-45a6-887e-7189463beb12\" PlacingType=\"LimitStop\" EndTime=\"2013-05-02 12:19:07.007\" ExpireType=\"GoodTillSession\" ExpireDate=\"2013-05-02 12:19:07.007\" PriceIsQuote=\"false\" PriceTimestamp=\"2013-05-02 12:19:07.007\"><PlacingOrders><PlacingOrder Id=\"e2a72e0d-ddf6-4d83-8a04-9883a0eee84e\" Lot=\"1\" IsOpen=\"true\" IsBuy=\"false\" SetPrice=\"2.0988\" TradeOption=\"Better\" /></PlacingOrders></PlacingInstruction>";
                    //XmlDocument doc = new XmlDocument();
                    //doc.LoadXml(s);
                    //ICollection<Mobile.Server.Transaction> transactionsTest = Mobile.Manager.ConvertPlacingRequest(token, doc.FirstChild);

                    //foreach (Mobile.Server.Transaction transaction in transactionsTest)
                    //{
                    //    string tranCode;
                    //    TransactionError error = Application.Default.TradingConsoleServer.Place(token, Application.Default.StateServer, transaction.ToXmlNode(), out tranCode);
                    //}
                    //// test quote
                    //this._Service.Quote(request.Session, "282fa038-1330-43a6-aa87-9d7d01c1a594", 30, 2);
                   
                    // test order query
                    //XElement node = Mobile.Manager.QueryOrder(token, new Guid("1DFC557A-3FB5-4A9F-BD08-E165FA6DFCE6"), 10, 4, 3);
                    //XElement x = new XElement("Result");
                    //x.Add(node);
                    

                    //XElement e = XElement.Parse("<Transaction ID=\"ec123d66-77af-4403-b739-0bbfa618a37b\" AccountID=\"cbcdb06f-141a-415f-bdda-a676bd5759b7\" InstrumentID=\"864ac5d7-b872-45a6-887e-7189463beb12\" Type=\"2\" SubType=\"1\" OrderType=\"1\" BeginTime=\"2013-05-02 11:52:22\" EndTime=\"2013-05-03 04:00:00\" ExpireType=\"3\" SubmitTime=\"2013-05-10 09:41:07\" ContractSize=\"10001.0000\" SubmitorID=\"79eb2fa2-4ced-4d0e-a283-85adc0136d05\" AssigningOrderID=\"4F23DE3E-3968-440E-829A-3D78685EAA8C\"><Order ID=\"aca88b2e-7640-4a26-9284-6a8993d420e3\" TradeOption=\"1\" IsOpen=\"true\" IsBuy=\"false\" SetPrice=\"2.102\" SetPrice2=\"\" DQMaxMove=\"0\" Lot=\"1.0000\" OriginalLot=\"1.0000\" /></Transaction>");
                    //Mobile.Server.Transaction transaction = Mobile.Manager.ConvertModifyRequest(token, new Guid("4F23DE3E-3968-440E-829A-3D78685EAA8C"), "2.3", new Guid("11111111-AEF4-4717-8101-522E284DDA6D"), "2.0", null, null, null, null, true);
                    
                    //XElement element = new XElement("Result");
                    //ICollection<XElement> errorCodes = this.GetPlaceResultForMobile(transaction, token);

                    //XmlNode n = InstrumentManager.Default.UpdateInstrumentSetting(request.Session, new string[] { "27b059c2-1913-44ac-93ec-dc39e9863f1a" });
                    //string instrumentIds = "6a3fbe21-2e49-46ea-ae93-2be31caa3c6c,babf7daa-af0f-4396-85f2-67e2c97952b7,382be55a-3b33-403e-b9e0-b9eccabd5019,ab98797c-0b0c-427f-8d1b-0de006d153a1,63a02916-28b2-4da1-a65e-59bb1dd4f951,eb82dca7-2625-48df-ac5c-464d160bccbc,282fa038-1330-43a6-aa87-9d7d01c1a594,864ac5d7-b872-45a6-887e-7189463beb12,1bac5d80-7f4a-4b94-98fa-0b76e13fcb1b";
                    //Dictionary<Guid, Guid> quotePolicyIds = Mobile.Manager.UpdateInstrumentSetting(token,  instrumentIds.Split(new char[]{','}));
                    //var state = Trader.Server.Session.SessionManager.Default.GetTradingConsoleState(request.Session);
                    //InstrumentManager.Default.UpdateInstrumentSetting(request.Session, quotePolicyIds);
                    //XElement e= Mobile.Manager.GetChanges(request.Session, true);

                    Dictionary<Guid, Guid> quotePolicyIds = Mobile.Manager.UpdateInstrumentSetting(token, new string[] { });

                }
            }
            else
            {
                AsyncEnumerator ae = new AsyncEnumerator();
                ae.BeginExecute(InitDataService.GetInitData(request, null, ae),ae.EndExecute);
            }
            return result;
        }
コード例 #40
0
        // AsyncEnumerator class.

        private static void FetchStockQuotesAsyncEnumerator(WebService svc)
        {
            AsyncEnumerator ae = new AsyncEnumerator();

            ae.BeginExecute(FetchStockQuotesAsyncEnumerator(ae, svc), ae.EndExecute);
        }
コード例 #41
0
 // The BeginHandler method launches an async op returns immediately
 // The ASP.NET thread returns back to the thread pool
 // The thread pool waits on the IAsyncResult and then wakes and calls the EndHandler method
 private IAsyncResult BeginHandler(Object sender, EventArgs e, AsyncCallback cb, Object extraData)
 {
     m_lblPic1.Text = m_lblPic2.Text = null;
       m_ae = new AsyncEnumerator();
       return m_ae.BeginExecute(GetImages(m_ae), cb, extraData);
 }
コード例 #42
0
        // AsyncEnumerator class.

        private static void FetchStockQuotesAsyncEnumerator(WebService svc)
        {
            AsyncEnumerator ae = new AsyncEnumerator();
            ae.BeginExecute(FetchStockQuotesAsyncEnumerator(ae, svc), ae.EndExecute);
        }
コード例 #43
0
        public void Login(LoginParameter parameter)
        {
            AsyncEnumerator ae = new AsyncEnumerator();

            ae.BeginExecute(_LoginProvider.AsyncLogin(parameter, ae), ae.EndExecute);
        }
コード例 #44
0
ファイル: Sender.cs プロジェクト: nkmajeti/rhino-tools
        public void Send()
        {
            var enumerator = new AsyncEnumerator(
                string.Format("Sending {0} messages to {1}", Messages.Length,
                              Destination)
                );

            logger.DebugFormat("Starting to send {0} messages to {1}", Messages.Length, Destination);
            enumerator.BeginExecute(SendInternal(enumerator), result =>
            {
                try
                {
                    enumerator.EndExecute(result);
                }
                catch (Exception exception)
                {
                    logger.Warn("Failed to send message", exception);
                    Failure(exception);
                }
            });
        }
コード例 #45
0
ファイル: Receiver.cs プロジェクト: nkmajeti/rhino-tools
        private IEnumerator<int> ProcessRequest(TcpClient client, AsyncEnumerator ae)
        {
            try
            {
                using (client)
                using (var stream = client.GetStream())
                {
                    var sender = client.Client.RemoteEndPoint;

                    var lenOfDataToReadBuffer = new byte[sizeof(int)];

                    var lenEnumerator = new AsyncEnumerator(ae.ToString());
                    try
                    {
                        lenEnumerator.BeginExecute(
                            StreamUtil.ReadBytes(lenOfDataToReadBuffer, stream, lenEnumerator, "length data",false), ae.End());
                    }
                    catch (Exception exception)
                    {
                        logger.Warn("Unable to read length data from " + sender, exception);
                        yield break;
                    }

                    yield return 1;

                    try
                    {
                        lenEnumerator.EndExecute(ae.DequeueAsyncResult());
                    }
                    catch (Exception exception)
                    {
                        logger.Warn("Unable to read length data from " + sender, exception);
                        yield break;
                    }

                    var lengthOfDataToRead = BitConverter.ToInt32(lenOfDataToReadBuffer, 0);
                    if (lengthOfDataToRead < 0)
                    {
                        logger.WarnFormat("Got invalid length {0} from sender {1}", lengthOfDataToRead, sender);
                        yield break;
                    }
                    logger.DebugFormat("Reading {0} bytes from {1}", lengthOfDataToRead, sender);

                    var buffer = new byte[lengthOfDataToRead];

                    var readBufferEnumerator = new AsyncEnumerator(ae.ToString());
                    try
                    {
                        readBufferEnumerator.BeginExecute(
                            StreamUtil.ReadBytes(buffer, stream, readBufferEnumerator, "message data", false), ae.End());
                    }
                    catch (Exception exception)
                    {
                        logger.Warn("Unable to read message data from " + sender, exception);
                        yield break;
                    }
                    yield return 1;

                    try
                    {
                        readBufferEnumerator.EndExecute(ae.DequeueAsyncResult());
                    }
                    catch (Exception exception)
                    {
                        logger.Warn("Unable to read message data from " + sender, exception);
                        yield break;
                    }

                    Message[] messages = null;
                    try
                    {
                        messages = SerializationExtensions.ToMessages(buffer);
                        logger.DebugFormat("Deserialized {0} messages from {1}", messages.Length, sender);
                    }
                    catch (Exception exception)
                    {
                        logger.Warn("Failed to deserialize messages from " + sender, exception);
                    }

                    if (messages == null)
                    {
                        try
                        {
                            stream.BeginWrite(ProtocolConstants.SerializationFailureBuffer, 0,
                                              ProtocolConstants.SerializationFailureBuffer.Length, ae.End(), null);
                        }
                        catch (Exception exception)
                        {
                            logger.Warn("Unable to send serialization format error to " + sender, exception);
                            yield break;
                        }
                        yield return 1;
                        try
                        {
                            stream.EndWrite(ae.DequeueAsyncResult());
                        }
                        catch (Exception exception)
                        {
                            logger.Warn("Unable to send serialization format error to " + sender, exception);
                        }

                        yield break;
                    }

                    IMessageAcceptance acceptance = null;
                    byte[] errorBytes = null;
                    try
                    {
                        acceptance = acceptMessages(messages);
                        logger.DebugFormat("All messages from {0} were accepted", sender);
                    }
                    catch (QueueDoesNotExistsException)
                    {
                        logger.WarnFormat("Failed to accept messages from {0} because queue does not exists", sender);
                        errorBytes = ProtocolConstants.QueueDoesNoExiststBuffer;
                    }
                    catch (Exception exception)
                    {
                        errorBytes = ProtocolConstants.ProcessingFailureBuffer;
                        logger.Warn("Failed to accept messages from " + sender, exception);
                    }

                    if (errorBytes != null)
                    {
                        try
                        {
                            stream.BeginWrite(errorBytes, 0,
                                              errorBytes.Length, ae.End(), null);
                        }
                        catch (Exception exception)
                        {
                            logger.Warn("Unable to send processing failure from " + sender, exception);
                            yield break;
                        }
                        yield return 1;
                        try
                        {
                            stream.EndWrite(ae.DequeueAsyncResult());
                        }
                        catch (Exception exception)
                        {
                            logger.Warn("Unable to send processing failure from " + sender, exception);
                        }
                        yield break;
                    }

                    logger.DebugFormat("Sending reciept notice to {0}", sender);
                    try
                    {
                        stream.BeginWrite(ProtocolConstants.RecievedBuffer, 0, ProtocolConstants.RecievedBuffer.Length,
                                          ae.End(), null);
                    }
                    catch (Exception exception)
                    {
                        logger.Warn("Could not send reciept notice to " + sender, exception);
                        acceptance.Abort();
                        yield break;
                    }
                    yield return 1;

                    try
                    {
                        stream.EndWrite(ae.DequeueAsyncResult());
                    }
                    catch (Exception exception)
                    {
                        logger.Warn("Could not send reciept notice to " + sender, exception);
                        acceptance.Abort();
                        yield break;
                    }

                    logger.DebugFormat("Reading acknowledgement about accepting messages to {0}", sender);

                    var acknowledgementBuffer = new byte[ProtocolConstants.AcknowledgedBuffer.Length];

                    var readAcknoweldgement = new AsyncEnumerator(ae.ToString());
                    try
                    {
                        readAcknoweldgement.BeginExecute(
                            StreamUtil.ReadBytes(acknowledgementBuffer, stream, readAcknoweldgement, "acknowledgement", false),
                            ae.End());
                    }
                    catch (Exception exception)
                    {
                        logger.Warn("Error reading acknowledgement from " + sender, exception);
                        acceptance.Abort();
                        yield break;
                    }
                    yield return 1;
                    try
                    {
                        readAcknoweldgement.EndExecute(ae.DequeueAsyncResult());
                    }
                    catch (Exception exception)
                    {
                        logger.Warn("Error reading acknowledgement from " + sender, exception);
                        acceptance.Abort();
                        yield break;
                    }

                    var senderResponse = Encoding.Unicode.GetString(acknowledgementBuffer);
                    if (senderResponse != ProtocolConstants.Acknowledged)
                    {
                        logger.WarnFormat("Sender did not respond with proper acknowledgement, the reply was {0}",
                                          senderResponse);
                        acceptance.Abort();
                    }

                    bool commitSuccessful;
                    try
                    {
                        acceptance.Commit();
                        commitSuccessful = true;
                    }
                    catch (Exception exception)
                    {
                        logger.Warn("Unable to commit messages from " + sender, exception);
                        commitSuccessful = false;
                    }

                    if (commitSuccessful == false)
                    {
                        bool writeSuccessful;
                        try
                        {
                            stream.BeginWrite(ProtocolConstants.RevertBuffer, 0, ProtocolConstants.RevertBuffer.Length,
                                              ae.End(),
                                              null);
                            writeSuccessful = true;
                        }
                        catch (Exception e)
                        {
                            logger.Warn("Unable to send revert message to " + sender, e);
                            writeSuccessful = false;
                        }

                        if (writeSuccessful)
                        {
                            yield return 1;

                            try
                            {
                                stream.EndWrite(ae.DequeueAsyncResult());
                            }
                            catch (Exception exception)
                            {
                                logger.Warn("Unable to send revert message to " + sender, exception);
                            }
                        }
                    }
                }
            }
            finally
            {
                var copy = CompletedRecievingMessages;
                if (copy != null)
                    copy();
            }
        }
コード例 #46
0
ファイル: Sender.cs プロジェクト: nkmajeti/rhino-tools
        private IEnumerator<int> SendInternal(AsyncEnumerator ae)
        {
            try
            {
                using (var client = new TcpClient())
                {
                    try
                    {
                        client.BeginConnect(Destination.Host, Destination.Port,
                                            ae.End(),
                                            null);
                    }
                    catch (Exception exception)
                    {
                        logger.WarnFormat("Failed to connect to {0} because {1}", Destination, exception);
                        Failure(exception);
                        yield break;
                    }

                    yield return 1;

                    try
                    {
                        client.EndConnect(ae.DequeueAsyncResult());
                    }
                    catch (Exception exception)
                    {
                        logger.WarnFormat("Failed to connect to {0} because {1}", Destination, exception);
                        Failure(exception);
                        yield break;
                    }

                    logger.DebugFormat("Successfully connected to {0}", Destination);

                    using (var stream = client.GetStream())
                    {
                        var buffer = Messages.Serialize();

                        var bufferLenInBytes = BitConverter.GetBytes(buffer.Length);

                        logger.DebugFormat("Writing length of {0} bytes to {1}", buffer.Length, Destination);

                        try
                        {
                            stream.BeginWrite(bufferLenInBytes, 0, bufferLenInBytes.Length, ae.End(), null);
                        }
                        catch (Exception exception)
                        {
                            logger.WarnFormat("Could not write to {0} because {1}", Destination,
                                              exception);
                            Failure(exception);
                            yield break;
                        }

                        yield return 1;

                        try
                        {
                            stream.EndWrite(ae.DequeueAsyncResult());
                        }
                        catch (Exception exception)
                        {
                            logger.WarnFormat("Could not write to {0} because {1}", Destination,
                                              exception);
                            Failure(exception);
                            yield break;
                        }

                        logger.DebugFormat("Writing {0} bytes to {1}", buffer.Length, Destination);

                        try
                        {
                            stream.BeginWrite(buffer, 0, buffer.Length, ae.End(), null);
                        }
                        catch (Exception exception)
                        {
                            logger.WarnFormat("Could not write to {0} because {1}", Destination,
                                            exception);
                            Failure(exception);
                            yield break;
                        }

                        yield return 1;

                        try
                        {
                            stream.EndWrite(ae.DequeueAsyncResult());
                        }
                        catch (Exception exception)
                        {
                            logger.WarnFormat("Could not write to {0} because {1}", Destination,
                                              exception);
                            Failure(exception);
                            yield break;
                        }

                        logger.DebugFormat("Successfully wrote to {0}", Destination);

                        var recieveBuffer = new byte[ProtocolConstants.RecievedBuffer.Length];
                        var readConfirmationEnumerator = new AsyncEnumerator();

                        try
                        {
                            readConfirmationEnumerator.BeginExecute(
                                StreamUtil.ReadBytes(recieveBuffer, stream, readConfirmationEnumerator, "recieve confirmation", false), ae.End());
                        }
                        catch (Exception exception)
                        {
                            logger.WarnFormat("Could not read confirmation from {0} because {1}", Destination,
                                              exception);
                            Failure(exception);
                            yield break;
                        }

                        yield return 1;

                        try
                        {
                            readConfirmationEnumerator.EndExecute(ae.DequeueAsyncResult());
                        }
                        catch (Exception exception)
                        {
                            logger.WarnFormat("Could not read confirmation from {0} because {1}", Destination,
                                              exception);
                            Failure(exception);
                            yield break;
                        }

                        var recieveRespone = Encoding.Unicode.GetString(recieveBuffer);
                        if (recieveRespone == ProtocolConstants.QueueDoesNotExists)
                        {
                            logger.WarnFormat(
                                "Response from reciever {0} is that queue does not exists",
                                Destination);
                            Failure(new QueueDoesNotExistsException());
                            yield break;
                        }
                        else if(recieveRespone!=ProtocolConstants.Recieved)
                        {
                            logger.WarnFormat(
                                "Response from reciever {0} is not the expected one, unexpected response was: {1}",
                                Destination, recieveRespone);
                            Failure(null);
                            yield break;
                        }

                        try
                        {
                            stream.BeginWrite(ProtocolConstants.AcknowledgedBuffer, 0,
                                              ProtocolConstants.AcknowledgedBuffer.Length, ae.End(), null);
                        }
                        catch (Exception exception)
                        {
                            logger.WarnFormat("Failed to write acknowledgement to reciever {0} because {1}",
                                              Destination, exception);
                            Failure(exception);
                            yield break;
                        }

                        yield return 1;

                        try
                        {
                            stream.EndWrite(ae.DequeueAsyncResult());
                        }
                        catch (Exception exception)
                        {
                            logger.WarnFormat("Failed to write acknowledgement to reciever {0} because {1}",
                                              Destination, exception);
                            Failure(exception);
                            yield break;
                        }

                        var bookmarks = Success();

                        buffer = new byte[ProtocolConstants.RevertBuffer.Length];
                        var readRevertMessage = new AsyncEnumerator(ae.ToString());
                        bool startingToReadFailed = false;
                        try
                        {
                            readRevertMessage.BeginExecute(
                                StreamUtil.ReadBytes(buffer, stream, readRevertMessage, "revert", true), ae.End());
                        }
                        catch (Exception)
                        {
                            //more or less expected
                            startingToReadFailed = true;
                        }
                        if (startingToReadFailed)
                            yield break;
                        yield return 1;
                        try
                        {
                            readRevertMessage.EndExecute(ae.DequeueAsyncResult());
                            var revert = Encoding.Unicode.GetString(buffer);
                            if (revert == ProtocolConstants.Revert)
                            {
                                logger.Warn("Got back revert message from receiver, reverting send");
                                Revert(bookmarks);
                            }
                        }
                        catch (Exception)
                        {
                            // expected, there is nothing to do here, the
                            // reciever didn't report anything for us
                        }

                    }
                }
            }
            finally
            {
                var completed = SendCompleted;
                if (completed != null)
                    completed();
            }
        }
コード例 #47
0
ファイル: Program.cs プロジェクト: blaquee/helion-proxy
        static IEnumerator<Int32> ServerConnectRemote(AsyncEnumerator ae, ServerState server, IPEndPoint ipe, TcpClient local)
        {
            // establish a client proxy -> real server connection

            var remote = new TcpClient(ipe.AddressFamily);
            var settings = server.settings;
            remote.NoDelay = true;
            remote.LingerState.Enabled = false;

            remote.BeginConnect(IPAddress.Parse(settings.addressforward), settings.portforward, ae.End(), ae);
            yield return 1;

            try
            {
                remote.EndConnect(ae.DequeueAsyncResult());
            }
            catch (SocketException)
            {
                Console.WriteLine("A client failed to connect, has the real server started?");
                local.Close();
                remote.Close();
                remote = null;
            }

            if(remote != null)
            {
                var bufParam = new ClientBufferParam();

                {
                    server.bufferPoolMutex.BeginRegion(SyncGateMode.Exclusive, ae.End());
                    yield return 1;
                    var res = ae.DequeueAsyncResult();
                    server.AllocBuffer(ae, bufParam);
                    server.bufferPoolMutex.EndRegion(res);
                }

                {
                    var newClientState = new ClientState(local, remote);
                    var remoteAe = new AsyncEnumerator();
                    var localAe = new AsyncEnumerator();
                    var bw1 = new BufferWrapper(bufParam.sendbuffer);
                    var bw2 = new BufferWrapper(bufParam.recvbuffer);
                    localAe.BeginExecute(HandleClient(localAe, server, newClientState, local, remote, bw1, server.filterSend), ae.End(), localAe);
                    remoteAe.BeginExecute(HandleClient(remoteAe, server, newClientState, remote, local, bw2, server.filterRecv), ae.End(), remoteAe);

                    Console.WriteLine("Client Connected {0}", local.Client.RemoteEndPoint);

                    yield return 2;
                    for (int x = 0; x < 2; x++)
                    {
                        IAsyncResult ar = ae.DequeueAsyncResult();
                        ((AsyncEnumerator)ar.AsyncState).EndExecute(ar);
                    }
                    bufParam.sendbuffer = bw1.buffer;
                    bufParam.recvbuffer = bw2.buffer;
                }

                {
                    server.bufferPoolMutex.BeginRegion(SyncGateMode.Exclusive, ae.End());
                    yield return 1;
                    var res = ae.DequeueAsyncResult();
                    server.FreeBuffer(ae, bufParam);
                    server.bufferPoolMutex.EndRegion(res);
                }
            }
        }
コード例 #48
0
        static IEnumerator <int> ClientFiber(AsyncEnumerator ae, TcpClient clientSocket)
        {
            Console.WriteLine("ClientFibers ++{0}", Interlocked.Increment(ref clients));
            try
            {
                // original code to do handshaking and connect to remote host
                var ns1 = clientSocket.GetStream();
                var r1  = new BinaryReader(ns1);
                var w1  = new BinaryWriter(ns1);

                if (!(r1.ReadByte() == 5 && r1.ReadByte() == 1))
                {
                    yield break;
                }
                var c = r1.ReadByte();
                for (int i = 0; i < c; ++i)
                {
                    r1.ReadByte();
                }
                w1.Write((byte)5);
                w1.Write((byte)0);

                if (!(r1.ReadByte() == 5 && r1.ReadByte() == 1))
                {
                    yield break;
                }
                if (r1.ReadByte() != 0)
                {
                    yield break;
                }

                byte[] ipAddr   = null;
                string hostname = null;
                var    type     = r1.ReadByte();
                switch (type)
                {
                case 1:
                    ipAddr = r1.ReadBytes(4);
                    break;

                case 3:
                    hostname = Encoding.ASCII.GetString(r1.ReadBytes(r1.ReadByte()));
                    break;

                case 4:
                    throw new Exception();
                }
                var nhport    = r1.ReadInt16();
                var port      = IPAddress.NetworkToHostOrder(nhport);
                var socketout = new TcpClient();
                if (hostname != null)
                {
                    socketout.Connect(hostname, port);
                }
                else
                {
                    socketout.Connect(new IPAddress(ipAddr), port);
                }
                w1.Write((byte)5);
                w1.Write((byte)0);
                w1.Write((byte)0);
                w1.Write(type);
                switch (type)
                {
                case 1:
                    w1.Write(ipAddr);
                    break;

                case 3:
                    w1.Write((byte)hostname.Length);
                    w1.Write(Encoding.ASCII.GetBytes(hostname), 0, hostname.Length);
                    break;
                }
                w1.Write(nhport);
                using (var ns2 = socketout.GetStream())
                {
                    var forwardAe = new AsyncEnumerator()
                    {
                        SyncContext = null
                    };
                    forwardAe.BeginExecute(
                        ForwardingFiber(forwardAe, ns1, ns2), ae.EndVoid(0, forwardAe.EndExecute), null);
                    yield return(1);

                    if (ae.IsCanceled())
                    {
                        yield break;
                    }
                    forwardAe.EndExecute(ae.DequeueAsyncResult());
                }
            }
            finally
            {
                Console.WriteLine("ClientFibers --{0}", Interlocked.Decrement(ref clients));
            }
        }
コード例 #49
0
        public IAsyncResult BeginUpload(String pathname, CloudBlockBlob blob, Action <Int32> blockUploaded, AsyncCallback callback = null, Object state = null)
        {
            var ae = new AsyncEnumerator();

            return(ae.BeginExecute(UploadFileInBlocks(ae, pathname, blob, blockUploaded), callback, state));
        }
コード例 #50
0
        private void m_btnStart_Click(object sender, EventArgs e)
        {
            String[] uris = new String[] {
            "http://Wintellect.com/",
            "http://1.1.1.1/",   // Demonstrates error recovery
            "http://www.Devscovery.com/"
             };

             // Construct an AsyncEnumerator
             m_ae = new AsyncEnumerator();
             // NOTE: The AsyncEnumerator automatically saves the
             // Windows Forms SynchronizationContext with it ensuring
             // that the iterator always runs on the GUI thread;
             // this allows the iterator to access the UI Controls

             // Start iterator asynchonously so that GUI thread doesn't block
             m_ae.BeginExecute(GetWebData(m_ae, uris), m_ae.EndExecute);
        }
コード例 #51
0
ファイル: Program.cs プロジェクト: blaquee/helion-proxy
        static void Main(string[] args)
        {
            Console.WriteLine("Wokf AntiHaxxing Proxy Server by Hunter and Thanatos. Version 1");

            var filter = new Filter();
            var serverState = new ServerState(filter.Recv, filter.Send);

            // a new AsyncEnumerator is constructed for the sake of a new thread of execution
            var ae = new AsyncEnumerator();
            var r = ae.BeginExecute(Server(ae, serverState), ae.EndExecute);
            r.AsyncWaitHandle.WaitOne();
        }
コード例 #52
0
ファイル: RequestTable.cs プロジェクト: RobertHu/TraderServer
        private XElement LoginAction(SerializedObject request, Token token)
        {
            List<string> argList = XmlRequestCommandHelper.GetArguments(request.Content);
            XElement result = null;
            AsyncEnumerator ae = new AsyncEnumerator();
            int appType = argList[3].ToInt();
            IAsyncResult asyncResult = ae.BeginExecute(LoginManager.Default.Login(request, argList[0], argList[1], argList[2], appType, ae), ae.EndExecute);
            if ((int)AppType.Mobile == appType)
            {
                ae.EndExecute(asyncResult);
                token = Trader.Server.Session.SessionManager.Default.GetToken(request.Session);
                result = iExchange3Promotion.Mobile.Manager.Login(token);
            }


            //test:
            if (System.Configuration.ConfigurationManager.AppSettings["MobileDebug"] == "true")
            {
                Dictionary<Guid, Guid> quotePolicyIds = Mobile.Manager.UpdateInstrumentSetting(token, new string[] { });
            }
            return result;
        }
コード例 #53
0
ファイル: Program.cs プロジェクト: blaquee/helion-proxy
        static IEnumerator<Int32> Server(AsyncEnumerator ae, ServerState server)
        {
            var sleeper = new CountdownTimer();
            var settings = server.settings;
            var ipe = new IPEndPoint(IPAddress.Parse(settings.addressforward), settings.portforward);
            var serverSock = new TcpListener(IPAddress.Parse(settings.addresslisten), settings.portlisten);
            serverSock.Start(20);

            Console.WriteLine("Server started");
            Console.WriteLine("Listening on {0}:{1}", settings.addresslisten, settings.portlisten);
            Console.WriteLine("Forwarding to {0}:{1}", settings.addressforward, settings.portforward);
            while (true)
            {
                serverSock.BeginAcceptTcpClient(ae.End(), null);
                yield return 1;

                TcpClient local = null;
                try
                {
                    local = serverSock.EndAcceptTcpClient(ae.DequeueAsyncResult());
                    local.NoDelay = true;
                    local.LingerState.Enabled = false;
                }
                catch (SocketException)
                {
                    Console.WriteLine("A client failed to connect");
                }

                if(local != null)
                {
                    // handle client
                    var localAe = new AsyncEnumerator();
                    localAe.BeginExecute(ServerConnectRemote(localAe, server, ipe, local), localAe.EndExecute, localAe);
                }
            }
        }
コード例 #54
0
 // The BeginHandler method launches an op returns immediately
 // The ASP.NET thread returns back to the thread pool
 // The thread pool waits on the IAsyncResult and then wakes and calls the EndHandler method
 private IAsyncResult BeginHandler(Object sender, EventArgs e, AsyncCallback cb, Object extraData)
 {
     m_lblPic1.Text = m_lblPic2.Text = null;
     m_ae           = new AsyncEnumerator();
     return(m_ae.BeginExecute(GetImages(m_ae), cb, extraData));
 }
コード例 #55
0
 private void ExecuteWithAsyncEnumerator()
 {
     SetStatus("Working..", StatusState.Busy);
     
     AsyncEnumerator ae = new AsyncEnumerator();
     ae.BeginExecute(ExecuteWithAsyncEnumerator(ae), ae.EndExecute, null);
 }
コード例 #56
0
 public void ReadLineAsync()
 {
     AsyncEnumerator ae = new AsyncEnumerator();
     ae.BeginExecute(Process(ae), ae.EndExecute, null);
 }
コード例 #57
0
ファイル: TcpServer.cs プロジェクト: pdckxd/bugtrackingsystem
 public static void Start(TcpListener server)
 {
     AsyncEnumerator ae = new AsyncEnumerator();
      ae.BeginExecute(Process(ae, server), ae.EndExecute, null);
 }