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

外挂编程

开发平台:

Windows_Unix

  1. #########################################################################
  2. #  OpenKore - Bus system
  3. #
  4. #  This software is open source, licensed under the GNU General Public
  5. #  License, version 2.
  6. #  Basically, this means that you're allowed to modify and distribute
  7. #  this software. However, if you distribute modified versions, you MUST
  8. #  also distribute the source code.
  9. #  See http://www.gnu.org/licenses/gpl.html for the full license.
  10. #
  11. #  $Revision: 1810 $
  12. #  $Id: Client.pm 1810 2005-03-03 14:48:21Z hongli $
  13. #
  14. #########################################################################
  15. package Bus::Server::Starter;
  16. use strict;
  17. use Time::HiRes qw(time);
  18. use File::Spec;
  19. use Cwd qw(realpath);
  20. use Utils::PerlLauncher;
  21. use Utils::Daemon;
  22. use constant NOT_STARTED => 1;
  23. use constant STARTING => 2;
  24. use constant STARTED  => 3;
  25. use constant FAILED   => 4;
  26. our $busServerScript;
  27. BEGIN {
  28. my ($drive, $dirs) = File::Spec->splitpath(realpath(__FILE__));
  29. $dirs = "$drive$dirs";
  30. $busServerScript = realpath(File::Spec->catfile($dirs, "..", "bus-server.pl"));
  31. }
  32. sub new {
  33. my ($class) = @_;
  34. my %self = (
  35. state => NOT_STARTED,
  36. daemon => new Utils::Daemon('OpenKore-Bus')
  37. );
  38. return bless %self, $class;
  39. }
  40. sub iterate {
  41. my ($self) = @_;
  42. if ($self->{state} == NOT_STARTED) {
  43. my $info = $self->{daemon}->getInfo();
  44. if ($info) {
  45. $self->{state} = STARTED;
  46. $self->{host} = $info->{host};
  47. $self->{port} = $info->{port};
  48. } else {
  49. my $launcher = new PerlLauncher(undef, $busServerScript);
  50. if ($launcher->launch(1)) {
  51. $self->{state} = STARTING;
  52. $self->{start_time} = time;
  53. } else {
  54. $self->{state} = FAILED;
  55. $self->{error} = $launcher->getError();
  56. }
  57. }
  58. } elsif ($self->{state} == STARTING) {
  59. my $info = $self->{daemon}->getInfo();
  60. if ($info) {
  61. $self->{state} = STARTED;
  62. $self->{host} = $info->{host};
  63. $self->{port} = $info->{port};
  64. } elsif (time - $self->{start_time} > 10) {
  65. # 10 seconds passed and bus server is still not started.
  66. $self->{state} = FAILED;
  67. $self->{error} = "Timeout when starting server.";
  68. }
  69. }
  70. return $self->{state};
  71. }
  72. sub getHost {
  73. return $_[0]->{host};
  74. }
  75. sub getPort {
  76. return $_[0]->{port};
  77. }
  78. sub getError {
  79. return $_[0]->{error};
  80. }
  81. 1;