示例#1
0
        public static void SendResponseEnterServer(ClientManager MyClient)
        {
            int len = 0;

            using (MemoryStream ms = new MemoryStream())
            {
                using (BinaryWriter bw = new BinaryWriter(ms, Encoding.UTF8))
                {
                    bw.Write((byte)28); // packet type
                    bw.Write((Int32)MyClient.data.id_idx);
                    Random rand = new Random();
                    MyClient.data.GMS_TOKEN = rand.Next((int)0xffffff);
                    bw.Write((Int32)MyClient.data.GMS_TOKEN);

                    GMS_bind.SendToGMSAuth(MyClient.data.username, MyClient.data.id_idx, MyClient.data.GMS_TOKEN);

                    len = (int)bw.BaseStream.Length;
                }

                byte[] content = ms.GetBuffer();
                Array.Resize(ref content, len);
                MakePacketAndSend(MyClient, content);
                ClientFunctions.DisconnectClientFromID(MyClient.id);
            }
        }
示例#2
0
        private static void AcceptConnection(IAsyncResult ar)
        {
            Socket _listen = (Socket)ar.AsyncState;

            try
            {
                Socket client = _listen.EndAccept(ar);
                if (client != null)
                {
                    int ClientID = client.GetHashCode();
                    if (!ClientFunctions.ClientIdExist(ClientID))
                    {
                        //Console.WriteLine("[+] Client is Connected: " + client.LocalEndPoint.ToString());
                        ClientManager MyClient = new ClientManager(ClientID, client);


                        Init.Clients.Add(MyClient);
                        //Console.WriteLine("[+] Client added to list!");

                        if (MyClient != null)
                        {
                            int ClientIndex = ClientFunctions.GetClientIndex(ClientID);
                            if (ClientIndex != -1)
                            {
                                //Console.WriteLine(" [+] Client listening packets ...");
                                Init.Clients[ClientIndex]._socket.BeginReceive(Init.Clients[ClientIndex].buffer, 0, ClientManager.BufferSize, SocketFlags.None, new AsyncCallback(ReceiveCallback), Init.Clients[ClientIndex]);
                            }
                        }
                        else
                        {
                            Console.WriteLine("[-] Client in list does not exist!");
                        }
                    }
                    else
                    {
                        // report error
                        // cloned client id hash code
                        Console.WriteLine("[-] Already exist client id: " + ClientID);
                    }
                }
            }
            catch
            {
                // add to log Accept Connection error
                return;
            }
            finally
            {
                _listen.BeginAccept(new AsyncCallback(AcceptConnection), _listen);
            }
        }
示例#3
0
        private static void ReceiveCallback(IAsyncResult ar)
        {
            byte[]        Data;
            ClientManager MyClient = (ClientManager)ar.AsyncState;
            Socket        client   = MyClient._socket;


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

            if (BufferSize > 1000)
            {
                return;
            }

            try
            {
                int BytesReceive = client.EndReceive(ar);
                if (BytesReceive > 0)
                {
                    Data = new byte[BytesReceive];
                    Array.Copy(MyClient.buffer, Data, BytesReceive);
                    ReceiveData.ParsePacket(MyClient, Data);
                    MyClient.buffer = new byte[ClientManager.BufferSize];

                    // Process received data
                }
                else
                {
                    ClientFunctions.DisconnectClientFromID(MyClient.id);
                    ClientFunctions.RemoveClientFromInstance(MyClient);
                }
                client.BeginReceive(MyClient.buffer, 0, ClientManager.BufferSize, SocketFlags.None, new AsyncCallback(ReceiveCallback), MyClient);
            }
            catch (SocketException e)
            {
                if (e.ErrorCode == 10054)
                {
                    ClientFunctions.DisconnectClientFromID(MyClient.id);
                    ClientFunctions.RemoveClientFromInstance(MyClient);
                    //Console.WriteLine("Client disconnected!");
                    return;
                }
            }
            catch
            {
                ClientFunctions.DisconnectClientFromID(MyClient.id);
                ClientFunctions.RemoveClientFromInstance(MyClient);
                //Console.WriteLine("Client disconnected!");
                // add to log receive error
                // remove client connected if is a error: remove from clients list
                //
                return;
            }
        }