ErrorReport.pm.svn-base
上传用户:market2
上传日期:2018-11-18
资源大小:18786k
文件大小:2k
源码类别:

外挂编程

开发平台:

Windows_Unix

  1. #########################################################################
  2. #  OpenKore - Error reporting task
  3. #  Copyright (c) 2007 OpenKore Team
  4. #
  5. #  This software is open source, licensed under the GNU General Public
  6. #  License, version 2.
  7. #  Basically, this means that you're allowed to modify and distribute
  8. #  this software. However, if you distribute modified versions, you MUST
  9. #  also distribute the source code.
  10. #  See http://www.gnu.org/licenses/gpl.html for the full license.
  11. #########################################################################
  12. ##
  13. # MODULE DESCRIPTION: Error reporting task.
  14. #
  15. # By default, tasks fail silently. That is, they don't print any error
  16. # messages when they fail. You can wrap any task inside a Task::ErrorReport
  17. # task to enable error reporting to the user. This avoids the need of
  18. # writing error reporting code in every task.
  19. #
  20. # If the wrapped class finishes with an error, then the error message (as
  21. # passed to $Task->setError()) will be printed on screen.
  22. #
  23. # Task::ErrorReport will mimic the wrappee's name, priority and mutexes.
  24. #
  25. # <h3>Example</h3>
  26. # <pre class="example">
  27. # my $originalTask = new Task::SitStand(mode => 'sit');
  28. # my $task = new Task::ErrorReport(task => $originalTask);
  29. # $taskManager->add($task);
  30. # </pre>
  31. package Task::ErrorReport;
  32. use strict;
  33. use Modules 'register';
  34. use Task::WithSubtask;
  35. use base qw(Task::WithSubtask);
  36. use Log qw(error);
  37. ##
  38. # Task::ErrorReport->new(options...)
  39. #
  40. # Create a new Task::ErrorReport object.
  41. #
  42. # The following options are allowed:
  43. # `l
  44. # - All options allowed by Task->new(), except 'mutexes'.
  45. # - task (required) - The Task object to wrap.
  46. # `l`
  47. sub new {
  48. my $class = shift;
  49. my %args = @_;
  50. if (!$args{task}) {
  51. ArgumentException->throw("No task argument given.");
  52. }
  53. my $self = $class->SUPER::new(@_,
  54. autofail => 1,
  55. autostop => 1,
  56. manageMutexes => 1,
  57. priority => $args{task}->getPriority(),
  58. name => $args{task}->getName());
  59. $self->setSubtask($args{task});
  60. return $self;
  61. }
  62. sub subtaskDone {
  63. my ($self, $task) = @_;
  64. if ($task->getError()) {
  65. my $error = $task->getError();
  66. error "$error->{message}n";
  67. } else {
  68. $self->setDone();
  69. }
  70. }
  71. 1;