Example #1
1
		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!
		}
Example #2
0
 public static IEnumerator<int> GetInitData(SerializedObject request, DataSet initData, AsyncEnumerator ae)
 {
     XElement result = null;
     long session = request.Session;
     Token token = SessionManager.Default.GetToken(session);
     if (initData == null)
     {
         Application.Default.StateServer.BeginGetInitData(token, null, ae.End(), null);
         yield return 1;
         int sequence;
         initData = Application.Default.StateServer.EndGetInitData(ae.DequeueAsyncResult(), out sequence);
     }
     try
     {
         var data = Init(session, initData);
         int commandSequence = data.Item2;
         DataSet ds = data.Item1;
         var dict = new Dictionary<string, string>()
         {
             {"commandSequence",commandSequence.ToString()},
             {"data",ds.ToXml()}
         };
         result = XmlResultHelper.NewResult(dict);
         request.Content = result;
         SendCenter.Default.Send(request);
     }
     catch (Exception ex)
     {
         request.Content = XmlResultHelper.NewErrorResult(ex.ToString());
         SendCenter.Default.Send(request);
     }
 }
Example #3
0
        private async Task MigrateConversation(
            Conversation conversation, CancellationToken cancellationToken)
        {
            Logger.Debug("Getting messages ...");
            using (AsyncEnumerator <Message> messageEnumerator =
                       await input.GetMessages(conversation.Id, filter))
            {
                while (await messageEnumerator.Move())
                {
                    // Read message.
                    Message message = await messageEnumerator.Read();

                    Logger.Trace("Read message: {0}", message);
                    if (message.MessageType == Enums.InternalMessageType.Unknown)
                    {
                        Logger.Warn("Skip message.");
                        continue;
                    }
                    // Get message group and open new group if necessary.
                    Group group = await grouper.GetGroup(input, conversation, message);

                    Logger.Trace("Group: {0}", group);
                    if (!group.Equals(output.CurrentGroup))
                    {
                        output.EndGroup();
                        output.BeginGroup(group);
                    }
                    // Insert message.
                    await output.InsertMessage(message);

                    // Check cancellation token.
                    cancellationToken.ThrowIfCancellationRequested();
                }
            }
        }
        /// <summary>
        /// Enumerates a given <paramref name="enumerable"/> until the predicate <paramref name="predicate"/> returns true.
        /// </summary>
        private static System.Collections.Generic.IAsyncEnumerable <T> StopAfter <T>(this System.Collections.Generic.IAsyncEnumerable <T> enumerable, Func <T, bool> predicate)
        {
            return(AsyncEnumerable.Create(
                       token =>
            {
                var enumerator = enumerable.GetAsyncEnumerator(token);
                bool stop = false;
                return AsyncEnumerator.Create(
                    async() =>
                {
                    if (stop)
                    {
                        return false;
                    }

                    if (await enumerator.MoveNextAsync(token))
                    {
                        if (!predicate(enumerator.Current))
                        {
                            stop = true;
                        }

                        return true;
                    }

                    return false;
                },
                    () => enumerator.Current,
                    () => enumerator.DisposeAsync());
            }));
        }
Example #5
0
    private static IEnumerator <Int32> PipeClientAsyncEnumerator(AsyncEnumerator ae, String serverName, String message)
    {
        // Each client object performs asynchronous operations on this pipe
        using (var pipe = new NamedPipeClientStream(serverName, "Echo",
                                                    PipeDirection.InOut, PipeOptions.Asynchronous | PipeOptions.WriteThrough)) {
            pipe.Connect(); // Must Connect before setting ReadMode
            pipe.ReadMode = PipeTransmissionMode.Message;

            // Asynchronously send data to the server
            Byte[] output = Encoding.UTF8.GetBytes(message);
            pipe.BeginWrite(output, 0, output.Length, ae.End(), null);
            yield return(1);

            // The data was sent to the server
            pipe.EndWrite(ae.DequeueAsyncResult());

            // Asynchronously read the server's response
            Byte[] data = new Byte[1000];
            pipe.BeginRead(data, 0, data.Length, ae.End(), data);
            yield return(1);

            // The server responded, display the response and close out connection
            Int32 bytesRead = pipe.EndRead(ae.DequeueAsyncResult());

            Console.WriteLine("Server response: " + Encoding.UTF8.GetString(data, 0, bytesRead));
        } // Close();
    }
