示例#1
0
        public async Task <IApiResult <string> > Hello(string name, int count, Guid guid, byte[] file, long id = -1, Em em = Em.Test)
        {
            var test3 = DependencyHelper.GetService <TestObject>();
            var test2 = DependencyHelper.GetService <ITest>(nameof(TestObject));

            var ctx = context = GlobalContext.Current;

            await  Debug(1, context, context);

            ScopeRuner.RunScope("Hello2", Hello2);
            await Debug(1, ctx, GlobalContext.Current);

            if (DateTime.Now.Ticks % 13 == 11)
            {
                Logger.Exception(new Exception("故意的"));
            }
            if (DateTime.Now.Ticks % 23 == 19)
            {
                Logger.Error("故意的");
            }
            if (DateTime.Now.Ticks % 67 == 57)
            {
                Logger.Log(LogLevel.Critical, "故意的");
            }
            return(ApiResultHelper.Helper.Succees($"name:{name} count:{count} guid:{guid} file:{file} id:{id} em:{em}"));
        }
示例#2
0
        /// <summary>
        ///     关闭
        /// </summary>
        public static async Task Shutdown()
        {
            if (ZeroAppOption.Instance.ApplicationState >= StationState.Closing)
            {
                return;
            }
            DateTime start = DateTime.Now;
            double   sec;
            int      cnt = 0;;

            Logger.Information($"【等待结束】剩余请求数:({ZeroAppOption.Instance.RequestSum})...");
            while (ZeroAppOption.Instance.RequestSum > 0)
            {
                cnt++;
                sec = (DateTime.Now - start).TotalSeconds;
                if (sec > ZeroAppOption.Instance.MaxCloseSecond)
                {
                    Logger.Error($"{cnt}. 已等待{sec:F2}秒,虽然剩余请求数还有{ZeroAppOption.Instance.RequestSum}),但已超过最大等待时间({ZeroAppOption.Instance.MaxCloseSecond}秒),系统将强行关闭。");
                    break;
                }
                Logger.Information($"{cnt}. 已等待{sec:F2}秒,剩余请求数:{ZeroAppOption.Instance.RequestSum}...");
                await Task.Delay(50);
            }
            sec = (int)(DateTime.Now - start).TotalSeconds;
            if (sec > 0)
            {
                Logger.Information($"{cnt}. 等待{sec:F2}秒后请求全部结束.");
            }
            Logger.Information("【正在退出...】");

            ZeroAppOption.Instance.SetApplicationState(StationState.Closing);
            await CloseAll();

            if (ZeroAppOption.Instance.ApplicationState != StationState.Closing)
            {
                return;
            }
            await WaitAllObjectSafeClose();

            ZeroAppOption.Instance.SetApplicationState(StationState.Closed);
            await DestoryAll();

            ZeroAppOption.Instance.SetApplicationState(StationState.Destroy);

            ScopeRuner.DisposeLocal();
            DependencyHelper.LoggerFactory.Dispose();


            Logger.Information("【已退出,下次见!】");
            if (ZeroAppOption.Instance.IsDevelopment)
            {
                Process.GetCurrentProcess().Kill();
            }
        }
示例#3
0
        async Task Hello2()
        {
            await Debug(2, context, GlobalContext.Current);

            context = GlobalContext.Current;
            await Task.Yield();

            await Task.Delay(100);

            await Debug(2, context, GlobalContext.Current);
            await Hello3();
            await Debug(2, context, GlobalContext.Current);

            ScopeRuner.DisposeLocal();
        }
示例#4
0
        private void OnReceive(SessionReceiveEventArgs e)
        {
            TcpOption.Instance.ConcurrencySemaphore.Wait();
            var pipeStream = e.Stream.ToPipeStream();

            if (!pipeStream.TryReadLine(out var message) || message == null)
            {
                return;
            }
            message = message.Trim('\0').Trim();
            if (message.IsBlank())
            {
                return;
            }
            ScopeRuner.RunScope("TcpHandler", OnMessage, (message, e.Session));
        }
示例#5
0
        /// <summary>
        /// 消息处理(异步)
        /// </summary>
        /// <param name="service">服务</param>
        /// <param name="message">消息</param>
        /// <param name="offline">是否离线消息</param>
        /// <param name="original">原始透传对象</param>
        public static Task OnMessagePush(IService service, IInlineMessage message, bool offline, object original)
        {
            ZeroAppOption.Instance.BeginRequest();
            message.RealState = MessageState.Recive;
            var process = new MessageProcessor
            {
                Service   = service,
                Message   = message,
                Original  = original,
                IsOffline = offline,
                WaitTask  = new TaskCompletionSource <bool>()
            };

            ScopeRuner.RunScope($"{message.Service}/{message.Method}", process.Process, ContextInheritType.Clone);
            return(process.WaitTask.Task);
        }
示例#6
0
        /// <summary>
        /// 消息处理(异步)
        /// </summary>
        /// <param name="service">服务</param>
        /// <param name="message">消息</param>
        /// <param name="offline">是否离线消息</param>
        /// <param name="original">原始透传对象</param>
        public static void RunOnMessagePush(IService service, IInlineMessage message, bool offline, object original)
        {
            if (!ZeroAppOption.Instance.BeginRequest())
            {
                message.RealState = MessageState.Cancel;
                return;
            }
            message.RealState = MessageState.Recive;
            var process = new MessageProcessor
            {
                Service   = service,
                Message   = message,
                Original  = original,
                IsOffline = offline
            };

            ScopeRuner.RunScope($"{message.Service}/{message.Method}", process.Process, ContextInheritType.Clone);
        }