Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using SilkroadSecurityApi;
- using System.Net.Sockets;
- using System.Threading;
- using System.Drawing;
- namespace GMHelper
- {
- public class Gateway
- {
- public static Security gw_security = new Security();
- static TransferBuffer gw_recv_buffer = new TransferBuffer(0x100, 0, 0);
- static List<Packet> gw_packets = new List<Packet>();
- static Socket gw_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
- public uint version = UInt32.Parse(Config.frm.sversion);
- public uint locale = UInt32.Parse(Config.frm.slocale);
- object recv_obj = new object();
- #region Async Connect
- public void Start(string IP, string port)
- {
- gw_socket.BeginConnect(IP, Int32.Parse(port), new AsyncCallback(AcceptedCallBack), null);
- }
- void AcceptedCallBack(IAsyncResult result)
- {
- gw_socket.EndConnect(result);
- Thread Send = new Thread(SendToServer);
- Thread Recv = new Thread(AsyncRecv);
- Recv.Start();
- Send.Start();
- }
- #endregion
- void AsyncRecv()
- {
- gw_socket.BeginReceive(gw_recv_buffer.Buffer, 0, 0x1000, SocketFlags.None, new AsyncCallback(AsyncRecvFromServer), null);
- }
- void AsyncRecvFromServer(IAsyncResult iar)
- {
- lock (recv_obj)
- {
- int nReceived = gw_socket.EndReceive(iar);
- if (nReceived != 0)
- {
- gw_recv_buffer.Offset = 0;
- gw_recv_buffer.Size = nReceived;
- gw_security.Recv(gw_recv_buffer);
- List<Packet> RemotePackets = gw_security.TransferIncoming();
- if (RemotePackets != null)
- {
- foreach (Packet packet in RemotePackets)
- {
- byte[] packet_bytes = packet.GetBytes();
- //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);
- if (packet.Opcode == 0x5000 || packet.Opcode == 0x9000)
- {
- continue;
- }
- if (packet.Opcode == 0x2001)
- {
- if (packet.ReadAscii() == "GatewayServer")
- {
- Packet response = new Packet(0x6100, true, false);
- response.WriteUInt8(locale);
- response.WriteAscii("SR_Client");
- response.WriteUInt32(version);
- gw_security.Send(response);
- }
- }
- else if (packet.Opcode == 0xA100)
- {
- byte result = packet.ReadUInt8();
- if (result == 1)
- {
- Logger.LogIt("Gateway Server bağlantısı başarılı.", Color.Green);
- Packet response = new Packet(0x6101, true);
- gw_security.Send(response);
- }
- else
- {
- Logger.LogIt("Version/Locale hatası!", Color.Red);
- return;
- }
- }
- if ((packet.Opcode == 0xA101) && (packet.ReadUInt8() == 1))
- {
- byte num12 = packet.ReadUInt8();
- string str3 = packet.ReadAscii();
- byte num13 = packet.ReadUInt8();
- byte num14 = packet.ReadUInt8();
- ushort num15 = packet.ReadUInt16();
- string ShardName = packet.ReadAscii();
- ushort OnlinePlayers = packet.ReadUInt16();
- ushort TotalPlayers = packet.ReadUInt16();
- byte num18 = packet.ReadUInt8();
- if (OnlinePlayers == 0)
- {
- Logger.LogIt("Online oyuncu bulunamadı, Server kapalı olabilir.", Color.DarkMagenta);
- }
- Logger.LogIt("Server Adı: '" + ShardName + "'", Color.Green);
- Logger.LogIt("Server Kapasitesi: " + string.Concat(new object[] { " Online Oyuncu: (", OnlinePlayers, " / ", TotalPlayers, ")" }), Color.Green);
- Logger.LogIt("SrGlobalOperation-> " + string.Concat(new object[] { "' " + str3 + " '" }), Color.Green);
- }
- else if (packet.Opcode == 0xA102)
- {
- byte firstbyte = packet.ReadUInt8();
- if (firstbyte == 1) //Connected to Server
- {
- uint LoginID = packet.ReadUInt32();
- string ip = packet.ReadAscii();
- int port = packet.ReadUInt16();
- Agent ag = new Agent();
- //ag.Start(ip, port.ToString(), Login, Config.frm.id.Text, pw.Text);
- //Logger.LogIt("AgentServer bağlantısı sağlandı. Port: " + port.ToString() + "", Color.Green);
- break;
- }
- if (firstbyte == 2)//Cannot connect World Server.
- {
- switch (packet.ReadUInt8())
- {
- case 1:
- {
- //Reading the packets entire strucure of parameters.
- byte totalattempts = packet.ReadUInt8();
- byte num7 = packet.ReadUInt8();
- byte num8 = packet.ReadUInt8();
- byte num9 = packet.ReadUInt8();
- byte attempts = packet.ReadUInt8();
- Logger.LogIt(string.Concat(new object[] { "Yanlış ID/PW, Lütfen tekrar deneyin. (", attempts, "/", totalattempts, ")" }), Color.Red);
- break;
- }
- case 2:
- if (packet.ReadUInt8() == 1)
- {
- Logger.LogIt("Engellendin, Sebep: " + packet.ReadAscii(), Color.DarkMagenta);
- }
- break;
- case 3:
- Logger.LogIt("Karakter zaten oyunda.", Color.Red);
- break;
- default:
- Logger.LogIt("Server bağlantısı başarısız, kapalı olabilir.", Color.Red);
- break;
- }
- }
- }
- else if (packet.Opcode == 0x2322)
- {
- UInt32[] pixels = Captcha.GeneratePacketCaptcha(packet);
- Random rnd = new Random();
- Captcha.SaveCaptchaToBMP(pixels, Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + rnd.Next(000000, 999999) + ".bmp");
- Logger.LogIt("Captcha oluşturuldu, Lütfen giriniz.", Color.Green);
- }
- else if (packet.Opcode == 0xA323)
- {
- byte capnum = packet.ReadUInt8();
- if (capnum == 1)
- {
- Logger.LogIt("Captcha doğru.", Color.Green);
- }
- else
- Logger.LogIt("Captcha yanlış, lütfen tekrar deneyin", Color.Red);
- }
- }
- }
- AsyncRecv();
- }
- }
- }
- #region AsyncSending
- void AsyncSend(IAsyncResult iar)
- {
- int nSent = gw_socket.EndSend(iar);
- }
- void SendToServer()
- {
- try
- {
- while (true)
- {
- List<KeyValuePair<TransferBuffer, Packet>> list = gw_security.TransferOutgoing();
- if (list != null)
- {
- foreach (var kvp in list)
- {
- byte[] packet_bytes = kvp.Value.GetBytes();
- //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);
- gw_socket.BeginSend(kvp.Key.Buffer, 0, kvp.Key.Size, SocketFlags.None, new AsyncCallback(AsyncSend), null);
- if (kvp.Value.Opcode == 0x2002)
- {
- //Globals.MainWindow.label6.ForeColor = Color.Green;
- //Globals.MainWindow.label6.Text = "Responsive(Gateway) " + DateTime.Now.ToString("h:mm:ss"); ;
- }
- }
- }
- }
- }
- catch (Exception ex)
- {
- Logger.LogIt("Veri(Gateway) gönderilemiyor.", Color.Red);
- }
- }
- #endregion
- #region AsyncDisconnecting
- public static void DisconnectModuleSocket()
- {
- try
- {
- if (gw_socket != null)
- {
- gw_socket.BeginDisconnect(true, new AsyncCallback(EndDC), null);
- Logger.LogIt("Gateway bağlantısı kesildi.", Color.Green);
- }
- //gw_socket = null;
- }
- catch (Exception ex)
- {
- Logger.LogIt("Gateway bağlantısı kesilemedi.", Color.Red);
- }
- }
- static void EndDC(IAsyncResult iar)
- {
- gw_socket.EndDisconnect(iar);
- }
- #endregion
- #region SendToServer
- public static void SendToServer(Packet packet)
- {
- gw_security.Send(packet);
- }
- #endregion
- }
- }
Add Comment
Please, Sign In to add comment