Example #6
0
        public static System.Collections.Generic.IAsyncEnumerable <T> CreateSingleProducerTaskAsyncEnumerable <T>(
            Func <Task <IEnumerable <T> > > producerTaskFunc)
            where T : ResultBase
        {
            Task <IEnumerator <T> > producerTask = Task.Run(async() =>
            {
                var enumerable = await producerTaskFunc();
                return(enumerable.GetEnumerator());
            });
            IEnumerator <T> enumerator = Enumerable.Empty <T>().GetEnumerator();

            return(AsyncEnumerable.Create(
                       (token) => AsyncEnumerator.Create(
                           async() =>
            {
                enumerator = await producerTask;
                return enumerator.MoveNext();
            },
                           () => enumerator.Current,
                           () =>
            {
                enumerator.Dispose();
                return new ValueTask();
            })));
        }
Example #7
0
        /// <summary>
        /// remove package from all feeds
        /// тут нужны перегрузки для конкретного фида, либо отдельный фид комбайнить, тогда нужен злой конструктор фида как у нугет репоза
        /// </summary>
        /// <param name="nuGetPackage"></param>
        /// <returns></returns>
        public AsyncEnumerable <bool> Remove(NuGetPackage nuGetPackage)
        {
            var enumerator = new AsyncEnumerator <bool>(this.nuGetRepository.Remove(nuGetPackage));
            var enumerable = AsyncEnumerable.FromResult(enumerator);

            return(enumerable);
        }
Example #8
0
        private static IEnumerator <int> GenerateTransferTask(
            AsyncEnumerator ae, HttpContext context, string url)
        {
            WebRequest request = WebRequest.Create(url);

            request.BeginGetResponse(ae.End(), null);
            yield return(1);

            using (WebResponse response = request.EndGetResponse(ae.DequeueAsyncResult()))
            {
                Stream streamIn  = response.GetResponseStream();
                Stream streamOut = context.Response.OutputStream;
                byte[] buffer    = new byte[1024];

                while (true)
                {
                    streamIn.BeginRead(buffer, 0, buffer.Length, ae.End(), null);
                    yield return(1);

                    int lengthRead = streamIn.EndRead(ae.DequeueAsyncResult());

                    if (lengthRead <= 0)
                    {
                        break;
                    }

                    streamOut.BeginWrite(buffer, 0, lengthRead, ae.End(), null);
                    yield return(1);

                    streamOut.EndWrite(ae.DequeueAsyncResult());
                }
            }
        }
Example #9
0
    public static IAsyncEnumerable <TDocument> ToAsyncEnumerable <TDocument>(
        this IAsyncCursorSource <TDocument> source,
        CancellationToken cancellationToken = default(CancellationToken))
    {
        return(AsyncEnumerable.Create(
                   token =>
        {
            IAsyncCursor <TDocument>?cursor = null;

            async ValueTask <bool> MoveNextAsync()
            {
                cursor ??= await source.ToCursorAsync(cancellationToken);

                return await cursor.MoveNextAsync(token);
            }

            return AsyncEnumerator.Create(
                MoveNextAsync,
                () => cursor?.Current ?? ImmutableList <TDocument> .Empty,
                () =>
            {
                cursor?.Dispose();
                return default;
            });
        })
               .SelectMany(x => x.ToAsyncEnumerable()));
    }
        private static IEnumerator <int> CopyStream(AsyncEnumerator ae, Stream readStream, Stream writeStream)
        {
            byte[][] buffer = new byte[][]
            {
                new byte[8192],
                new byte[8192]
            };
            int bytesRead     = 0;
            int currentBuffer = 0;

            ae.AddAsync <IAsyncResult>(readStream.BeginRead(buffer[currentBuffer], 0, buffer[0].Length, ae.GetAsyncCallback(), null));
            yield return(1);

            for (bytesRead = readStream.EndRead(ae.CompletedAsyncResults[0]); bytesRead > 0; bytesRead = readStream.EndRead(ae.CompletedAsyncResults[1]))
            {
                ae.AddAsync <IAsyncResult>(writeStream.BeginWrite(buffer[currentBuffer % 2], 0, bytesRead, ae.GetAsyncCallback(), null));
                currentBuffer++;
                ae.AddAsync <IAsyncResult>(readStream.BeginRead(buffer[currentBuffer % 2], 0, buffer[currentBuffer % 2].Length, ae.GetAsyncCallback(), null));
                yield return(2);

                writeStream.EndWrite(ae.CompletedAsyncResults[0]);
            }
            ae.End();
            yield break;
        }
