Tuesday, August 6, 2013

SirensLove use for OPK with SLClient

  1. # mod SirensLove use for OPK with SLClient
  2. # Later 16/7/2013 OPK SVN r8636 is now work on tRO
  3.  
  4. package Sirens;
  5.  
  6. use strict;
  7. use Globals;
  8. use Plugins;
  9. use Log qw(error);
  10. use Misc qw(relog);
  11. use Utils qw(dataWaiting);
  12. use IO::Socket::INET;
  13. use Network::Send;
  14.  
  15. Plugins::register('Sirens', 'Sirens Server Plugin', \&onUnload);
  16.  
  17. my $hooks = Plugins::addHooks(
  18.         ['initialized', \&onInitialized],
  19.         ['mainLoop_pre', \&onMainLoopPre],
  20.         ['parseMsg/pre', \&onParseMsg]
  21. );
  22. use Utils qw(timeOut timeConvert);
  23. ##HH 29-Nov-2008
  24. our $waittime;
  25. our $timesend;
  26. sub onUnload {
  27.         Plugins::delHooks($hooks);
  28. };
  29.  
  30. my $sirens_host = '127.0.0.1';
  31. my $sirens_port = 21115;
  32. my ($sirens_socket, $failecount);
  33.  
  34. sub onInitialized {
  35.         $sirens_socket = IO::Socket::INET->new();
  36.         connect2sirens(\$sirens_socket);
  37. }
  38.  
  39. sub onMainLoopPre {
  40.         if (dataWaiting(\$sirens_socket)) {
  41.                 my $buf;
  42.                 $sirens_socket->recv($buf, 512);               
  43.              #  $net->serverSend($buf) if (length($buf) > 1);          
  44.                 $messageSender->sendToServer($buf) if (length($buf) > 1);                              
  45.                 ##HH 29-Nov-2008
  46.                 $timesend =0;
  47. #               error("Plugin read 02A7 >> KORE.\n");
  48.         }
  49.  
  50.         if ($failecount >= 3) {
  51.                 quit();
  52.         }
  53. ###HH 29-Nov-2008
  54.                 if ( timeOut($timesend,185) && $timesend ) {           
  55. #                       $interface->writeoutput("!!! Reconnect to MukaServer !!! \n"); 
  56.                         error("Reconnect to SirensLove at 21115.\n");
  57.                         my $connected = connect2sirens(\$sirens_socket);
  58.                         if ($connected ) {
  59.                                 $timesend=0;
  60.                         }                      
  61.                 }
  62. ###End HH
  63. }
  64.  
  65. sub onParseMsg {
  66.         my $args = $_[1];
  67.         my $switch = $args->{switch};
  68.         my $msg = $args->{msg};
  69.         my $msg_size = $args->{msg_size};
  70.  
  71.         if ($switch eq '02A6') {
  72.                 unless ($sirens_socket->connected()) {
  73.                         return unless (connect2sirens(\$sirens_socket));
  74.                 }
  75.                                 $msg_size = unpack("S1", substr($msg, 2, 2));
  76.                 $sirens_socket->send(substr($msg, 0, $msg_size));
  77.                                 ##HH 29-Nov-2008
  78.                                 $timesend=time;
  79.         }
  80. }
  81.  
  82. sub connect2sirens {;
  83.         my ($r_socket) = @_;
  84.  
  85.         ${$r_socket} = IO::Socket::INET->new(
  86.                 PeerAddr => $sirens_host,
  87.                 PeerPort => $sirens_port,
  88.                 Proto => 'tcp'
  89.         );
  90.  
  91.         if (${$r_socket} && inet_aton(${$r_socket}->peerhost()) eq inet_aton($sirens_host)) {
  92.                 $failecount = 0;
  93.                 return 1;
  94.                                 error("Sirens Server connected.\n");
  95.         } else {
  96.                 error("Can't connect to Sirens Server.\n");
  97.                 relog() if ($conState == 5);
  98.                 $failecount++;
  99.                 return 0;
  100.         }
  101. }
  102.  
  103. return 1;

No comments:

Post a Comment