Fixing errors with Aborted, Failed and Cancelled state transitions. The handling was wrong, causing the root handlers not being called anymore, causing the task not being able to fail, cancel, abort.

This commit is contained in:
FlightControl
2018-09-09 07:39:13 +02:00
parent 69934a8cae
commit 492563d6f3
4 changed files with 24 additions and 11 deletions
+15 -2
View File
@@ -981,8 +981,9 @@ do -- FSM_PROCESS
self:T( "*** FSM *** " .. step .. " *** " .. params[1] .. " --> " .. params[2] .. " --> " .. params[3] .. " *** Task: " .. self.Task:GetName() .. ", TaskUnit: " .. self.Controllable:GetName() ) self:T( "*** FSM *** " .. step .. " *** " .. params[1] .. " --> " .. params[2] .. " --> " .. params[3] .. " *** Task: " .. self.Task:GetName() .. ", TaskUnit: " .. self.Controllable:GetName() )
end end
self._EventSchedules[EventName] = nil self._EventSchedules[EventName] = nil
local Result, Value
if self.Controllable and self.Controllable:IsAlive() == true then if self.Controllable and self.Controllable:IsAlive() == true then
local Result, Value = xpcall( function() return self[handler]( self, self.Controllable, self.Task, unpack( params ) ) end, ErrorHandler ) Result, Value = xpcall( function() return self[handler]( self, self.Controllable, self.Task, unpack( params ) ) end, ErrorHandler )
end end
return Value return Value
--return self[handler]( self, self.Controllable, unpack( params ) ) --return self[handler]( self, self.Controllable, unpack( params ) )
@@ -1204,10 +1205,22 @@ do -- FSM_TASK
function FSM_TASK:_call_handler( step, trigger, params, EventName ) function FSM_TASK:_call_handler( step, trigger, params, EventName )
local handler = step .. trigger local handler = step .. trigger
local ErrorHandler = function( errmsg )
env.info( "Error in SCHEDULER function:" .. errmsg )
if BASE.Debug ~= nil then
env.info( BASE.Debug.traceback() )
end
return errmsg
end
if self[handler] then if self[handler] then
self:T( "*** FSM *** " .. step .. " *** " .. params[1] .. " --> " .. params[2] .. " --> " .. params[3] .. " *** Task: " .. self.TaskName ) self:T( "*** FSM *** " .. step .. " *** " .. params[1] .. " --> " .. params[2] .. " --> " .. params[3] .. " *** Task: " .. self.TaskName )
self._EventSchedules[EventName] = nil self._EventSchedules[EventName] = nil
return self[handler]( self, unpack( params ) ) --return self[handler]( self, unpack( params ) )
local Result, Value = xpcall( function() return self[handler]( self, unpack( params ) ) end, ErrorHandler )
return Value
end end
end end
@@ -574,15 +574,15 @@ do -- TASK_A2A_DISPATCHER
self:Success( Task ) self:Success( Task )
end end
function Task.onenterCancelled( Task, From, Event, To ) function Task.OnEnterCancelled( Task, From, Event, To )
self:Cancelled( Task ) self:Cancelled( Task )
end end
function Task.onenterFailed( Task, From, Event, To ) function Task.OnEnterFailed( Task, From, Event, To )
self:Failed( Task ) self:Failed( Task )
end end
function Task.onenterAborted( Task, From, Event, To ) function Task.OnEnterAborted( Task, From, Event, To )
self:Aborted( Task ) self:Aborted( Task )
end end
@@ -775,15 +775,15 @@ do -- TASK_A2G_DISPATCHER
self:Success( Task ) self:Success( Task )
end end
function Task.onenterCancelled( Task, From, Event, To ) function Task.OnEnterCancelled( Task, From, Event, To )
self:Cancelled( Task ) self:Cancelled( Task )
end end
function Task.onenterFailed( Task, From, Event, To ) function Task.OnEnterFailed( Task, From, Event, To )
self:Failed( Task ) self:Failed( Task )
end end
function Task.onenterAborted( Task, From, Event, To ) function Task.OnEnterAborted( Task, From, Event, To )
self:Aborted( Task ) self:Aborted( Task )
end end
@@ -686,15 +686,15 @@ do -- TASK_CARGO_DISPATCHER
self:Success( Task ) self:Success( Task )
end end
function Transport.Task.onenterCancelled( Task, From, Event, To ) function Transport.Task.OnEnterCancelled( Task, From, Event, To )
self:Cancelled( Task ) self:Cancelled( Task )
end end
function Transport.Task.onenterFailed( Task, From, Event, To ) function Transport.Task.OnEnterFailed( Task, From, Event, To )
self:Failed( Task ) self:Failed( Task )
end end
function Transport.Task.onenterAborted( Task, From, Event, To ) function Transport.Task.OnEnterAborted( Task, From, Event, To )
self:Aborted( Task ) self:Aborted( Task )
end end
end end