Example #11
0
        private static IEnumerator <Int32> CopyStream(AsyncEnumerator <Int64> ae, Stream source, Stream destination, Int32 bufferSize, Action <Int64> reportProgress)
        {
            Byte[] buffer         = new Byte[bufferSize];
            Int64  totalBytesRead = 0;

            while (true)
            {
                ae.SetOperationTag("Reading from source stream");
                // Read whichever is smaller (number of bytes left to read OR the buffer size)
                source.BeginRead(buffer, 0, buffer.Length, ae.End(), null);
                yield return(1);

                Int32 bytesReadThisTime = source.EndRead(ae.DequeueAsyncResult());
                totalBytesRead += bytesReadThisTime;

                ae.SetOperationTag("Writing to destination stream");
                destination.BeginWrite(buffer, 0, bytesReadThisTime, ae.End(), null);
                yield return(1);

                destination.EndWrite(ae.DequeueAsyncResult());

                if (reportProgress != null)
                {
                    reportProgress(totalBytesRead);
                }
                if (bytesReadThisTime < buffer.Length)
                {
                    break;
                }
            }
            ae.Result = totalBytesRead;
        }
Example #12
0
        public void StartAsync(HttpContext context, string url)
        {
            this.m_asyncEnumerator = new AsyncEnumerator();
            var asyncTask = GenerateTransferTask(this.m_asyncEnumerator, context, url);

            this.m_asyncEnumerator.BeginExecute(asyncTask, this.EndExecuteCallback);
        }
Example #13
0
    private static IEnumerator<Int32> ProcessAllAndEachOps(AsyncEnumerator ae, String[] urls)
    {
        Int32 numOps = urls.Length;

          // Issue all the asynchronous operation(s) so they run concurrently
          for (Int32 n = 0; n < numOps; n++) {
         WebRequest wr = WebRequest.Create(urls[n]);
         wr.BeginGetResponse(ae.End(), wr);
          }

          // Have AsyncEnumerator wait until ALL operations complete
          yield return numOps;

          Console.WriteLine("All the operations completed:");
          for (Int32 n = 0; n < numOps; n++) {
         ProcessCompletedWebRequest(ae.DequeueAsyncResult());
          }

          Console.WriteLine(); // *** Blank line between demos ***
          System.Diagnostics.Debugger.Break();

          // Issue all the asynchronous operation(s) so they run concurrently
          for (Int32 n = 0; n < numOps; n++) {
         WebRequest wr = WebRequest.Create(urls[n]);
         wr.BeginGetResponse(ae.End(), wr);
          }

          for (Int32 n = 0; n < numOps; n++) {
         // Have AsyncEnumerator wait until EACH operation completes
         yield return 1;

         Console.WriteLine("An operation completed:");
         ProcessCompletedWebRequest(ae.DequeueAsyncResult());
          }
    }
Example #14
0
        public static System.Collections.Generic.IAsyncEnumerable <T> ToResultsAsyncEnumerable <T>(this IEnumerable <Task <T> > tasks)
        {
            return(AsyncEnumerable.Create(
                       (token) =>
            {
                var enumerator = tasks.GetEnumerator();
                T current = default;

                return AsyncEnumerator.Create(
                    async() =>
                {
                    if (enumerator.MoveNext())
                    {
                        current = await enumerator.Current;
                        return true;
                    }

                    return false;
                },
                    () => current,
                    () =>
                {
                    enumerator.Dispose();
                    return new ValueTask();
                });
            }));
        }
        public void TestExceptionPropagation()
        {
            var srcAsyncEnumerator = new AsyncEnumerator <int>();

            srcAsyncEnumerator.Consumer.Fail(new TestUtils.SomeTestException());

            var cachedEnumerable = new CachingAsyncEnumerable <int>(srcAsyncEnumerator);

            for (int i = 0; i < 10; i++)
            {
                var innerEnumerator = cachedEnumerable.GetEnumerator();
                try
                {
                    innerEnumerator.MoveNextAsync().AwaitSynchronously();
                    Assert.Fail();
                }
                catch (TestUtils.SomeTestException)
                {
                }

                // CachingAsyncEnumerable is implemented to propagate Exception only once and to return
                // false on subsequent calls to MoveNext. Contract also allows to propagate exception
                // multiple times
                Assert.IsFalse(innerEnumerator.MoveNextAsync().AwaitSynchronously());
            }
        }
        private IEnumerator <Int32> GetImagesFromGoogle(AsyncEnumerator ae, string searchUrl, Int32 imageNumber)
        {
            InitiateWebRequest(ae, searchUrl);
            yield return(1);

            String resultPage;

            using (WebResponse response = GetWebResponse(ae.DequeueAsyncResult()))
            {
                resultPage = GetSearchResutlPage(response);
            }
            IEnumerable <String> imageURIs = GetImageURIFromResultPage(resultPage);
            int currentURI = 0;

            Int32 _downloaded = 0;

            while (_downloaded < imageNumber && currentURI < imageURIs.Count())
            {
                InitiateWebRequest(ae, imageURIs.ElementAt(currentURI++));
                yield return(1);

                try
                {
                    using (WebResponse response = GetWebResponse(ae.DequeueAsyncResult()))
                    {
                        _GoogledImages.Add(GetImageFromResponse(response));
                        _downloaded++;
                    }
                }
                catch (Exception e)
                {
                }
            }
            yield  break;
        }
