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

外挂编程

开发平台:

Windows_Unix

  1. #!/usr/bin/env perl
  2. #########################################################################
  3. #  OpenKore - Bus System
  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. #  $Revision$
  13. #  $Id$
  14. #
  15. #########################################################################
  16. # OpenKore Bus Server
  17. #
  18. # This server keeps track of all clients. A client can query
  19. # a list of all other clients, or broadcast a message.
  20. #########################################################################
  21. use strict;
  22. use FindBin qw($RealBin);
  23. use lib "$RealBin/..";
  24. use lib "$RealBin/../deps";
  25. use Getopt::Long;
  26. use Utils::Daemon;
  27. use Utils::Exceptions;
  28. my $server;
  29. my %options;
  30. sub __start {
  31. #### Parse arguments. ####
  32. $options{port} = 0;
  33. if (!GetOptions(
  34. "port=i"     => $options{port},
  35. "quiet"      => $options{quiet},
  36. "bind=s"     => $options{bind},
  37. "help"       => $options{help}
  38. )) {
  39. usage(1);
  40. } elsif ($options{help}) {
  41. usage(0);
  42. }
  43. #### Start the server, if not already running. ####
  44. my $daemon = new Utils::Daemon("OpenKore-Bus");
  45. eval {
  46. $daemon->init(&startServer);
  47. };
  48. if (my $e = caught('Utils::Daemon::AlreadyRunning')) {
  49. my $address = $e->info->{host} . ":" . $e->info->{port};
  50. print STDERR "The bus server is already running at port $addressn";
  51. exit 2;
  52. } elsif ($@) {
  53. print "Cannot start bus server: $@n";
  54. exit 3;
  55. }
  56. if (!$options{quiet}) {
  57. printf "Bus server started at port %dn", $server->getPort();
  58. }
  59. while (1) {
  60. $server->iterate(-1);
  61. }
  62. }
  63. sub startServer {
  64. require Bus::Server::MainServer;
  65. $server = new Bus::Server::MainServer($options{port}, $options{bind},
  66. quiet => $options{quiet});
  67. return { host => $server->getHost(), port => $server->getPort() };
  68. }
  69. sub usage {
  70. print "Usage: bus-server.pl [OPTIONS]nn";
  71. print "Options:n";
  72. print " --port=PORT      Start the server at the specified port. Leave empty to usen" .
  73.       "                  the first available port.n";
  74. print " --bind=IP        Bind the server at the specified IP.n";
  75. print " --quiet          Don't print status messages.n";
  76. print " --help           Display this help message.n";
  77. exit $_[0];
  78. }
  79. __start() unless defined $ENV{INTERPRETER};