Class: QuartzTorrent::PeerWireMessageSerializer
- Inherits:
-
Object
- Object
- QuartzTorrent::PeerWireMessageSerializer
- Defined in:
- lib/quartz_torrent/peermsgserialization.rb
Constant Summary collapse
- @@classForMessage =
nil
- @@classForExtendedMessage =
The mapping of our extended message ids to extensions. This is different than @extendedMessageIdToClass which is the mapping of peer message ids to extensions, which is different for every peer.
nil
Instance Method Summary collapse
-
#initialize ⇒ PeerWireMessageSerializer
constructor
A new instance of PeerWireMessageSerializer.
- #serializeTo(msg, io) ⇒ Object
- #unserializeFrom(io) ⇒ Object
Constructor Details
#initialize ⇒ PeerWireMessageSerializer
Returns a new instance of PeerWireMessageSerializer.
12 13 14 15 16 |
# File 'lib/quartz_torrent/peermsgserialization.rb', line 12 def initialize # extendedMessageIdToClass is the mapping of extended message ids that the peer has sent to extensions. @extendedMessageIdToClass = [ExtendedHandshake] @logger = LogManager.getLogger("peermsg_serializer") end |
Instance Method Details
#serializeTo(msg, io) ⇒ Object
41 42 43 44 45 46 47 48 49 |
# File 'lib/quartz_torrent/peermsgserialization.rb', line 41 def serializeTo(msg, io) if msg.is_a?(Extended) # Set the extended message id extendedMsgId = @extendedMessageIdToClass.index msg.class raise "Unsupported extended peer message #{msg.class}" if ! extendedMsgId msg.extendedMessageId = extendedMsgId end msg.serializeTo(io) end |
#unserializeFrom(io) ⇒ Object
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/quartz_torrent/peermsgserialization.rb', line 18 def unserializeFrom(io) packedLength = io.read(4) raise EOFError.new if packedLength.length == 0 length = packedLength.unpack("N")[0] @logger.debug "unserializeFrom: read that length of message is #{length}" raise "Received peer message with length #{length}. All messages must have length >= 0" if length < 0 return KeepAlive.new if length == 0 id = io.read(1).unpack("C")[0] @logger.debug "unserializeFrom: read message id #{id}" payload = io.read(length-1) #raise "Unsupported peer message id #{id}" if id >= self.classForMessage.length clazz = classForMessage(id, payload) raise "Unsupported peer message id #{id}" if ! clazz result = clazz.new result.unserialize(payload) updateExtendedMessageIdsFromHandshake(result) result end |