Example #17
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);
        }
 private IEnumerator<Int32> GetImagesFromGoogle(AsyncEnumerator ae,string searchUrl,Int32 imageNumber)
 {
     InitiateWebRequest(ae,searchUrl);
     yield return 1;
     String resultPage;
     using (WebResponse response = GetWebResponse(ae.DequeueAsyncResult()))
     {
          resultPage = GetSearchResutlPage(response);  
     }
         IEnumerable<String> imageURIs = GetImageURIFromResultPage(resultPage) ;
          int currentURI=0;
        
          Int32 _downloaded=0;
          while (_downloaded < imageNumber && currentURI < imageURIs.Count())
          {
              InitiateWebRequest(ae, imageURIs.ElementAt(currentURI++));
              yield return 1;
              try
              {
                  using (WebResponse response = GetWebResponse(ae.DequeueAsyncResult()))
                  {
                      _GoogledImages.Add(GetImageFromResponse(response));
                      _downloaded++;
                  }
              }
              catch (Exception e)
              {
              }
          }
     yield  break;
    }
Example #19
0
    public static async Task EnumerateAsync <T>(this AsyncEnumerator <T> enumerator, Func <T, Task> asyncAction)
    {
        try
        {
            while (await enumerator.MoveNextAsync())
            {
                await asyncAction(enumerator.Current);
            }
        }
        catch
        {
            try
            {
                while (await enumerator.MoveNextAsync())
                {
                    ;
                }
            }
            catch
            {
                // Ignore
            }

            throw;
        }
    }
    public IAsyncEnumerable <TDocument> FindAsyncEnumerable <TDocument>(IMongoCollection <TDocument> collection, FilterDefinition <TDocument> filter)
    {
        IAsyncEnumerable <TDocument> a = AsyncEnumerable.Create(
            token =>
        {
            IAsyncCursor <TDocument>?cursor = null;

            async ValueTask <bool> MoveNextAsync()
            {
                cursor ??= await collection.FindAsync(filter, null, token);

                return(await cursor.MoveNextAsync(token));
            }

            return(AsyncEnumerator.Create(
                       MoveNextAsync,
                       () => cursor?.Current ?? ImmutableList <TDocument> .Empty,
                       () =>
            {
                cursor?.Dispose();
                return default;
            }));
        })
                                         .SelectMany(x => x.ToAsyncEnumerable());

        return(a);
    }
Example #21
0
        private static IEnumerator <Int32> FetchStockQuotesAsyncEnumerator(AsyncEnumerator ae, WebService svc)
        {
            svc.BeginFetchStockQuotes(ae.End(), null);
            yield return(1);

            IStockQuote qt = svc.EndFetchStockQuotes(ae.DequeueAsyncResult());
        }
Example #22
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);
            }
        }
Example #23
0
        public static IEnumerator <int> ReadBytes(
            byte[] buffer, Stream stream, AsyncEnumerator ae, string type, bool expectedToHaveNoData)
        {
            var totalBytesRead = 0;

            while (totalBytesRead < buffer.Length)
            {
                stream.BeginRead(buffer, totalBytesRead, buffer.Length - totalBytesRead, ae.End(), null);

                yield return(1);

                int bytesRead = stream.EndRead(ae.DequeueAsyncResult());

                if (bytesRead == 0)
                {
                    if (expectedToHaveNoData)
                    {
                        yield break;
                    }

                    throw new InvalidOperationException("Could not read value for " + type);
                }

                totalBytesRead += bytesRead;
            }
        }
Example #24
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);
            }
        }
        public async Task LambdaIsNotCalledIfSequenceIsEmpty()
        {
            bool lambdaCalled = false;
            await AsyncEnumerator.Empty <int>().ForEach(_ => lambdaCalled = true).ConfigureAwait(true);

            lambdaCalled.Should().BeFalse();
        }
