Advertisement
Guest User

Untitled

a guest
Jun 27th, 2017
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 5.12 KB | None | 0 0
  1. module GG
  2.  
  3.   #
  4.   # GG Packet class
  5.   #
  6.   class PACKET
  7.     def initialize
  8.       puts "++ #{self} created" if $DEBUG
  9.     end
  10.  
  11.     def destroy
  12.       puts "++ #{self} destroyed" if $DEBUG
  13.       nil
  14.     end
  15.  
  16.     def header=(data)
  17.       unpacked = data.unpack 'II'
  18.       @type, @length = unpacked
  19.       puts "++ #{self} recived header ... type:#{@type} length:#{@length}" if $DEBUG
  20.     end
  21.  
  22.     def header_length
  23.       8
  24.     end
  25.  
  26.     def type
  27.       @type
  28.     end
  29.  
  30.     def length
  31.       @length
  32.     end
  33.  
  34.     def type=(type)
  35.       begin
  36.         self.extend type
  37.         puts "++ #{self} extend to #{type}" if $DEBUG
  38.         fields @data if @data
  39.       rescue => e
  40.         raise "class extend ... #{e}"
  41.       end
  42.     end
  43.  
  44.     def data=(data)
  45.       @data = data
  46.       puts "++ #{self} recived data" if $DEBUG
  47.     end
  48.  
  49.     def pack(pattern)
  50.       begin
  51.         puts "++ #{self} data packed" if $DEBUG
  52.         packet.pack pattern
  53.       rescue => e
  54.         raise "packet pack ... #{e}"
  55.       end
  56.     end
  57.   end
  58.  
  59.   # RECV PACKETS #
  60.  
  61.   module PACKET_WELCOME
  62.     attr_reader :seed
  63.  
  64.     def type
  65.       WELCOME
  66.     end
  67.  
  68.     def fields(data)
  69.       unpacked = data.unpack 'I'
  70.       @seed = unpacked[0]
  71.     end
  72.   end
  73.  
  74.   module PACKET_RECV_MSG
  75.     attr_reader :sender     # numer nadawcy
  76.     attr_reader :seq          # numer sekwencyjny
  77.     attr_reader :time           # czas nadania
  78.     attr_reader :class      # klasa wiadomości
  79.     attr_reader :message    # treść wiadomości
  80.  
  81.     def type
  82.       RECV_MSG
  83.     end
  84.  
  85.     def fields(data)
  86.       unpacked = data.unpack 'IIIIZ*'
  87.       @sender,
  88.       @seq,
  89.       @time,
  90.       @class,
  91.       @message = unpacked
  92.     end
  93.  
  94.   end
  95.  
  96.   module PACKET_SEND_MSG_ACK
  97.     attr_reader :status    # stan wiadomości */
  98.     attr_reader :recipient # numer odbiorcy */
  99.     attr_reader :seq         # numer sekwencyjny */
  100.  
  101.     def type
  102.       SEND_MSG_ACK
  103.     end
  104.  
  105.     def fields(data)
  106.       unpacked = data.unpack 'III'
  107.       @status,
  108.       @recipient,
  109.       @seq = unpacked
  110.     end
  111.   end
  112.  
  113.   # SEND PACKECTS #
  114.  
  115.   module PACKET_LOGIN60
  116.     attr_writer :uin           # mój numerek
  117.     attr_writer :hash          # hash hasła */
  118.     attr_writer :status        # status na dzień dobry */
  119.     attr_writer :version       # moja wersja klienta */
  120.     attr_writer :unknown1      # 0x00 */
  121.     attr_writer :local_ip      # mój adres ip */
  122.     attr_writer :local_port    # port, na którym słucham */
  123.     attr_writer :external_ip   # zewnętrzny adres ip */
  124.     attr_writer :external_port # zewnętrzny port */
  125.     attr_writer :image_size    # maksymalny rozmiar grafiki w KB */
  126.     attr_writer :unknown2      # 0xbe */
  127.     attr_writer :description   # opis, nie musi wystąpić */
  128.     attr_writer :time          # czas, nie musi wystąpić */
  129.  
  130.     def type
  131.       LOGIN60
  132.     end
  133.  
  134.     def packet
  135.       [
  136.         type,
  137.         length,
  138.         @uin           ? @uin              : 0,
  139.         @hash          ? @hash             : 0,
  140.         @status        ? @status           : 0,
  141.         @version       ? @version          : 0x22,
  142.         @unknown1      ? @unknown1         : 0,
  143.         @local_ip      ? @local_ip         : 0,
  144.         @local_port    ? @local_port       : 0,
  145.         @external_ip   ? @external_ip      : 0,
  146.         @external_port ? @external_port    : 0,
  147.         @image_size    ? @image_size       : 0,
  148.         @unknown2      ? @unknown2         : 0xBE,
  149.         @description   ? "#{@description}" : "\0",
  150.         @time          ? @time             : 0
  151.       ]
  152.     end
  153.  
  154.     def length
  155.       4+4+4+4+1+4+2+4+2+1+1+(@description ? @description.length : 1)+4
  156.     end
  157.  
  158.     def packed
  159.       pack 'II IIIIcIsIsccA*I'
  160.     end
  161.  
  162.   end
  163.  
  164.   module PACKET_NEW_STATUS
  165.     attr_writer :status             # na jaki zmienić? */
  166.     attr_writer :description        # opis, nie musi wystąpić */
  167.     attr_writer :time               # czas, nie musi wystąpić */
  168.  
  169.     def type
  170.       NEW_STATUS
  171.     end
  172.  
  173.     def packet
  174.       [
  175.         type,
  176.         length,
  177.         @status      ? @status           : 0,
  178.         @description ? "#{@description}" : "\0",
  179.         @time        ? @time             : 0
  180.       ]
  181.     end
  182.  
  183.     def length
  184.       4+(@description ? @description.length : 1)+4
  185.     end
  186.  
  187.     def packed
  188.       pack 'II IA*I'
  189.     end
  190.   end
  191.  
  192.   module PACKET_LIST_EMPTY
  193.     def type
  194.       LIST_EMPTY
  195.     end
  196.     def packet
  197.       [
  198.         type,
  199.         length
  200.       ]
  201.     end
  202.  
  203.     def length
  204.       0
  205.     end
  206.  
  207.     def packed
  208.       pack 'II'
  209.     end
  210.   end
  211.  
  212.   module PACKET_SEND_MSG
  213.     attr_writer :recipient      # numer odbiorcy */
  214.     attr_writer :seq              # numer sekwencyjny */
  215.     attr_writer :class              # klasa wiadomości */
  216.     attr_writer :message          # treść */
  217.  
  218.     def type
  219.       SEND_MSG
  220.     end
  221.  
  222.     def packet
  223.       [
  224.         type,
  225.         length,
  226.         @recipient ? @recipient     : 0,
  227.         @seq       ? @seq           : 0,
  228.         @class     ? @class         : 0x0008,
  229.         @message   ? "#{@message}"  : "\0"
  230.       ]
  231.     end
  232.  
  233.     def length
  234.       4+4+4+@message.length
  235.     end
  236.  
  237.     def packed
  238.       pack 'II IIIA*'
  239.     end
  240.   end
  241. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement