public override int ProcessDispatch(Dispatch p) { try { var factoryHandle = Game.App.Instance.Server.FindProtocolFactoryHandle(p.Argument.ProtocolType); if (null == factoryHandle) { SendKick(p.Sender, p.Argument.LinkSid, BKick.ErrorProtocolUnkown, "unknown protocol"); return(Procedure.LogicError); } var p2 = factoryHandle.Factory(); p2.Decode(Zeze.Serialize.ByteBuffer.Wrap(p.Argument.ProtocolData)); p2.Sender = p.Sender; var session = new Game.Login.Session( p.Argument.UserId, p.Argument.States, p.Sender, p.Argument.LinkSid); p2.UserState = session; if (Transaction.Current != null) { // 已经在事务中,嵌入执行。此时忽略p2的NoProcedure配置。 Transaction.Current.TopProcedure.ActionName = p2.GetType().FullName; Transaction.Current.TopProcedure.UserState = p2.UserState; return(Zeze.Util.Task.Call( () => factoryHandle.Handle(p2), p2, (p, code) => { p.ResultCode = code; session.SendResponse(p); })); } if (p2.Sender.Service.Zeze == null || factoryHandle.NoProcedure) { // 应用框架不支持事务或者协议配置了“不需要事务” return(Zeze.Util.Task.Call( () => factoryHandle.Handle(p2), p2, (p, code) => { p.ResultCode = code; session.SendResponse(p); })); } // 创建存储过程并且在当前线程中调用。 return(Zeze.Util.Task.Call( p2.Sender.Service.Zeze.NewProcedure( () => factoryHandle.Handle(p2), p2.GetType().FullName, p2.UserState), p2, (p, code) => { p.ResultCode = code; session.SendResponse(p); } )); } catch (Exception ex) { SendKick(p.Sender, p.Argument.LinkSid, BKick.ErrorProtocolException, ex.ToString()); throw; } }
public override int ProcessCEnterWorld(CEnterWorld protocol) { Game.Login.Session session = Game.Login.Session.Get(protocol); if (null == session.RoleId) { return(Procedure.LogicError); } // TODO map return(Zeze.Transaction.Procedure.NotImplement); }