Example #26
0
        public void TestCompleteSuccessfullyWithFasterProducer()
        {
            AsyncEnumerator <int> enumerator = new AsyncEnumerator <int>();
            var consumer = enumerator.Consumer;

            int         cnt        = 0;
            List <Task> yieldTasks = new List <Task>();

            yieldTasks.Add(consumer.YieldAsync(cnt++));
            yieldTasks.Add(consumer.YieldAsync(cnt++));
            yieldTasks.Add(consumer.YieldAsync(cnt++));

            consumer.Complete();

            enumerator.ProceedToCompletion();

            Task.WaitAll(yieldTasks.ToArray());

            try
            {
                consumer.YieldAsync(1); // must raise exception
            }
            catch (InvalidOperationException)
            { }
        }
Example #27
0
        /// <summary>
        /// remove package from all feeds
        /// (feature)
        /// </summary>
        /// <param name="nuGetPackage"></param>
        /// <returns></returns>
        internal IEnumerable <bool> Remove(NuGetPackage nuGetPackage)
        {
            var removeTask = this.nuGetRepository.Remove(nuGetPackage);

            var enumerator = new AsyncEnumerator <bool>(removeTask);

            return(new AsyncEnumerable <bool>(enumerator));
        }
Example #28
0
        /// <summary>
        /// add or update new package to all feeds
        /// (feature)
        /// </summary>
        /// <param name="nuGetPackage"></param>
        /// <returns></returns>
        internal IEnumerable <bool> Add(NuGetPackage nuGetPackage)
        {
            var uploadTask = this.nuGetRepository.Upload(nuGetPackage);

            var enumerator = new AsyncEnumerator <bool>(uploadTask);

            return(new AsyncEnumerable <bool>(enumerator));
        }
 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);
 }
Example #30
0
        private static async AsyncEnumerator <int> ExceptionTest1()
        {
            var yield = await AsyncEnumerator <int> .Capture();

            await yield.Return(1);

            throw new Exception();
        }
Example #31
0
 protected override async Task ExecuteYield(IAsyncEnumerable <Row> rows, AsyncEnumerator <Row> .Yield yield,
                                            CancellationToken cancellationToken = default)
 {
     foreach (User user in MySimpleDal.GetUsers())
     {
         await @yield.ReturnAsync(Row.FromObject(user));
     }
 }
        private static IEnumerator <NuGetPackage> Synchronized(AsyncEnumerator <NuGetPackage> async, Func <IQueryable <NuGetPackage>, IQueryable <NuGetPackage> > getNotEvaluated)
        {
            var syncList = new AsyncEnumerable <NuGetPackage>(async);

            var withFilter = getNotEvaluated(syncList.AsQueryable());

            return(withFilter.GetEnumerator());
        }
Example #33
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);
 }
        private void ExecuteWithAsyncEnumerator()
        {
            SetStatus("Working..", StatusState.Busy);

            AsyncEnumerator ae = new AsyncEnumerator();

            ae.BeginExecute(ExecuteWithAsyncEnumerator(ae), ae.EndExecute, null);
        }
Example #35
0
 protected override async Task ExecuteYield(IAsyncEnumerable <Row> rows, AsyncEnumerator <Row> .Yield yield,
                                            CancellationToken cancellationToken = default)
 {
     foreach (Row row in rowsToReturn)
     {
         await yield.ReturnAsync(row);
     }
 }
Example #36
0
 public static IAsyncEnumerable <T> ToAsyncEnumerable <T>(this IEnumerator <T> enumerator)
 =>
 AsyncEnumerable.Create((cancellationToken)
                        => AsyncEnumerator.Create(
                            () => new ValueTask <bool>(enumerator.MoveNext()),
                            () => enumerator.Current,
                            () => new ValueTask())
                        );
