V-IntConnect.asm
上传用户:santakups8
上传日期:2021-03-23
资源大小:544k
文件大小:9k
源码类别:

模拟服务器

开发平台:

Asm

  1. ;EasyCodeName=Module1,1
  2. ;-----------------------------------------------------------------------------------
  3. ;    VeMU
  4. ;    Its a package that allows the user to set his own server of the game
  5. ;    "MuOnline", this is not an emulator since i am not "emulating"
  6. ;    what the actual games does, i am "creating" a method for set a Server
  7. ;    of this Game.
  8. ;
  9. ;    Copyright (C) 2010  Felipe Ya馿z
  10. ;
  11. ;    This program is free software: you can redistribute it and/or modify
  12. ;    it under the terms of the GNU General Public License as published by
  13. ;    the Free Software Foundation, either version 3 of the License, or
  14. ;    (at your option) any later version.
  15. ;
  16. ;    This program is distributed in the hope that it will be useful,
  17. ;    but WITHOUT ANY WARRANTY; without even the implied warranty of
  18. ;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  19. ;    GNU General Public License for more details.
  20. ;
  21. ;    You should have received a copy of the GNU General Public License
  22. ;    along with this program.  If not, see http://www.gnu.org/licenses/.
  23. ;-----------------------------------------------------------------------------------
  24. ;-----------------------------------------------------------------------------------
  25. ;                        -----------------
  26. ;                             Coded     /
  27. ;                              By      /
  28. ;                           -={FeN$x)=-
  29. ;                         /  Felipe Y.  
  30. ;                        /               
  31. ;                        -----------------
  32. ; Programming Lang: ASM
  33. ; Country: Chile
  34. ;              My respect for all those who lost their lifes
  35. ;              In the earthquake of my country...
  36. ;              Let god take their spirits home...
  37. ;-----------------------------------------------------------------------------------
  38. Packet_Internal_Login Struct
  39.  UniHeaders PacketHeaders <>
  40.  GSPort Word ?
  41.  ServerName Byte 50 Dup(0)
  42.  ServerCode Word ?
  43. Packet_Internal_Login EndS
  44. .Const
  45. ;/////////////////////////////////
  46. ;Internal Clients uMSG IDs
  47. ;If you want to change
  48. ;Dont change the last bit
  49. ;Example:
  50. ; JSID equ XXX0
  51. ; JSID equ 1410
  52. ;Also remember to change in
  53. ;V_Sock_InternalRecv the
  54. ;editable value of optimisation
  55. ;/////////////////////////////////
  56. JSID    equ 1400h  ;uMSG ID for WndProc
  57. RankID  equ 1401h  ;uMSG ID for WndProc
  58. EventID equ 1402h  ;uMSG ID for WndProc
  59. DS1ID   equ 1403h  ;uMSG ID for WndProc
  60. DS2ID   equ 1404h  ;uMSG ID for WndProc
  61. ExDBID  equ 1405h  ;uMSG ID for WndProc
  62. CSID    equ 1406h  ;uMSG ID for WndProc
  63. ;/////////////////////////////////
  64. ;/////////////////////////////////
  65. TCPType equ 0 ;TCP type protocol
  66. UDPType equ 1 ;UPD type protocol
  67. ;////////////////////////////////
  68. ;/////////////////////////
  69. ;Total of clients
  70. ;/////////////////////////
  71. TotalInternalClients equ 6 ;JS, DS1, DS2, EventChip, Ranking, ExDB, CS
  72. .Data?
  73. InternalClients DB SizeOf InternalClients_Struct * TotalInternalClients Dup(?) ;The 6 internal clients structs in this buffer
  74. .Data
  75. ;///////////////////////
  76. ;Aligned to 14 bytes
  77. ;Dont edit the align !
  78. ;//////////////////////
  79. InternalClientsNames DB "JoinServer", 0, 0, 0, 0
  80.                      DB "DataServer1", 0, 0, 0
  81.                      DB "DataServer2", 0, 0, 0
  82.                      DB "EventChip", 0, 0, 0, 0, 0
  83.                      DB "RankingServer", 0
  84.                      DB "ExDBServer", 0, 0, 0, 0
  85.                      DB "ConnectServer", 0
  86. .Code
  87. V_Sock_InitInternalClients Proc
  88. assume edx:ptr InternalClients_Struct
  89. lea edx, InternalClients
  90. xor eax, eax
  91. ;/////////////////////////////////////////
  92. ;Load all internal client info
  93. ;/////////////////////////////////////////
  94. .repeat
  95.  push edx ;Save struct
  96.  .if (eax == 0) ;JoinServer set info
  97.   mov [edx].ProtocolAddr, offset V_JS_ProtocolCore
  98.   mov [edx].TCPorUDP, TCPType ;TCP
  99.   mov ecx, JSPort
  100.   mov [edx].Port, ecx ;Set port
  101.   mov [edx].MSGID, JSID ;Set MsgID for sync select
  102.   invoke szCopy, addr JSIP, addr [edx].IPorName
  103.  .elseif (eax == 1) ;DataServer1 set info
  104.   mov [edx].ProtocolAddr, offset V_DS_ProtocolCore
  105.   mov [edx].TCPorUDP, TCPType ;TCP
  106.   mov ecx, DS1Port
  107.   mov [edx].Port, ecx ;Set port
  108.   mov [edx].MSGID, DS1ID ;Set MsgID for sync select
  109.   invoke szCopy, addr DS1IP, addr [edx].IPorName
  110.  .elseif (eax == 2) ;DataServer2 set info
  111.   mov [edx].ProtocolAddr, offset V_DS_ProtocolCore
  112.   mov [edx].TCPorUDP, TCPType ;TCP
  113.   mov ecx, DS2Port
  114.   mov [edx].Port, ecx ;Set port
  115.   mov [edx].MSGID, DS2ID ;Set MsgID for sync select
  116.   invoke szCopy, addr DS2IP, addr [edx].IPorName
  117.  .elseif (eax == 3) ;EventChip set info
  118.   mov [edx].ProtocolAddr, offset V_Event_ProtocolCore
  119.   mov [edx].TCPorUDP, TCPType ;TCP
  120.   mov ecx, EventPort
  121.   mov [edx].Port, ecx ;Set port
  122.   mov [edx].MSGID, EventID ;Set MsgID for sync select
  123.   invoke szCopy, addr EventIP, addr [edx].IPorName
  124.  .elseif (eax == 4) ;Ranking set info
  125.   mov [edx].ProtocolAddr, offset V_Rank_ProtocolCore
  126.   mov [edx].TCPorUDP, TCPType ;TCP
  127.   mov ecx, RankPort
  128.   mov [edx].Port, ecx ;Set port
  129.   mov [edx].MSGID, RankID ;Set MsgID for sync select
  130.   invoke szCopy, addr RankIP, addr [edx].IPorName
  131.  .elseif (eax == 5) ;ExDB set info
  132.   mov [edx].ProtocolAddr, offset V_ExDB_ProtocolCore
  133.   mov [edx].TCPorUDP, TCPType ;TCP
  134.   mov ecx, ExDBPort
  135.   mov [edx].Port, ecx ;Set port
  136.   mov [edx].MSGID, ExDBID ;Set MsgID for sync select
  137.   invoke szCopy, addr ExDBIP, addr [edx].IPorName
  138.  .elseif (eax == 6) ;CS set info
  139.   mov [edx].ProtocolAddr, offset V_CS_ProtocolCore
  140.   mov [edx].TCPorUDP, UDPType ;UDP
  141.   mov ecx, CSPort
  142.   mov [edx].Port, ecx ;Set port
  143.   mov [edx].MSGID, CSID ;Set MsgID for sync select
  144.   invoke szCopy, addr CSIP, addr [edx].IPorName
  145.  .else
  146.  .endif
  147.  pop edx ;Return struct
  148.  add edx, SizeOf InternalClients_Struct ;Next struct
  149. .until (edx == SizeOf InternalClients_Struct * TotalInternalClients)
  150. lea ecx, InternalClients
  151. xor edx, edx
  152. ;//////////////////////////////////////////////
  153. ;Connect all internal clients
  154. ;//////////////////////////////////////////////
  155. .repeat
  156.  push edx
  157.  imul edx, edx, SizeOf InternalClients_Struct
  158.  add ecx, edx
  159.  call V_Sock_SetAll ;Set internal connection
  160.  pop edx
  161.  push edx
  162. ;-----------------------------------------------------------------------
  163.  RGB 255, 64, 64
  164.  imul edx, edx, 14 ;14 Bytes aligment for strings
  165.  add edx, offset InternalClientsNames
  166.  Invoke vprint, $CTA0("[%s]:] Connected"), Eax, 1, Edx ;Display message
  167. ;-----------------------------------------------------------------------
  168.  pop edx
  169.  add edx, 1 ;Next struct
  170. .until (edx == TotalInternalClients)
  171. lea ecx, InternalClients
  172. xor edx, edx
  173. ;/////////////////////////////////////////
  174. ;Send packets to internal clients
  175. ;////////////////////////////////////////
  176. .repeat
  177.  push edx
  178.  .if (edx == 6) ;Load CS
  179.    imul edx, edx, SizeOf InternalClients_Struct
  180.    add ecx, edx
  181.    call V_CS_InfoSend
  182.  .elseif (edx == 0) || (edx == 1) || (edx == 2) ;JS, DS1 & DS2
  183.    imul edx, edx, SizeOf InternalClients_Struct
  184.    add ecx, edx
  185.    call V_Sock_InternalLogin
  186.  .endif
  187.  pop edx
  188.  add edx, 1 ;Next struct
  189. .until (edx == 7)
  190. Ret
  191. V_Sock_InitInternalClients EndP
  192. V_Sock_InternalAdmin Proc uMSG:UINT, lParam:LPARAM
  193. assume ecx:ptr InternalClients_Struct
  194. mov eax, uMSG
  195. xor eax, 14000h ;This is editable value if you edit the uMSG ID (optimisation value) !
  196. .If (eax > 6) ;If we exceeded the Interal clients ID
  197. .Else
  198.  mov eax, lParam
  199.  and eax, 0FFFFh
  200.  .If (eax == FD_READ)
  201.     mov ecx, uMSG
  202.     and ecx, 0Fh ;Bite only
  203.     imul ecx, ecx, SizeOf InternalClients_Struct
  204.     add ecx, offset InternalClients ;Define the internal client struct
  205.     call V_Sock_Recv ;Recv the packet
  206.  .ElseIf (EAX == FD_WRITE) ;In case we couldnt send caused WSAEWOULDBLOCK
  207.     mov ecx, uMSG
  208.     and ecx, 0Fh ;Bite only
  209.     imul ecx, ecx, SizeOf InternalClients_Struct
  210.     add ecx, offset InternalClients ;Define the internal client struct
  211.     mov eax, [ecx].pSendPacket
  212.     mov edx, [ecx].LastLengthPacket
  213.     invoke V_Sock_Send, eax, edx ;Send the packet we couldnt
  214.     RGB 255, 64, 64
  215.     mov edx, uMSG
  216.     and edx, 0Fh ;Bite only
  217.     imul edx, edx, 14 ;14 Bytes aligment for strings
  218.     add edx, offset InternalClientsNames
  219.     Invoke vprint, $CTA0("[%s]:] Retrying to send packet"), Eax, Edx
  220.  .ElseIf (Eax == FD_CLOSE)
  221.     RGB 255, 64, 64
  222.     mov edx, uMSG
  223.     and edx, 0Fh ;Bite only
  224.     imul edx, edx, 14 ;14 Bytes aligment for strings
  225.     add edx, offset InternalClientsNames
  226.     Invoke vprint, $CTA0("[%s]:] FD-CLOSE Requested"), Eax, Edx
  227.     Invoke SendMessage, GShWnd, WM_CLOSE, NULL, NULL
  228.  .Else
  229.     RGB 255, 64, 64
  230.     mov edx, uMSG
  231.     and edx, 0Fh ;Bite only
  232.     imul edx, edx, 14 ;14 Bytes aligment for strings
  233.     add edx, offset InternalClientsNames
  234.     mov ecx, lParam
  235.     and ecx, 0FFFFh
  236.     Invoke vprint, $CTA0("[%s]:] Extrange notification [%d]"), Eax, Edx, Ecx
  237.     Invoke SendMessage, GShWnd, WM_CLOSE, NULL, NULL
  238.  .endif
  239. .endif
  240. assume ecx:nothing
  241. Ret
  242. V_Sock_InternalAdmin EndP
  243. V_Sock_InternalLogin Proc
  244. local MyStruct:Dword
  245. mov MyStruct, ecx
  246. lea eax, InternalPacket
  247. assume eax:ptr Packet_Internal_Login
  248. Mov Byte Ptr [eax].UniHeaders.PacketType, 0C1H
  249. Mov Byte Ptr [eax].UniHeaders.PacketLength, 58
  250. Mov Byte Ptr [eax].UniHeaders.Header, 0H
  251. Mov Byte Ptr [eax].UniHeaders.SubHeader, 1
  252. Mov edx, GSPort
  253. Mov Word Ptr [eax].GSPort, Dx
  254. push eax
  255. Invoke lstrcpy, Addr [eax].ServerName, Offset ServerName
  256. pop eax
  257. Mov ecx, ServerCode
  258. Mov Word Ptr [eax].ServerCode, Cx
  259. Mov Ecx, MyStruct
  260. Invoke V_Sock_Send, Addr InternalPacket, [eax].UniHeaders.PacketLength
  261. Ret
  262. V_Sock_InternalLogin EndP