public byte[] Handle(byte[] cmd, string cmdTypeFullName, string resultTypeFullName) { try { return(HandleCore()); } catch (Exception e) { Logger.ErrorException("处理命令时出现异常。 cmdType : {cmdType} resultType : {resultType} data : {cmd}", e); throw; } byte[] HandleCore() { WriteDiagnostics(() => cmd); using (var robotSession = MahuaRobotManager.Instance.CreateSession()) { var lifetimeScope = robotSession.LifetimeScope; var center = lifetimeScope.Resolve <ICommandCenter>(); var cmdType = GetMahuaType(cmdTypeFullName); var resultType = GetMahuaType(resultTypeFullName); Func <object, object[], object> invoke = _commandCenterHandleWithResultMethod.MakeGenericMethod(cmdType, resultType).Invoke; var handler = WithResultHandlers .GetOrAdd(cmdType, invoke); var re = handler(center, new[] { GlobalCache.CrossDoaminSerializer.Deserialize(cmd, cmdType) }); var rejson = GlobalCache.CrossDoaminSerializer.Serialize(re, resultType); WriteDiagnostics(() => rejson); return(rejson); } } }
public byte[] Handle(byte[] cmd, string cmdTypeFullName, string resultTypeFullName) { WriteDiagnostics(() => cmd); using (var beginLifetimeScope = _container.BeginLifetimeScope()) { SetContainer(beginLifetimeScope); var center = beginLifetimeScope.Resolve <ICommandCenter>(); var cmdType = GetMahuaType(cmdTypeFullName); var resultType = GetMahuaType(resultTypeFullName); Func <object, object[], object> invoke = _commandCenterHandleWithResultMethod.MakeGenericMethod(cmdType, resultType).Invoke; var handler = WithResultHandlers .GetOrAdd(cmdType, invoke); var re = handler(center, new[] { GlobalCache.CrossDoaminSerializer.Deserialize(cmd, cmdType) }); var rejson = GlobalCache.CrossDoaminSerializer.Serialize(re, resultType); WriteDiagnostics(() => rejson); return(rejson); } }