Example #37
0
 public IEnumerator<int> Login(SerializedObject request, string loginID, string password, string version, int appType, AsyncEnumerator ae)
 {
     long session = request.Session;
     string connectionString = SettingManager.Default.ConnectionString;
     IsFailedCountExceed(loginID, password, connectionString);
     LoginParameter loginParameter = new LoginParameter();
     loginParameter.CompanyName = string.Empty;
     if (loginID == String.Empty)
     {
         AuditHelper.AddIllegalLogin(AppType.TradingConsole, loginID, password, this.GetLocalIP());
         Application.Default.TradingConsoleServer.SaveLoginFail(loginID, password, GetLocalIP());
         SendErrorResult(request);
         yield break;
     }
     string message = string.Empty;
     Application.Default.ParticipantService.BeginLogin(loginID, password, ae.End(), null);
     yield return 1;
     loginParameter.UserID = Application.Default.ParticipantService.EndLogin(ae.DequeueAsyncResult());
     if (loginParameter.UserID == Guid.Empty)
     {
         _Logger.ErrorFormat("{0} is not a valid user", loginID);
     }
     else
     {
         Guid programID = new Guid(SettingManager.Default.GetLoginSetting("TradingConsole"));
         Guid permissionID = new Guid(SettingManager.Default.GetLoginSetting("Run"));
         Application.Default.SecurityService.BeginCheckPermission(loginParameter.UserID, programID, permissionID, "", "", loginParameter.UserID, ae.End(), null);
         yield return 1;
         bool isAuthrized = Application.Default.SecurityService.EndCheckPermission(ae.DequeueAsyncResult(), out message);
         if (!isAuthrized)
         {
             _Logger.ErrorFormat("{0} doesn't have the right to login trader", loginID);
             loginParameter.UserID = Guid.Empty;
         }
         else
         {
             Token token = new Token(Guid.Empty, UserType.Customer, (AppType)appType);
             token.UserID = loginParameter.UserID;
             token.SessionID = session.ToString();
             SessionManager.Default.AddToken(session, token);
             Application.Default.StateServer.BeginLogin(token, ae.End(), null);
             yield return 1;
             bool isStateServerLogined = Application.Default.StateServer.EndLogin(ae.DequeueAsyncResult());
             SetLoginParameter(loginParameter, session, password, version, appType, isStateServerLogined, token);
         }
     }
     if (loginParameter.UserID == Guid.Empty)
     {
         AuditHelper.AddIllegalLogin(AppType.TradingConsole, loginID, password, this.GetLocalIP());
         Application.Default.TradingConsoleServer.SaveLoginFail(loginID, password, GetLocalIP());
         SendErrorResult(request);
     }
     else
     {
         SetResult(request, loginParameter, session, loginID, password, version, appType, connectionString);
     }
 }
Example #38
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));
    }
		private IEnumerator<Int32> GetImages(AsyncEnumerator ae)
		{
			ae.ThrowOnMissingDiscardGroup(true);

			// Request all the images asynchronously
			WebRequest[] requests = new WebRequest[]
			                        {
			                        	WebRequest.Create(_imageUris[0]),
			                        	WebRequest.Create(m_chkSimFailure.Checked ? _imageUris[2] : _imageUris[1])
			                        };

			for(Int32 n = 0; n < requests.Length; n++)
				requests[n].BeginGetResponse(
					ae.EndVoid(0, asyncResult => { requests[(Int32) asyncResult.AsyncState].EndGetResponse(asyncResult).Close(); }), n);

			// Set timeout if specified.
			Int32 timeout;
			if(Int32.TryParse(m_txtServerTime.Text, out timeout))
				ae.SetCancelTimeout(timeout, null);

			// WaitAsync for all operations to complete (or timeout)
			yield return requests.Length;
			if(ae.IsCanceled())
			{
				m_lblPic1.Text = "Server couldn't process the request in the specified time.";
				yield break;
			}

			for(Int32 n = 0; n < requests.Length; n++)
			{
				IAsyncResult result = ae.DequeueAsyncResult();
				Int32 reqNum = (Int32) result.AsyncState;
				Label lbl = (reqNum == 0) ? m_lblPic1 : m_lblPic2;
				WebRequest request = requests[reqNum];
				WebResponse response = null;
				try
				{
					response = request.EndGetResponse(result);
					lbl.Text = String.Format("Image at {0} is {1:N0} bytes",
					                         response.ResponseUri, response.ContentLength);
				}
				catch(WebException e)
				{
					lbl.Text = String.Format("Error obtaining image at {0}: {1}",
					                         request.RequestUri, e.Message);
				}
				finally
				{
					if(response != null) response.Close();
				}
			}
		}
 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);
       
 }
Example #41
0
 private IEnumerator<Int32> DownloadString(AsyncEnumerator ae, String uri)
 {
     var request = WebRequest.Create(uri);
      request.BeginGetResponse(ae.End(), null);
      yield return 1;
      var response = (WebResponse) request.EndGetResponse(ae.DequeueAsyncResult());
      Byte[] buffer = new Byte[response.ContentLength];
      using (var stream = response.GetResponseStream()) {
     stream.BeginRead(buffer, 0, buffer.Length, ae.End(), null);
     yield return 1;
     stream.EndRead(ae.DequeueAsyncResult());
      }
      m_textBox.Text = Encoding.UTF8.GetString(buffer, 0, buffer.Length);
 }
