コード例 #1
0
ファイル: ProviderService.cs プロジェクト: e2wugui/zeze
 // 重载需要的方法。
 public override void DispatchProtocol(Zeze.Net.Protocol p, ProtocolFactoryHandle factoryHandle)
 {
     if (null != factoryHandle.Handle)
     {
         if (p.TypeId == gnet.Provider.Bind.TypeId_)
         {
             // Bind 的处理需要同步等待ServiceManager的订阅成功,时间比较长,
             // 不要直接在io-thread里面执行。
             global::Zeze.Util.Task.Run(() => factoryHandle.Handle(p), p);
         }
         else
         {
             // 不启用新的Task,直接在io-thread里面执行。因为其他协议都是立即处理的,
             // 直接执行,少一次线程切换。
             try
             {
                 var isReqeustSaved = p.IsRequest;
                 int result         = factoryHandle.Handle(p);
                 global::Zeze.Util.Task.LogAndStatistics(result, p, isReqeustSaved);
             }
             catch (System.Exception ex)
             {
                 logger.Log(SocketOptions.SocketLogLevel, ex, "Protocol.Handle. {0}", p);
             }
         }
     }
     else
     {
         logger.Log(SocketOptions.SocketLogLevel, "Protocol Handle Not Found. {0}", p);
     }
 }
コード例 #2
0
 public static System.Threading.Tasks.Task Run(
     Func <int> func,
     Zeze.Net.Protocol p,
     Action <Net.Protocol, int> actionWhenError = null)
 {
     return(System.Threading.Tasks.Task.Run(() => Call(func, p, actionWhenError)));
 }
コード例 #3
0
ファイル: Test.cs プロジェクト: e2wugui/zeze
            private int ProcessGetCount(Zeze.Net.Protocol p)
            {
                var r = p as GetCount;

                lock (StateMachine)
                {
                    r.SendResultCode(StateMachine.Count);
                }
                return(Procedure.Success);
            }
コード例 #4
0
ファイル: ModuleBag.cs プロジェクト: e2wugui/zeze
        public void OnReliableNotify(Zeze.Net.Protocol p)
        {
            switch (p.TypeId)
            {
            case SChanged.TypeId_:
                ProcessSChanged((SChanged)p);
                break;

            case SBag.TypeId_:
                ProcessSBag(p as SBag);
                break;
            }
        }
コード例 #5
0
ファイル: Test.cs プロジェクト: e2wugui/zeze
            private int ProcessAddCount(Zeze.Net.Protocol p)
            {
                if (false == Raft.IsLeader)
                {
                    return(Procedure.CancelExcption); // fast fail
                }
                var r = p as AddCount;

                lock (StateMachine)
                {
                    StateMachine.AddCountAndWait(r.UniqueRequestId);
                    r.SendResultCode(0);
                }
                return(Procedure.Success);
            }
コード例 #6
0
 public override void DispatchProtocol(Zeze.Net.Protocol p, ProtocolFactoryHandle factoryHandle)
 {
     if (null != factoryHandle.Handle)
     {
         try
         {
             var isRequestSaved = p.IsRequest;
             int result         = factoryHandle.Handle(p); // 不启用新的Task,直接在io-thread里面执行。
             global::Zeze.Util.Task.LogAndStatistics(result, p, isRequestSaved);
         }
         catch (System.Exception ex)
         {
             p.Sender.Close(ex); // link 在异常时关闭连接。
         }
     }
     else
     {
         logger.Log(SocketOptions.SocketLogLevel, "Protocol Handle Not Found. {0}", p);
         p.Sender.Close(null);
     }
 }