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

外挂编程

开发平台:

Windows_Unix

  1. #########################################################################
  2. #  OpenKore - Ragnarok Online Assistent
  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: 5284 $
  12. #  $Id: Client.pm 5284 2007-01-01 17:26:40Z vcl_kore $
  13. #
  14. #########################################################################
  15. ##
  16. # MODULE DESCRIPTION: A client within a Base::Server
  17. #
  18. # The three abstract functions in @MODULE(Base::Server) all have
  19. # an $client object as parameter, which is of this type.
  20. # This class represents a client which the server handles.
  21. package Base::Server::Client;
  22. use strict;
  23. use IO::Socket::INET;
  24. sub new {
  25. my ($class, $socket, $host, $fd) = @_;
  26. my %self = (
  27. BSC_sock  => $socket,
  28. BSC_host  => $host,
  29. BSC_fd    => $fd
  30. );
  31. return bless %self, $class;
  32. }
  33. sub DESTROY {
  34. $_[0]->{BSC_sock}->close if ($_[0]->{BSC_sock}->connected);
  35. }
  36. ##
  37. # IO::Socket::INET $BaseServerClient->getSocket()
  38. # Ensures: defined(result)
  39. #
  40. # Return the client's socket.
  41. sub getSocket {
  42. return $_[0]->{BSC_sock};
  43. }
  44. ##
  45. # String $BaseServerClient->getIP()
  46. # Ensures: result ne ''
  47. #
  48. # Returns the client's IP address in text form.
  49. sub getIP {
  50. return $_[0]->{BSC_host};
  51. }
  52. ##
  53. # int $BaseServerClient->getFD()
  54. # Ensures: defined(result)
  55. #
  56. # Returns the client's file descriptor.
  57. sub getFD {
  58. return $_[0]->{BSC_fd};
  59. }
  60. ##
  61. # int $BaseServerClient->getIndex()
  62. # Ensures: defined(result)
  63. #
  64. # Returns the index of this object in the @MODULE(Base::Server) object's internal list.
  65. sub getIndex {
  66. return $_[0]->{BSC_index};
  67. }
  68. sub setIndex {
  69. my ($self, $index) = @_;
  70. $self->{BSC_index} = $index;
  71. }
  72. ##
  73. # boolean $BaseServerClient->send(Bytes data)
  74. # data: The data to send.
  75. # Requires: defined($data)
  76. # Returns: 1 on success, 0 on failure.
  77. #
  78. # Send data to the client.
  79. sub send {
  80. my ($self) = @_;
  81. eval {
  82. $self->{BSC_sock}->send($_[1], 0);
  83. $self->{BSC_sock}->flush;
  84. };
  85. if ($@) {
  86. # Client disconnected
  87. $self->{BSC_sock}->close;
  88. return 0;
  89. }
  90. return 1;
  91. }
  92. ##
  93. # void $BaseServerClient->close()
  94. #
  95. # Disconnect this client. In the next $BaseServer->iterate() call, this Base::Server::Client
  96. # object will be removed from the @MODULE(Base::Server) object's internal list.
  97. #
  98. # You must not call $BaseServerClient->send() anymore after having called this function.
  99. sub close {
  100. $_[0]->{BSC_sock}->close;
  101. }
  102. 1;