Example #42
0
        private static IEnumerator<int> GetAsyncEnumerator(
            AsyncEnumerator ae,
            string urlIn,
            string urlOut,
            Action<double> onProgress,
            Action<int> onComplete)
        {
            onProgress(0);

            var requestIn = WebRequest.Create(urlIn);
            requestIn.BeginGetResponse(ae.End(), null);
            yield return 1;

            using (var responseIn = requestIn.EndGetResponse(ae.DequeueAsyncResult()))
            {
                var streamIn = responseIn.GetResponseStream();

                var requestOut = WebRequest.Create(urlOut);
                requestOut.Method = "POST";

                var totalLength = (int)responseIn.ContentLength;

                requestOut.BeginGetRequestStream(ae.End(), null);
                yield return 1;

                using (var streamOut = requestOut.EndGetRequestStream(ae.DequeueAsyncResult()))
                {
                    var totalRead = 0;
                    var buffer = new byte[10240];

                    while (totalRead < totalLength)
                    {
                        streamIn.BeginRead(buffer, 0, buffer.Length, ae.End(), null);
                        yield return 1;
                        var lengthRead = streamIn.EndRead(ae.DequeueAsyncResult());

                        streamOut.BeginWrite(buffer, 0, lengthRead, ae.End(), null);
                        yield return 1;
                        streamOut.EndWrite(ae.DequeueAsyncResult());

                        totalRead += lengthRead;
                        onProgress(100.0 * totalRead / totalLength);
                    }
                }

                onComplete(totalLength);
            }
        }
 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;   
     }
     
 }
 public static IEnumerator<int> GetInitData(SerializedInfo request,AsyncEnumerator ae)
 {
     Session session = request.ClientInfo.Session;
     Token token = SessionManager.Default.GetToken(session);
     Application.Default.StateServer.BeginGetInitData(token, null, ae.End(), null);
     yield return 1;
     try
     {
         int sequence;
         DataSet initData = Application.Default.StateServer.EndGetInitData(ae.DequeueAsyncResult(), out sequence);
         InitAndSendInitDataInPointer(request,initData);
     }
     catch (Exception ex)
     {
         SendErrorResult(request, ex);
     }
 }
Example #45
0
        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();
        }
Example #46
0
      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
      }
 public IEnumerator<int> AsyncGetInitData(Token token,AsyncEnumerator ae)
 {
     Token currentToken = new Token(token.UserID, token.UserType, AppType.TradingConsole);
     Application.Default.StateServer.BeginGetInitData(currentToken, null, ae.End(), null);
     yield return 1;
     try
     {
         int commandSequence;
         DataSet initData = Application.Default.StateServer.EndGetInitData(ae.DequeueAsyncResult(), out commandSequence);
         OnLoadInitDataCompleted(initData);
     }
     catch (Exception ex)
     {
         _Logger.Error("async getInitData", ex);
         OnLoadInitDataCompleted(null);
         yield break;
     }
 }
Example #48
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));
    }
Example #49
0
 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);
         }
     });
 }
      private static IEnumerator<Int32> CopyStream(AsyncEnumerator<Int64> ae, Stream source, Stream destination, Int32 bufferSize, Action<Int64> reportProgress) {
         Byte[] buffer = new Byte[bufferSize];
         Int64 totalBytesRead = 0;
         while (true) {
            ae.SetOperationTag("Reading from source stream");
            // Read whichever is smaller (number of bytes left to read OR the buffer size)
            source.BeginRead(buffer, 0, buffer.Length, ae.End(), null);
            yield return 1;
            Int32 bytesReadThisTime = source.EndRead(ae.DequeueAsyncResult());
            totalBytesRead += bytesReadThisTime;

            ae.SetOperationTag("Writing to destination stream");
            destination.BeginWrite(buffer, 0, bytesReadThisTime, ae.End(), null);
            yield return 1;
            destination.EndWrite(ae.DequeueAsyncResult());

            if (reportProgress != null) reportProgress(totalBytesRead);
            if (bytesReadThisTime < buffer.Length) break;
         }
         ae.Result = totalBytesRead;
      }
