Exemple #1
0
        private static void ZSBindAccept(IAsyncResult ar)
        {
            Socket _listen = (Socket)ar.AsyncState;

            try
            {
                Socket client = _listen.EndAccept(ar);
                if (client != null)
                {
                    int ClientID = client.GetHashCode();
                    Console.WriteLine("[W] ZoneServer Connected");
                    ZS_Manager MyZS = new ZS_Manager(ClientID, client);
                    ZS_Clients.Add(MyZS);

                    int GMSClientIndex = GetClientIndex(ClientID);
                    ZS_Clients[GMSClientIndex]._socket.BeginReceive(ZS_Clients[GMSClientIndex].buffer, 0, ZS_Manager.BufferSize, SocketFlags.None, new AsyncCallback(ZSBind_receive), ZS_Clients[GMSClientIndex]);
                }
            }
            catch
            {
                return;
            }
            finally
            {
                _listen.BeginAccept(new AsyncCallback(ZSBindAccept), _listen);
            }
        }
Exemple #2
0
 public static void SendToZoneServer(ZS_Manager ZS, byte[] data)
 {
     try
     {
         ZS._socket.BeginSend(data, 0, data.Length, SocketFlags.None, new AsyncCallback(SendZSCallback), ZS._socket);
     }
     catch
     {
         return;
     }
 }
Exemple #3
0
        private static void ZSBind_receive(IAsyncResult ar)
        {
            byte[]     Data;
            ZS_Manager My_ZS  = (ZS_Manager)ar.AsyncState;
            Socket     client = My_ZS._socket;


            if (client == null)
            {
                return;
            }
            if (!client.Connected)
            {
                return;
            }
            int BufferSize = AsyncSocket.getPendingByteCount(client);

            if (BufferSize > 1000)
            {
                return;
            }

            try
            {
                int BytesReceive = client.EndReceive(ar);
                if (BytesReceive > 0)
                {
                    Data = new byte[BytesReceive];
                    Array.Copy(My_ZS.buffer, Data, BytesReceive);
                    HandleZSReceive(My_ZS, Data);
                    My_ZS.buffer = new byte[ZS_Manager.BufferSize];
                }
                else
                {
                    DisconnectClientFromID(My_ZS.id);
                }
                client.BeginReceive(My_ZS.buffer, 0, ZS_Manager.BufferSize, SocketFlags.None, new AsyncCallback(ZSBind_receive), My_ZS);
            }
            catch (SocketException e)
            {
                if (e.ErrorCode == 10054)
                {
                    DisconnectClientFromID(My_ZS.id);
                    //disconnect
                    return;
                }
            }
            catch
            {
                DisconnectClientFromID(My_ZS.id);
                //disconnect
                return;
            }
        }
Exemple #4
0
        private static void HandleZSReceive(ZS_Manager My_ZS, byte[] data)
        {
            // struct packet zs
            // 2 bytes - tamanho
            // 1 byte - packet type
            // data

            using (MemoryStream ms = new MemoryStream(data))
            {
                using (BinaryReader br = new BinaryReader(ms, Encoding.UTF8))
                {
                    short  DataLen    = br.ReadInt16();
                    byte   packetType = br.ReadByte();
                    byte[] Data       = br.ReadBytes(DataLen);

                    ParsingZSDataReceived(packetType, Data, My_ZS);

                    br.Close();
                }
                ms.Close();
            }
        }
Exemple #5
0
        private static void ParsingZSDataReceived(byte packetType, byte[] packetData, ZS_Manager My_ZS)
        {
            switch (packetType)
            {
            default:
                Console.WriteLine("[ZS] Packet type not found!");

                break;
            }
        }