Esempio n. 1
0
        async Task HandleRequest(IConn conn)
        {
            using (conn) {
                var req = await conn.Read(5.Sec());

                try {
                    _env.Debug($"{req}");

                    await _env.SimulateWork(35.Ms());

                    switch (req)
                    {
                    case AddItemRequest r:
                        await AddItem(conn, r);

                        break;

                    case MoveItemRequest r:
                        await MoveItem(conn, r);

                        break;

                    case CountRequest r:
                        var amount = _store.Count();
                        await conn.Write(new CountResponse(amount));

                        break;
                    }
                } catch (Exception ex) {
                    _env.Error($"Error while processing {req}", ex);
                }
            }
        }
Esempio n. 2
0
        public void Run()
        {
            conn = fac.CreateConn();
            cmd  = fac.CreateCmd();

            conn.OpenConn();
            cmd.ExecCmd();
        }
Esempio n. 3
0
        //可以在此切换DB
        //Ifactory fac = new SqlFactory();
        public void Run()
        {
            conn = DataAccess.CreateConn();
            cmd  = DataAccess.CreateCmd();

            conn.OpenConn();
            cmd.ExecCmd();
        }
Esempio n. 4
0
        async Task AddItem(IConn conn, AddItemRequest addItemRequest)
        {
            var quantity = _store.GetItemQuantity(addItemRequest.ItemID);
            var total    = quantity + addItemRequest.Amount;
            var evt      = new ItemAdded(addItemRequest.ItemID, addItemRequest.Amount, total);

            await Commit(evt);

            await conn.Write(new AddItemResponse(addItemRequest.ItemID, addItemRequest.Amount, total));
        }
Esempio n. 5
0
        async Task MoveItem(IConn conn, MoveItemRequest moveItemRequest)
        {
            var wasFrom = _store.GetItemQuantity(moveItemRequest.FromItemID);
            var wasTo   = _store.GetItemQuantity(moveItemRequest.ToItemID);

            if (wasFrom < moveItemRequest.Amount)
            {
                await conn.Write(new ArgumentException("Insufficient amount"));

                return;
            }

            await Commit(
                new ItemAdded(moveItemRequest.ToItemID, moveItemRequest.Amount, wasTo + moveItemRequest.Amount),
                new ItemRemoved(moveItemRequest.FromItemID, moveItemRequest.Amount, wasFrom - moveItemRequest.Amount));

            await conn.Write(new MoveItemResponse());
        }
Esempio n. 6
0
        /// <summary>
        /// DialTimeout acts like Dial but takes a timeout. The timeout includes name resolution, if required.
        /// </summary>
        public static IConn DialTimeout(string network, string address, TimeSpan timeout)
        {
            if (network != "tcp")
            {
                throw new ArgumentException("only 'tcp' network is supported", "network");
            }

            var dialChan    = new Chan <IConn>();
            var timeoutChan = Time.After(timeout);

            GoFunc.Run(() =>
            {
                try
                {
                    var tmpConn = Dial(network, address);
                    dialChan.Send(tmpConn);
                }
                catch
                {
                    // handling timeout below, don't bring down the whole app with an unhandled thread exception
                }
            }, "Net:DialTimeout");

            IConn conn = null;

            Select
            .CaseReceive(dialChan, c => conn = c)
            .CaseReceive(timeoutChan, o =>
            {
                throw new TimeoutException(string.Format("timeout {0} exceed when dialing {1}", timeout, address));
            })
            .NoDefault();

            timeoutChan.Close();

            return(conn);
        }
Esempio n. 7
0
        async Task HandleAsync(IConn conn)
        {
            try {
                using (conn) {
                    var req = await conn.Read(5.Sec());

                    switch (req)
                    {
                    case DownloadRequest dr:
                        await conn.Write(_stored.Skip((int)dr.From).Take(dr.Count).ToList());

                        return;

                    case CommitRequest cr:
                        await _env.SimulateWork(5.Ms());

                        foreach (var e in cr.Events)
                        {
                            _buffer.Enqueue(e);
                        }


                        ScheduleStore();
                        await conn.Write("OK");

                        return;

                    default:
                        conn.Write($"Unknown request {req}");
                        return;
                    }
                }
            } catch (Exception ex) {
                _env.Debug($"Error: {ex.Message}");
            }
        }
 public RestaurantsController(IConn conn)
 {
     this.connection = conn;
 }
Esempio n. 9
0
 public PedidoRepository(IConn conn, Context.ContextoS context)
     : base(context)
 {
     _conn = conn;
 }
Esempio n. 10
0
 public SocketProvider()
 {
     Connection          = new WebSocketsConn();
     Connection.Provider = this;
 }
Esempio n. 11
0
 public ReviewsController(IConn conn)
 {
     this.connection = conn;
 }