Advertisement
Guest User

Ému

a guest
Aug 18th, 2017
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VB.NET 10.43 KB | None | 0 0
  1. Public MustInherit Class NetworkMessage
  2.  
  3.     Public Overridable Property Id As UInteger
  4.  
  5.     Public Const BIT_RIGHT_SHIFT_LEN_PACKET_ID As UInteger = 2
  6.  
  7.     Public Const BIT_MASK As UInteger = 3
  8.  
  9.     Public MustOverride Sub oSerialize(Writer As BigEndianWriter)
  10.     Public MustOverride Sub oDeserialize(Reader As BigEndianReader)
  11.  
  12.     Public Sub Serialize(Writer As BigEndianWriter)
  13.         oSerialize(Writer)
  14.         Write(Writer)
  15.     End Sub
  16.  
  17.     Public Sub Deserialize(Reader As BigEndianReader)
  18.         Console.WriteLine("[RCV] ({0}) {1}.", Id, Me.GetType().Name)
  19.         oDeserialize(Reader)
  20.     End Sub
  21.  
  22.     Public Sub Write(Writer As BigEndianWriter)
  23.         Dim Data() As Byte = Writer.Data
  24.         Writer.Clear()
  25.  
  26.         Dim TypeLen As Byte = ComputeTypeLen(CUInt(Data.Length))
  27.         Writer.WriteShort(subComputeStaticHeader(Id, TypeLen))
  28.  
  29.         Select Case TypeLen
  30.             Case 0
  31.                 Return
  32.             Case 1
  33.                 Writer.WriteByte(CByte(Data.Length))
  34.             Case 2
  35.                 Writer.WriteShort(CShort(Data.Length))
  36.             Case 3
  37.                 Writer.WriteByte(CByte(Data.Length >> 16 And 255))
  38.                 Writer.WriteShort(CShort(Data.Length And 65535))
  39.         End Select
  40.  
  41.         Writer.WriteBytes(Data)
  42.     End Sub
  43.  
  44.     Private Function ComputeTypeLen(Len As UInteger) As Byte
  45.         If Len > 65535 Then
  46.             Return 3
  47.         Else
  48.             If Len > 255 Then
  49.                 Return 2
  50.             Else
  51.                 If Len > 0 Then
  52.                     Return 1
  53.                 Else
  54.                     Return 0
  55.                 End If
  56.             End If
  57.         End If
  58.     End Function
  59.  
  60.     Private Function subComputeStaticHeader(msgId As UShort, TypeLen As Byte) As Short
  61.         Return CShort(msgId << BIT_RIGHT_SHIFT_LEN_PACKET_ID Or TypeLen)
  62.     End Function
  63.  
  64. End Class
  65.  
  66. Public Class CharactersListMessage
  67.     Inherits BasicCharactersListMessage
  68.  
  69.     Public Overrides Property Id As UInteger = 151
  70.  
  71.     Public hasStartupActions As Boolean
  72.  
  73.     Public Sub New()
  74.     End Sub
  75.  
  76.     Public Sub New(Characters As IEnumerable(Of CharacterBaseInformations), hasStartupActions As Boolean)
  77.         Me.Characters = Characters
  78.         Me.hasStartupActions = hasStartupActions
  79.     End Sub
  80.  
  81.     Public Overrides Sub oSerialize(Writer As BigEndianWriter)
  82.         MyBase.oSerialize(Writer)
  83.         Writer.WriteBoolean(hasStartupActions)
  84.     End Sub
  85.  
  86.     Public Overrides Sub oDeserialize(Reader As BigEndianReader)
  87.         MyBase.oDeserialize(Reader)
  88.         hasStartupActions = Reader.ReadBoolean()
  89.     End Sub
  90.  
  91. End Class
  92.  
  93. Public Class BasicCharactersListMessage
  94.     Inherits NetworkMessage
  95.  
  96.     Public Overrides Property Id As UInteger = 6475
  97.  
  98.     Public Characters As IEnumerable(Of CharacterBaseInformations)
  99.  
  100.     Sub New()
  101.     End Sub
  102.  
  103.     Sub New(Characters As IEnumerable(Of CharacterBaseInformations))
  104.         Me.Characters = Characters
  105.     End Sub
  106.  
  107.     Public Overrides Sub oSerialize(Writer As BigEndianWriter)
  108.         Writer.WriteShort(Characters.Count)
  109.         For Each C As CharacterBaseInformations In Characters
  110.             Writer.WriteShort(45) 'TypeId CharacterBaseInformations = 45
  111.             C.Serialize(Writer)
  112.         Next
  113.     End Sub
  114.  
  115.     Public Overrides Sub oDeserialize(Reader As BigEndianReader)
  116.         Dim Limit As UShort = Reader.ReadUShort()
  117.         Characters = New CharacterBaseInformations(Limit - 1) {}
  118.         For I As Integer = 0 To Limit - 1
  119.             TryCast(Characters, CharacterBaseInformations())(I) = New CharacterBaseInformations() With {.Id = Reader.ReadShort}
  120.             TryCast(Characters, CharacterBaseInformations())(I).Deserialize(Reader)
  121.         Next
  122.     End Sub
  123.  
  124. End Class
  125.  
  126. Public Class CharacterBaseInformations
  127.     Inherits CharacterMinimalPlusLookInformations
  128.  
  129.     Public breed As Integer
  130.     Public sex As Boolean
  131.  
  132.     Public Sub New()
  133.     End Sub
  134.  
  135.     Public Sub New(id As Double, name As String, level As Byte, entityLook As EntityLook, breed As SByte, sex As Boolean)
  136.         MyBase.New(id, name, level, entityLook)
  137.         Me.breed = breed
  138.         Me.sex = sex
  139.     End Sub
  140.  
  141.     Public Overrides Sub Serialize(writer As BigEndianWriter)
  142.         MyBase.Serialize(writer)
  143.         writer.WriteByte(breed)
  144.         writer.WriteBoolean(sex)
  145.     End Sub
  146.  
  147.     Public Overrides Sub Deserialize(reader As BigEndianReader)
  148.         MyBase.Deserialize(reader)
  149.         breed = reader.ReadByte()
  150.         sex = reader.ReadBoolean()
  151.     End Sub
  152.  
  153. End Class
  154.  
  155. Public Class CharacterMinimalPlusLookInformations
  156.     Inherits CharacterMinimalInformations
  157.  
  158.     Public entityLook As EntityLook
  159.  
  160.     Public Sub New()
  161.         entityLook = New EntityLook()
  162.     End Sub
  163.  
  164.     Public Sub New(id As Double, name As String, level As Byte, entityLook As EntityLook)
  165.         MyBase.New(id, name, level)
  166.         Me.entityLook = entityLook
  167.     End Sub
  168.  
  169.     Public Overrides Sub Serialize(writer As BigEndianWriter)
  170.         MyBase.Serialize(writer)
  171.         entityLook.Serialize(writer)
  172.     End Sub
  173.  
  174.     Public Overrides Sub Deserialize(reader As BigEndianReader)
  175.         MyBase.Deserialize(reader)
  176.         entityLook = New EntityLook()
  177.         entityLook.Deserialize(reader)
  178.     End Sub
  179.  
  180. End Class
  181.  
  182. Public Class CharacterMinimalInformations
  183.     Inherits CharacterBasicMinimalInformations
  184.  
  185.     Public level As Byte = 1
  186.  
  187.     Public Sub New()
  188.     End Sub
  189.  
  190.     Public Sub New(id As Double, name As String, level As Byte)
  191.         MyBase.New(id, name)
  192.         Me.level = level
  193.     End Sub
  194.  
  195.     Public Overrides Sub Serialize(writer As BigEndianWriter)
  196.         MyBase.Serialize(writer)
  197.         writer.WriteSByte(level)
  198.     End Sub
  199.  
  200.     Public Overrides Sub Deserialize(reader As BigEndianReader)
  201.         MyBase.Deserialize(reader)
  202.         level = reader.ReadSByte()
  203.     End Sub
  204.  
  205. End Class
  206.  
  207. Public Class CharacterBasicMinimalInformations
  208.     Inherits AbstractCharacterInformation
  209.  
  210.     Public name As String = ""
  211.  
  212.     Public Sub New()
  213.     End Sub
  214.  
  215.     Public Sub New(id As Double, name As String)
  216.         MyBase.New(id)
  217.         Me.name = name
  218.     End Sub
  219.  
  220.     Public Overrides Sub Serialize(writer As BigEndianWriter)
  221.         MyBase.Serialize(writer)
  222.         writer.WriteUTF(name)
  223.     End Sub
  224.  
  225.     Public Overrides Sub Deserialize(reader As BigEndianReader)
  226.         MyBase.Deserialize(reader)
  227.         name = reader.ReadUTF()
  228.     End Sub
  229.  
  230. End Class
  231.  
  232. Public Class AbstractCharacterInformation
  233.  
  234.     Public id As Double
  235.  
  236.     Public Sub New()
  237.     End Sub
  238.  
  239.     Public Sub New(id As Double)
  240.         Me.id = id
  241.     End Sub
  242.  
  243.     Public Overridable Sub Serialize(writer As BigEndianWriter)
  244.         writer.WriteVarLong(id)
  245.     End Sub
  246.  
  247.     Public Overridable Sub Deserialize(reader As BigEndianReader)
  248.         id = reader.ReadVarUhLong()
  249.     End Sub
  250.  
  251. End Class
  252.  
  253. Public Class EntityLook
  254.  
  255.     'Remplacement IEnumerable -> List car NullReference au niveau de l'émulateur.
  256.  
  257.     Public bonesId As UShort
  258.     Public Iskins As IEnumerable(Of UShort)
  259.  
  260.     Public skins As New List(Of UShort)
  261.  
  262.     Public IindexedColors As IEnumerable(Of Integer)
  263.  
  264.     Public indexedColors As New List(Of UShort)
  265.  
  266.     Public Iscales As IEnumerable(Of Short)
  267.  
  268.     Public scales As New List(Of Short)
  269.  
  270.     Public Isubentities As IEnumerable(Of SubEntity)
  271.     Public subentities As New List(Of SubEntity)
  272.  
  273.     Public Sub New()
  274.     End Sub
  275.  
  276.     Public Sub New(bonesId As UShort, skins As IEnumerable(Of UShort), indexedColors As IEnumerable(Of Integer), scales As IEnumerable(Of Short), subentities As IEnumerable(Of SubEntity))
  277.  
  278.         Me.bonesId = bonesId
  279.         Me.skins = skins
  280.         Me.indexedColors = indexedColors
  281.         Me.scales = scales
  282.         Me.subentities = subentities
  283.     End Sub
  284.  
  285.     Public Overridable Sub Serialize(writer As BigEndianWriter)
  286.         writer.WriteVarShort(CInt(bonesId))
  287.         writer.WriteShort(CShort(skins.Count()))
  288.         For Each entry In skins
  289.             writer.WriteVarShort(CInt(entry))
  290.         Next
  291.         writer.WriteShort(CShort(indexedColors.Count()))
  292.         For Each entry In indexedColors
  293.             writer.WriteInt(entry)
  294.         Next
  295.         writer.WriteShort(CShort(scales.Count()))
  296.         For Each entry In scales
  297.             writer.WriteVarShort(CInt(entry))
  298.         Next
  299.         writer.WriteShort(CShort(subentities.Count()))
  300.         For Each entry In subentities
  301.             entry.Serialize(writer)
  302.         Next
  303.     End Sub
  304.  
  305.     Public Overridable Sub Deserialize(reader As BigEndianReader)
  306.         bonesId = reader.ReadVarUhShort()
  307.         Dim limit = reader.ReadUShort()
  308.         skins = New List(Of UShort)
  309.         For i As Integer = 0 To limit - 1
  310.             TryCast(skins, List(Of UShort))(i) = reader.ReadVarUhShort()
  311.         Next
  312.         limit = reader.ReadUShort()
  313.         indexedColors = New List(Of UShort)
  314.         For i As Integer = 0 To limit - 1
  315.             TryCast(indexedColors, List(Of UShort))(i) = reader.ReadInt()
  316.         Next
  317.         limit = reader.ReadUShort()
  318.         scales = New List(Of Short)
  319.         For i As Integer = 0 To limit - 1
  320.             TryCast(scales, List(Of Short))(i) = reader.ReadVarShort()
  321.         Next
  322.         limit = reader.ReadUShort()
  323.         subentities = New List(Of SubEntity)
  324.         For i As Integer = 0 To limit - 1
  325.             TryCast(subentities, List(Of SubEntity))(i) = New SubEntity()
  326.             TryCast(subentities, List(Of SubEntity))(i).Deserialize(reader)
  327.         Next
  328.     End Sub
  329.  
  330. End Class
  331.  
  332.  
  333. Public Class SubEntity
  334.  
  335.     Public bindingPointCategory As SByte
  336.     Public bindingPointIndex As SByte
  337.     Public subEntityLook As EntityLook
  338.  
  339.     Public Sub New()
  340.         subEntityLook = New EntityLook
  341.     End Sub
  342.  
  343.     Public Sub New(bindingPointCategory As SByte, bindingPointIndex As SByte, subEntityLook As EntityLook)
  344.         Me.bindingPointCategory = bindingPointCategory
  345.         Me.bindingPointIndex = bindingPointIndex
  346.         Me.subEntityLook = subEntityLook
  347.     End Sub
  348.  
  349.     Public Overridable Sub Serialize(writer As BigEndianWriter)
  350.         writer.WriteSByte(bindingPointCategory)
  351.         writer.WriteSByte(bindingPointIndex)
  352.         subEntityLook.Serialize(writer)
  353.     End Sub
  354.  
  355.     Public Overridable Sub Deserialize(reader As BigEndianReader)
  356.         bindingPointCategory = reader.ReadSByte()
  357.         bindingPointIndex = reader.ReadSByte()
  358.         subEntityLook = New EntityLook()
  359.         subEntityLook.Deserialize(reader)
  360.     End Sub
  361.  
  362. End Class
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement