Beispiel #1
0
        public void acceptPenguins()
        {
            TcpClient client = listener.AcceptTcpClient();

            Console.Write("[mCPPS] Accepting new client \n");
            Console.WriteLine();
            Penguin penguin = new Penguin(client, this);

            this.penguins.Add(penguin);
            NetworkStream stream = penguin.conn.GetStream();
            var           peng   = new Thread(() =>
            {
                while (penguin.conn.Connected)
                {
                    byte[] data      = new byte[256];
                    int numBytesRead = stream.Read(data, 0, data.Length);
                    if (numBytesRead == 0)
                    {
                        this.removePenguin(penguin);
                        return;
                    }
                    string packet = Encoding.UTF8.GetString(data).Substring(0, numBytesRead);
                    String[] p    = packet.Split('\0');
                    foreach (string packett in p)
                    {
                        if (packett.Length > 1)
                        {
                            this.handleAPacket(packett, penguin);
                        }
                    }
                }
            });

            peng.Start();
        }
Beispiel #2
0
        private void writeUser(string packet, Penguin penguin)
        {
            if (packet.Substring(packet.Length - 1, 1) != "\0")
            {
                packet = packet + "\0";
            }
            byte[]        bytes  = Encoding.ASCII.GetBytes(packet);
            NetworkStream stream = penguin.conn.GetStream();

            stream.Write(bytes, 0, packet.Length);
            Console.WriteLine("[SENT] " + packet + "\n");
        }
Beispiel #3
0
        private void handleAPacket(string packet, Penguin penguin)
        {
            Console.WriteLine("[RCVD] " + packet + " \n");
            string start = packet.Substring(0, 1);

            switch (start)
            {
            case "<":
                this.handleXmlPacket(packet, penguin);
                break;

            case "%":
                this.handlePlayPacket(packet, penguin);
                break;
            }
        }
Beispiel #4
0
        private void removePenguin(Penguin penguin)
        {
            Console.WriteLine("[mCPPS] Removing penguin\n");
            NetworkStream stream = penguin.conn.GetStream();

            stream.Close();              /// Probably unnecessary
            penguin.conn.Close();
            int i = 0;

            foreach (Penguin penguin2 in this.penguins)
            {
                if (penguin2 == penguin)
                {
                    this.penguins.RemoveAt(i);
                    return;
                }
                i++;
            }
        }
Beispiel #5
0
        private void handleXmlPacket(string packet, Penguin penguin)
        {
            switch (packet)
            {
            case "<policy-file-request/>":
                this.writeUser("<cross-domain-policy><allow-access-from domain='*' to-ports='*' /></cross-domain-policy>", penguin);
                return;

            case "<msg t='sys'><body action='verChk' r='0'><ver v='153' /></body></msg>":
                this.writeUser("<msg t='sys'><body action='apiOK' r='0'></body></msg>", penguin);
                return;

            case "<msg t='sys'><body action='rndK' r='-1'></body></msg>":
                penguin.randkey = this.generateRandomKey();
                this.writeUser("<msg t='sys'><body action='rndK' r='-1'><k>" + penguin.randkey + "</k></body></msg>", penguin);
                return;
            }
            if (packet.Substring(0, 40) == "<msg t='sys'><body action='login' r='0'>")
            {
                this.handleLogin(packet, penguin);
            }
        }
Beispiel #6
0
 private void handleLogin(string packet, Penguin penguin)
 {
 }
Beispiel #7
0
 private void handlePlayPacket(string packet, Penguin penguin)
 {
 }