Guest User

Untitled

a guest
Jan 18th, 2018
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.62 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using SilkroadSecurityApi;
  7. using System.Net.Sockets;
  8. using System.Threading;
  9. using System.Drawing;
  10.  
  11. namespace GMHelper
  12. {
  13. public class Gateway
  14. {
  15. public static Security gw_security = new Security();
  16. static TransferBuffer gw_recv_buffer = new TransferBuffer(0x100, 0, 0);
  17. static List<Packet> gw_packets = new List<Packet>();
  18. static Socket gw_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  19. public uint version = UInt32.Parse(Config.frm.sversion);
  20. public uint locale = UInt32.Parse(Config.frm.slocale);
  21. object recv_obj = new object();
  22.  
  23. #region Async Connect
  24. public void Start(string IP, string port)
  25. {
  26. gw_socket.BeginConnect(IP, Int32.Parse(port), new AsyncCallback(AcceptedCallBack), null);
  27. }
  28.  
  29. void AcceptedCallBack(IAsyncResult result)
  30. {
  31. gw_socket.EndConnect(result);
  32. Thread Send = new Thread(SendToServer);
  33. Thread Recv = new Thread(AsyncRecv);
  34.  
  35. Recv.Start();
  36. Send.Start();
  37. }
  38. #endregion
  39.  
  40. void AsyncRecv()
  41. {
  42. gw_socket.BeginReceive(gw_recv_buffer.Buffer, 0, 0x1000, SocketFlags.None, new AsyncCallback(AsyncRecvFromServer), null);
  43. }
  44.  
  45. void AsyncRecvFromServer(IAsyncResult iar)
  46. {
  47. lock (recv_obj)
  48. {
  49. int nReceived = gw_socket.EndReceive(iar);
  50. if (nReceived != 0)
  51. {
  52. gw_recv_buffer.Offset = 0;
  53. gw_recv_buffer.Size = nReceived;
  54.  
  55. gw_security.Recv(gw_recv_buffer);
  56.  
  57. List<Packet> RemotePackets = gw_security.TransferIncoming();
  58. if (RemotePackets != null)
  59. {
  60. foreach (Packet packet in RemotePackets)
  61. {
  62. byte[] packet_bytes = packet.GetBytes();
  63. //Logger.LogIt("[S->C][{0:X4}][{1} bytes]{2}{3}{4}{5}{6}", packet.Opcode, packet_bytes.Length, packet.Encrypted ? "[Encrypted]" : "", packet.Massive ? "[Massive]" : "", Environment.NewLine, Utility.HexDump(packet_bytes), Environment.NewLine);
  64. if (packet.Opcode == 0x5000 || packet.Opcode == 0x9000)
  65. {
  66. continue;
  67. }
  68.  
  69. if (packet.Opcode == 0x2001)
  70. {
  71. if (packet.ReadAscii() == "GatewayServer")
  72. {
  73. Packet response = new Packet(0x6100, true, false);
  74. response.WriteUInt8(locale);
  75. response.WriteAscii("SR_Client");
  76. response.WriteUInt32(version);
  77. gw_security.Send(response);
  78. }
  79. }
  80. else if (packet.Opcode == 0xA100)
  81. {
  82. byte result = packet.ReadUInt8();
  83. if (result == 1)
  84. {
  85. Logger.LogIt("Gateway Server bağlantısı başarılı.", Color.Green);
  86. Packet response = new Packet(0x6101, true);
  87. gw_security.Send(response);
  88. }
  89. else
  90. {
  91. Logger.LogIt("Version/Locale hatası!", Color.Red);
  92. return;
  93. }
  94. }
  95. if ((packet.Opcode == 0xA101) && (packet.ReadUInt8() == 1))
  96. {
  97. byte num12 = packet.ReadUInt8();
  98. string str3 = packet.ReadAscii();
  99. byte num13 = packet.ReadUInt8();
  100. byte num14 = packet.ReadUInt8();
  101. ushort num15 = packet.ReadUInt16();
  102. string ShardName = packet.ReadAscii();
  103. ushort OnlinePlayers = packet.ReadUInt16();
  104. ushort TotalPlayers = packet.ReadUInt16();
  105. byte num18 = packet.ReadUInt8();
  106. if (OnlinePlayers == 0)
  107. {
  108. Logger.LogIt("Online oyuncu bulunamadı, Server kapalı olabilir.", Color.DarkMagenta);
  109. }
  110. Logger.LogIt("Server Adı: '" + ShardName + "'", Color.Green);
  111. Logger.LogIt("Server Kapasitesi: " + string.Concat(new object[] { " Online Oyuncu: (", OnlinePlayers, " / ", TotalPlayers, ")" }), Color.Green);
  112. Logger.LogIt("SrGlobalOperation-> " + string.Concat(new object[] { "' " + str3 + " '" }), Color.Green);
  113. }
  114.  
  115. else if (packet.Opcode == 0xA102)
  116. {
  117. byte firstbyte = packet.ReadUInt8();
  118. if (firstbyte == 1) //Connected to Server
  119. {
  120. uint LoginID = packet.ReadUInt32();
  121. string ip = packet.ReadAscii();
  122. int port = packet.ReadUInt16();
  123.  
  124. Agent ag = new Agent();
  125. //ag.Start(ip, port.ToString(), Login, Config.frm.id.Text, pw.Text);
  126. //Logger.LogIt("AgentServer bağlantısı sağlandı. Port: " + port.ToString() + "", Color.Green);
  127. break;
  128. }
  129.  
  130. if (firstbyte == 2)//Cannot connect World Server.
  131. {
  132. switch (packet.ReadUInt8())
  133. {
  134. case 1:
  135. {
  136. //Reading the packets entire strucure of parameters.
  137. byte totalattempts = packet.ReadUInt8();
  138. byte num7 = packet.ReadUInt8();
  139. byte num8 = packet.ReadUInt8();
  140. byte num9 = packet.ReadUInt8();
  141. byte attempts = packet.ReadUInt8();
  142.  
  143. Logger.LogIt(string.Concat(new object[] { "Yanlış ID/PW, Lütfen tekrar deneyin. (", attempts, "/", totalattempts, ")" }), Color.Red);
  144. break;
  145. }
  146. case 2:
  147. if (packet.ReadUInt8() == 1)
  148. {
  149. Logger.LogIt("Engellendin, Sebep: " + packet.ReadAscii(), Color.DarkMagenta);
  150. }
  151. break;
  152.  
  153. case 3:
  154. Logger.LogIt("Karakter zaten oyunda.", Color.Red);
  155. break;
  156.  
  157. default:
  158. Logger.LogIt("Server bağlantısı başarısız, kapalı olabilir.", Color.Red);
  159. break;
  160. }
  161. }
  162. }
  163. else if (packet.Opcode == 0x2322)
  164. {
  165. UInt32[] pixels = Captcha.GeneratePacketCaptcha(packet);
  166. Random rnd = new Random();
  167. Captcha.SaveCaptchaToBMP(pixels, Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + rnd.Next(000000, 999999) + ".bmp");
  168. Logger.LogIt("Captcha oluşturuldu, Lütfen giriniz.", Color.Green);
  169. }
  170. else if (packet.Opcode == 0xA323)
  171. {
  172. byte capnum = packet.ReadUInt8();
  173. if (capnum == 1)
  174. {
  175. Logger.LogIt("Captcha doğru.", Color.Green);
  176. }
  177. else
  178. Logger.LogIt("Captcha yanlış, lütfen tekrar deneyin", Color.Red);
  179. }
  180. }
  181. }
  182. AsyncRecv();
  183. }
  184. }
  185. }
  186.  
  187. #region AsyncSending
  188. void AsyncSend(IAsyncResult iar)
  189. {
  190. int nSent = gw_socket.EndSend(iar);
  191. }
  192.  
  193. void SendToServer()
  194. {
  195. try
  196. {
  197. while (true)
  198. {
  199.  
  200. List<KeyValuePair<TransferBuffer, Packet>> list = gw_security.TransferOutgoing();
  201. if (list != null)
  202. {
  203. foreach (var kvp in list)
  204. {
  205.  
  206. byte[] packet_bytes = kvp.Value.GetBytes();
  207. //Logger.LogIt("[C->S][{0:X4}][{1} bytes]{2}{3}{4}{5}{6}", kvp.Value.Opcode, packet_bytes.Length, kvp.Value.Encrypted ? "[Encrypted]" : "", kvp.Value.Massive ? "[Massive]" : "", Environment.NewLine, Utility.HexDump(packet_bytes), Environment.NewLine);
  208. gw_socket.BeginSend(kvp.Key.Buffer, 0, kvp.Key.Size, SocketFlags.None, new AsyncCallback(AsyncSend), null);
  209.  
  210. if (kvp.Value.Opcode == 0x2002)
  211. {
  212. //Globals.MainWindow.label6.ForeColor = Color.Green;
  213. //Globals.MainWindow.label6.Text = "Responsive(Gateway) " + DateTime.Now.ToString("h:mm:ss"); ;
  214. }
  215.  
  216. }
  217. }
  218. }
  219.  
  220. }
  221. catch (Exception ex)
  222. {
  223. Logger.LogIt("Veri(Gateway) gönderilemiyor.", Color.Red);
  224. }
  225. }
  226. #endregion
  227.  
  228. #region AsyncDisconnecting
  229. public static void DisconnectModuleSocket()
  230. {
  231. try
  232. {
  233. if (gw_socket != null)
  234. {
  235. gw_socket.BeginDisconnect(true, new AsyncCallback(EndDC), null);
  236. Logger.LogIt("Gateway bağlantısı kesildi.", Color.Green);
  237. }
  238.  
  239. //gw_socket = null;
  240. }
  241. catch (Exception ex)
  242. {
  243. Logger.LogIt("Gateway bağlantısı kesilemedi.", Color.Red);
  244. }
  245. }
  246.  
  247. static void EndDC(IAsyncResult iar)
  248. {
  249. gw_socket.EndDisconnect(iar);
  250.  
  251. }
  252. #endregion
  253.  
  254. #region SendToServer
  255. public static void SendToServer(Packet packet)
  256. {
  257. gw_security.Send(packet);
  258. }
  259. #endregion
  260. }
  261. }
Add Comment
Please, Sign In to add comment