// 重载需要的方法。 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); } }
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))); }
private int ProcessGetCount(Zeze.Net.Protocol p) { var r = p as GetCount; lock (StateMachine) { r.SendResultCode(StateMachine.Count); } return(Procedure.Success); }
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; } }
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); }
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); } }