Files
Client/Server/ToolProject/RCMS_Tool/ClientSocket.vb
LGram16 dd97ddec92 Restructure repository to include all source folders
Move git root from Client/ to src/ to track all source code:
- Client: Game client source (moved to Client/Client/)
- Server: Game server source
- GameTools: Development tools
- CryptoSource: Encryption utilities
- database: Database scripts
- Script: Game scripts
- rylCoder_16.02.2008_src: Legacy coder tools
- GMFont, Game: Additional resources

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 20:17:20 +09:00

437 lines
12 KiB
VB.net
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Imports System.IO
Imports System.Object
Imports System.Text
Imports System.Net
Imports System.Net.Sockets
Imports System.UInt16
Public Class ClientSocket
Const m_nHeaderSize = 12
Private m_bIsConnected As Boolean
Public ReadOnly Property IsConnected() As Boolean
Get
Return m_bIsConnected
End Get
End Property
Public Delegate Sub ProcessPacket(ByVal contents() As Byte, ByVal nPacketCMD As Byte, ByVal errorCode As Int16)
Public Delegate Sub ProcessDisconnect()
Private m_TCPSocket As TcpClient
Private m_RecvCallBack As AsyncCallback
Private m_ReceivedData() As Byte
Private m_nReceived As Int32
Private m_ProcessTable As Hashtable
Private m_DisconnectProcess As ProcessDisconnect
Private m_MainLoop As Object
Private Class AsyncReceived
End Class
Public Sub New()
m_TCPSocket = New TcpClient()
m_ProcessTable = New Hashtable()
ReDim m_ReceivedData(65535)
End Sub
Public Sub Connect(ByVal HostName As String, ByVal Port As Integer, _
ByVal mainLoop As Object, ByVal disconnProcess As ProcessDisconnect)
Try
m_MainLoop = mainLoop
m_DisconnectProcess = disconnProcess
m_TCPSocket.Connect(HostName, Port)
m_RecvCallBack = New AsyncCallback(AddressOf Me.RecvCallBack)
' ºñµ¿±â ÀÔ·Â ¿¹¾à
Recv()
m_bIsConnected = True
Catch
If False = m_DisconnectProcess.Equals(Nothing) Then
m_DisconnectProcess.Invoke()
End If
m_bIsConnected = False
End Try
End Sub
Public Sub AddProcess(ByVal packetCommand As Byte, ByVal fnProcess As ProcessPacket)
If False = fnProcess.Equals(Nothing) Then
m_ProcessTable.Add(packetCommand, fnProcess)
End If
End Sub
Public Sub Close()
m_TCPSocket.Close()
End Sub
Public Sub Send(ByVal packetCommand As Byte, ByVal contents() As Byte)
Dim nPacketLength As Int16 = contents.GetLength(0) + m_nHeaderSize
Dim Packet(nPacketLength) As Byte
Packet(0) = CByte(255)
Packet(1) = packetCommand
Array.Copy(BitConverter.GetBytes(nPacketLength), 0, Packet, 2, 2)
' Wrap Header
EncryptHeader(Packet, 1, m_nHeaderSize - 1, 0, 0)
Array.Copy(contents, 0, Packet, m_nHeaderSize, contents.GetLength(0))
Try
m_TCPSocket.GetStream.Write(Packet, 0, nPacketLength)
Catch
If False = m_DisconnectProcess.Equals(Nothing) And True = m_bIsConnected Then
m_DisconnectProcess.Invoke()
End If
m_bIsConnected = False
End Try
End Sub
Private Sub Recv()
Dim asyncReceived As AsyncReceived = New AsyncReceived()
m_TCPSocket.GetStream.BeginRead(m_ReceivedData, m_nReceived, _
m_ReceivedData.GetUpperBound(0) - m_nReceived, m_RecvCallBack, asyncReceived)
End Sub
Private Sub RecvCallBack(ByVal ar As IAsyncResult)
Try
' ¹ÞÀº µ¥ÀÌÅ͸¦ ó¸®ÇÑ´Ù.
m_nReceived += m_TCPSocket.GetStream.EndRead(ar)
Catch ex As Exception
If False = m_DisconnectProcess.Equals(Nothing) And True = m_bIsConnected Then
m_DisconnectProcess.Invoke()
End If
m_bIsConnected = False
End Try
Dim nProcessed As Int32 = 0
Dim nPacketCommand As Byte = 0
Dim nPacketLength As Int16 = 0
Dim nCopy As Int32 = 0
While m_nHeaderSize <= m_nReceived - nProcessed
' Çì´õ¸¦ ºÐ¼®ÇÑ´Ù
If 255 <> m_ReceivedData(nProcessed) Then
Exit While
End If
' ±æÀ̸¦ ºÐ¼®ÇÑ´Ù
DecryptHeader(m_ReceivedData, nProcessed + 1, m_nHeaderSize - 1, 0, 0)
nPacketCommand = m_ReceivedData(nProcessed + 1)
nPacketLength = BitConverter.ToInt16(m_ReceivedData, nProcessed + 2)
' ¾ÆÁ÷ ´ú ¹Þ¾ÒÀ¸¸é ·çÇÁ¸¦ Å»ÃâÇÑ´Ù.
If m_nReceived < nProcessed + nPacketLength Then
EncryptHeader(m_ReceivedData, nProcessed + 1, m_nHeaderSize - 1, 0, 0)
Exit While
End If
Dim process As ProcessPacket = m_ProcessTable(nPacketCommand)
If False = process.Equals(Nothing) Then
Dim contents(nPacketLength - m_nHeaderSize - 1) As Byte
Array.Copy(m_ReceivedData, nProcessed + m_nHeaderSize, _
contents, 0, nPacketLength - m_nHeaderSize)
Dim params() As Object = {contents, nPacketCommand, BitConverter.ToInt16(m_ReceivedData, nProcessed + 8)}
m_MainLoop.Invoke(process, params)
End If
nProcessed += nPacketLength
End While
' ¾ÆÁ÷ ó¸®ÇÏÁö ¾ÊÀº ºÎºÐÀ» ¾ÕÀ¸·Î º¹»çÇÑ´Ù.
If 0 <> nProcessed Then
Array.Copy(m_ReceivedData, nProcessed, m_ReceivedData, 0, m_nReceived - nProcessed)
m_nReceived -= nProcessed
End If
Try
' ´Ù½Ã Recv¸¦ PendingÇÑ´Ù.
Recv()
Catch ex As Exception
If False = m_DisconnectProcess.Equals(Nothing) And True = m_bIsConnected Then
m_DisconnectProcess.Invoke()
End If
m_bIsConnected = False
End Try
End Sub
' ¾Ïȣȭ °ü·Ã ÄÚµå
Private Sub EncryptHeader(ByRef Data() As Byte, ByVal nStartPos As Integer, ByVal nLength As Integer, _
ByVal nPageVer As Integer, ByVal nPageNum As Integer)
If Data.GetLength(0) < nLength Then
Exit Sub
End If
Dim Pos As Integer = 0
For Pos = nStartPos To nLength + nStartPos - 1
Data(Pos) = Data(Pos) Xor m_XORTable(nPageVer, nPageNum, (Pos - nStartPos) Mod BIT_COUNT)
Data(Pos) = Int(Int(Data(Pos) And &H80) / (2 ^ 7)) Or Int(Int(Data(Pos) * 2) And &HFE)
Next
End Sub
Private Sub DecryptHeader(ByRef Data() As Byte, ByVal nStartPos As Integer, ByVal nLength As Integer, _
ByVal nPageVer As Integer, ByVal nPageNum As Integer)
If Data.GetLength(0) < nLength Then
Exit Sub
End If
Dim Pos As Integer = 0
For Pos = nStartPos To nLength + nStartPos - 1
Data(Pos) = Int(Int((Data(Pos) And &H1) * (2 ^ 7)) And &H80) Or (Int(Data(Pos) / 2) And &H7F)
Data(Pos) = Data(Pos) Xor m_XORTable(nPageVer, nPageNum, (Pos - nStartPos) Mod BIT_COUNT)
Next
End Sub
Dim BIT_COUNT As Integer = 40
Dim CODE_PAGE As Integer = 10
Dim m_XORTable(,,) As Byte = {{{ _
&H82, &H53, &H43, &H4C, &H2B, _
&HD, &H37, &HD7, &HD9, &HD8, _
&H1B, &H6D, &HA0, &HC3, &H2B, _
&HEE, &H45, &H88, &H1A, &HA6, _
&H18, &H1D, &H9D, &H38, &H2A, _
&H55, &H3, &H1D, &HCD, &HA6, _
&H73, &H7, &HED, &H8D, &HC5, _
&HDB, &HA3, &HBD, &HB6, &HD5}, _
_
{&H34, &HB5, &HB2, &H3D, &H7D, _
&H43, &H8C, &HC0, &H21, &H25, _
&HCD, &HB6, &H53, &H76, &HCE, _
&H5D, &HD4, &H87, &HCA, &H84, _
&H81, &HCB, &H5E, &H4, &HBA, _
&H69, &H3E, &H65, &HDE, &H21, _
&H8A, &H63, &H62, &H71, &H90, _
&H87, &HA, &H52, &H28, &H44}, _
_
{&HA3, &H49, &HDC, &HEA, &H9, _
&HB7, &H1, &HA4, &HA1, &H11, _
&H11, &H8E, &H80, &H35, &H5B, _
&HDD, &H38, &HD5, &H4E, &H36, _
&HC, &HA2, &HBB, &H5, &H36, _
&H57, &H2E, &H98, &HBE, &H88, _
&H3C, &H28, &H43, &H63, &HA0, _
&HE9, &HE1, &H6D, &H51, &HCB}, _
_
{&H4D, &H62, &H84, &H43, &H89, _
&HC7, &H89, &H83, &H65, &H29, _
&H53, &H95, &H7C, &HC0, &HA1, _
&HC, &HDB, &HD7, &H4, &HD8, _
&H6A, &HD1, &H73, &H1D, &H21, _
&H67, &H86, &H8D, &HA4, &HA0, _
&H34, &HBD, &H31, &H20, &H61, _
&HE, &HE9, &H63, &HB4, &HC0}, _
_
{&HC7, &H36, &H1B, &H41, &H23, _
&H9C, &HD1, &H8C, &H25, &H53, _
&H42, &H2E, &H45, &H6D, &H42, _
&H7B, &H4E, &H5B, &HEB, &H24, _
&H33, &H74, &H52, &H28, &HC6, _
&H2A, &HC3, &H16, &H60, &HA5, _
&H45, &H35, &HDB, &H9A, &H54, _
&H97, &HE2, &HEE, &H9B, &HDE}, _
_
{&HE0, &HC3, &H84, &H41, &HED, _
&H45, &H4C, &H69, &HD9, &H28, _
&H55, &H27, &H8E, &H3A, &H3C, _
&H8E, &H84, &H97, &H14, &HE6, _
&H58, &H51, &H26, &HD, &HE2, _
&H9E, &H66, &H7C, &HD, &H1, _
&H7D, &H17, &H4C, &H8, &HDD, _
&H97, &H1C, &H7B, &HCE, &H5D}, _
_
{&H54, &H37, &H7C, &HC, &H8E, _
&H27, &H7A, &H78, &H2E, &HE6, _
&H6D, &H25, &H62, &H62, &H98, _
&H20, &H2E, &H23, &H15, &H61, _
&H7D, &H97, &H50, &H7, &H20, _
&H7A, &H4, &H29, &H62, &H90, _
&H6B, &HE9, &HE6, &H22, &H72, _
&H38, &H56, &HC9, &H6, &H2E}, _
_
{&H3B, &H47, &H8, &H2D, &H21, _
&H42, &H7, &H69, &H4A, &H57, _
&H8B, &H79, &HE7, &H56, &H27, _
&H23, &H24, &H85, &H47, &H74, _
&H75, &H85, &HA9, &HEB, &H10, _
&HCB, &H17, &H85, &H4B, &H5E, _
&H20, &H78, &HD0, &H7D, &H86, _
&H5E, &H14, &H7E, &H64, &H50}, _
_
{&H69, &H52, &H4A, &HBD, &H8C, _
&H9B, &HD6, &H63, &HBD, &H26, _
&H86, &H32, &H95, &HA4, &H2, _
&H9B, &H1, &H14, &H49, &H78, _
&H88, &H57, &H3A, &H1, &H4A, _
&HBC, &H50, &HCD, &H31, &H39, _
&H71, &H30, &H5B, &H9C, &H4D, _
&H21, &H67, &H82, &HE8, &H5C}, _
_
{&H66, &H10, &HA9, &H7D, &HD2, _
&H36, &HE2, &HB1, &H28, &H20, _
&HD5, &HE7, &HD5, &HE, &HD4, _
&HC, &H2C, &H77, &H80, &HE, _
&HA6, &H37, &HBE, &H61, &HAD, _
&HD6, &H17, &H65, &H13, &H70, _
&HAE, &H40, &H3B, &H52, &HEE, _
&H53, &H84, &HEB, &H4, &HD}}, _
_
{{&H49, &H8C, &H77, &HC0, &HC0, _
&H64, &H54, &HB, &H22, &HBD, _
&H82, &H93, &H9A, &H23, &H8D, _
&HE4, &HC8, &H9D, &HB3, &H50, _
&H44, &HB1, &HE2, &H9E, &H15, _
&H7A, &HA1, &HC, &H24, &HE3, _
&H1E, &HA, &HA, &H73, &H6A, _
&HA5, &H8B, &H3A, &H53, &H33}, _
_
{&HB0, &HE6, &HB7, &H51, &H70, _
&HDA, &HD6, &H29, &HAA, &H10, _
&HB5, &H8A, &H38, &H37, &H4E, _
&H7A, &H3B, &H74, &H7B, &H63, _
&H41, &H7C, &H21, &H65, &H5E, _
&H26, &H95, &H44, &H75, &HA3, _
&H74, &HDD, &HB4, &H33, &H9E, _
&H54, &H3C, &H95, &H5E, &H34}, _
_
{&H10, &H19, &H43, &H64, &H78, _
&H2B, &HA6, &H60, &H7D, &HCD, _
&HA9, &H28, &HB8, &H85, &HE, _
&H66, &HC7, &H3C, &H28, &HDC, _
&HA1, &H4D, &H60, &H9B, &HC7, _
&HD3, &H74, &H93, &HE6, &HC3, _
&H97, &H76, &H12, &HA4, &HCB, _
&HB9, &H22, &H51, &HB9, &H79}, _
_
{&H5C, &H68, &HDB, &HE6, &H59, _
&H57, &H95, &HCD, &HAE, &HCA, _
&H67, &HB8, &H37, &H90, &HBA, _
&H54, &H98, &H95, &H73, &H8E, _
&H47, &HC1, &H40, &HBA, &H80, _
&H26, &H10, &HAA, &H60, &H64, _
&HD8, &H69, &HC7, &HD, &H2B, _
&H28, &HA6, &HBA, &H1, &H4A}, _
_
{&HEE, &H28, &H65, &HC4, &H9D, _
&H41, &H8D, &H91, &H6C, &H91, _
&H7E, &H80, &HC3, &HD1, &HAE, _
&HB6, &H92, &H41, &H66, &H13, _
&H72, &H20, &H26, &HA1, &H72, _
&H5, &H29, &H8, &H88, &H30, _
&H40, &H6D, &H5A, &H41, &H1, _
&H7A, &HDB, &H2C, &HEE, &HC3}, _
_
{&H5C, &H3, &H38, &HD8, &H95, _
&HE7, &HB4, &H67, &H30, &H51, _
&H21, &H68, &H78, &H89, &H68, _
&HB, &HE3, &HB0, &H28, &HB3, _
&HA9, &H38, &H18, &HE4, &H59, _
&H43, &HC9, &H52, &H75, &H4, _
&H15, &H7, &H97, &H14, &H7, _
&H27, &HDA, &HE5, &HD9, &HDB}, _
_
{&HDB, &H8, &H27, &HA3, &H64, _
&HDC, &H42, &HE3, &H3D, &HD, _
&H26, &HA2, &HC3, &H5E, &H3E, _
&HA7, &H47, &HE4, &H1C, &H73, _
&H13, &H99, &H9E, &HBA, &HD3, _
&H8, &H73, &H88, &H3, &H1, _
&H24, &H2E, &H9, &HBD, &H3A, _
&H6E, &H3C, &HB6, &HA2, &H22}, _
_
{&HE7, &H27, &H60, &H20, &H85, _
&HDA, &HEA, &H84, &H86, &H41, _
&H67, &H1C, &H83, &HBE, &H7A, _
&H61, &H67, &H1, &H18, &H30, _
&HC6, &H37, &HBC, &H51, &HBC, _
&H78, &HA1, &H53, &H53, &H58, _
&H9B, &H32, &H5, &H67, &H6B, _
&HC7, &H3A, &H7C, &HA8, &HE5}, _
_
{&H70, &H10, &H29, &H88, &H94, _
&HC0, &HEE, &H8D, &H52, &H20, _
&HD9, &HC3, &H3C, &HB3, &H43, _
&H74, &H83, &HC8, &HC5, &HAA, _
&H90, &H58, &HC, &HD0, &HBC, _
&H2A, &HED, &H4, &H5, &H8E, _
&H27, &HDE, &H9C, &H37, &H57, _
&H2A, &H93, &H63, &H1B, &H9E}, _
_
{&HC3, &H52, &HDB, &HE9, &H63, _
&H9A, &H87, &H18, &H6D, &HBE, _
&H1B, &H37, &H6A, &HEA, &H1, _
&H2, &H1, &HB5, &H74, &H71, _
&HA5, &H9A, &H9A, &H3A, &H11, _
&H8B, &H62, &HD7, &HB0, &H6, _
&HC, &HA0, &H10, &H9, &H97, _
&H5A, &HEB, &HEA, &H18, &HB8}}}
End Class