Example #51
0
        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);
                }
            });
        }
 private IEnumerator<Int32> GetImagesFromGoogle(AsyncEnumerator ae,string searchUrl,Int32 imageNumber)
 {
     InitiateWebRequest(ae,searchUrl);
     yield return 1;
     String resultPage;
       _GoogledImages = new List<Image>();
     using (WebResponse response = GetWebResponse(ae.DequeueAsyncResult()))
     {
          resultPage = GetSearchResutlPage(response);  
     }
         IEnumerable<String> imageURIs = GetImageURIFromResultPage(resultPage) ;
          int currentURI=0;
        
          Int32 _downloaded=0;
       //   while (_downloaded < imageNumber && currentURI < imageURIs.Count())
     int i=0;
            while(i<4)
          {
              InitiateWebRequest(ae, imageURIs.ElementAt(currentURI++));
              yield return 1;
              try
              {
                  using (WebResponse response = GetWebResponse(ae.DequeueAsyncResult()))
                  {
                      curImage=GetImageFromResponse(response);
                      _GoogledImages.Add(curImage);
                      _downloaded++;
                  }
              }
              catch (Exception e)
              {
                  Console.WriteLine("caught Webresponse exception" + e);
              }
              i++;
          }
     yield  break;
    }
        private IEnumerator<Int32> DownloadImages(AsyncEnumerator ae)
        {
            ae.ThrowOnMissingDiscardGroup(true);
             GetImages.IsEnabled = false;
             Cancel.IsEnabled = true;
             WebRequest[] requests = new WebRequest[] {
            WebRequest.Create(UriHelper.ConvertRelativeUriStringToAbsolute("Images/Wintellect.jpg")),
            WebRequest.Create(UriHelper.ConvertRelativeUriStringToAbsolute("Images/JeffreyRichter.jpg")),
             };
             for (Int32 requestNum = 0; requestNum < requests.Length; requestNum++) {
            requests[requestNum].BeginGetResponse(
               ae.EndVoid(0, asyncResult => {
                  requests[requestNum].EndGetResponse(asyncResult).Close();
               }), requestNum);
             }

             for (Int32 resultNum = 0; resultNum < requests.Length; resultNum++) {
            yield return 1;
            if (ae.IsCanceled()) break;
            IAsyncResult asyncResult = ae.DequeueAsyncResult();
            Int32 index = (Int32)asyncResult.AsyncState;
            try {
               using (WebResponse response = requests[index].EndGetResponse(asyncResult)) {
                  using (Stream stream = response.GetResponseStream()) {
                     BitmapImage bitmapImage = new BitmapImage();
                     bitmapImage.SetSource(stream);
                     m_images[index].Source = bitmapImage;
                  }
               }
            }
            catch (WebException e) {
               m_textboxes[index].Text = "Failed: " + e.Message;
            }
             }
             GetImages.IsEnabled = true;
             Cancel.IsEnabled = false;
        }
Example #54
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)
            {
            }
        }
Example #55
0
        public static IEnumerator<int> ReadBytes(
            byte[] buffer, Stream stream, AsyncEnumerator ae, string type, bool expectedToHaveNoData)
        {
            var totalBytesRead = 0;

            while (totalBytesRead < buffer.Length)
            {
                stream.BeginRead(buffer, totalBytesRead, buffer.Length - totalBytesRead, ae.End(), null);

                yield return 1;

                int bytesRead = stream.EndRead(ae.DequeueAsyncResult());

                if(bytesRead == 0)
                {
                    if (expectedToHaveNoData)
                        yield break;

                    throw new InvalidOperationException("Could not read value for " + type);
                }

                totalBytesRead += bytesRead;
            }
        }
Example #56
0
        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;
        }
Example #57
0
        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;
        }
Example #58
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();
            }
        }
        private static IEnumerator<int> GenerateTransferTask(
            AsyncEnumerator ae, HttpContext context, string url)
        {
            WebRequest request = WebRequest.Create(url);
            request.BeginGetResponse(ae.End(), null);
            yield return 1;

            using (WebResponse response = request.EndGetResponse(ae.DequeueAsyncResult()))
            {
                Stream streamIn = response.GetResponseStream();
                Stream streamOut = context.Response.OutputStream;
                byte[] buffer = new byte[1024];

                while (true)
                {
                    streamIn.BeginRead(buffer, 0, buffer.Length, ae.End(), null);
                    yield return 1;
                    int lengthRead = streamIn.EndRead(ae.DequeueAsyncResult());

                    if (lengthRead <= 0) break;

                    streamOut.BeginWrite(buffer, 0, lengthRead, ae.End(), null);
                    yield return 1;
                    streamOut.EndWrite(ae.DequeueAsyncResult());
                }
            }
        }
 public void StartAsync(HttpContext context, string url)
 {
     this.m_asyncEnumerator = new AsyncEnumerator();
     var asyncTask = GenerateTransferTask(this.m_asyncEnumerator, context, url);
     this.m_asyncEnumerator.BeginExecute(asyncTask, this.EndExecuteCallback);
 }