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); } }
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; } }