Ejemplo n.º 1
0
        private void SendHeaders(Socket socket, Header h, Subheader sh)
        {
            PacketWriter pw = new PacketWriter();

            pw.WriteInt((int)h);
            pw.WriteInt((int)sh);
            SendCustom(socket, pw.GetBytes(BUFFER_LENGTH));
        }
Ejemplo n.º 2
0
        public void SendWait(Header h, Subheader sh, WriteCustom wc)
        {
            PacketWriter pw = new PacketWriter();

            pw.Write((byte)h);
            pw.Write((byte)sh);
            if (wc != null)
            {
                wc.Invoke(pw);
            }
            Send(pw.GetBytes(BUFFER_LENGTH));
        }
Ejemplo n.º 3
0
        private void SendCustom(Header h, Subheader sh, WriteCustom wc)
        {
            PacketWriter pw = new PacketWriter();

            pw.WriteInt((int)h);
            pw.WriteInt((int)sh);
            if (wc != null)
            {
                wc.Invoke(pw);
            }
            Send(pw.GetBytes(BUFFER_LENGTH));
        }
Ejemplo n.º 4
0
        private void SendError(Socket socket, Subheader sh, ErrorDelegate del)
        {
            PacketWriter pw = new PacketWriter();

            pw.WriteInt((int)Header.Error);
            pw.WriteInt((int)sh);
            if (del != null)
            {
                del.Invoke(pw);
            }
            SendCustom(socket, pw.GetBytes(BUFFER_LENGTH));
        }
Ejemplo n.º 5
0
        public void PacketHandler(Socket socket, PacketReader pr) // Reads first byte of packet
        {
            int hcode  = pr.ReadInt32();
            int shcode = pr.ReadInt32();

            Console.WriteLine($"{Enum.GetName(typeof(Header), hcode)}, {Enum.GetName(typeof(Subheader), shcode)}");
            Header    h  = (Header)hcode;
            Subheader sh = (Subheader)shcode;

            switch (h)
            {
            case Header.Account:
                Account(socket, sh, pr);
                break;

            case Header.Friend:
                Friends(socket, sh, pr);
                break;

            case Header.Message:
                Message(socket, sh, pr);
                break;

            case Header.NetCode:
                NetCode(socket, sh, pr);
                break;

            case Header.Application:
                Application(socket, sh, pr);
                break;

            case Header.Admin:
                Admin(socket, sh, pr);
                break;

            case Header.Error:
                Error(socket, sh, pr);
                break;

            default:     // Invalid Header
                Dispose(socket);
                Console.WriteLine("Packet disposal: " + (int)h);
                //SendError(socket, Subheader.INVALIDREQ, null);
                break;
            }

            // After packet is handled
            if (socket.Connected)
            {
                State cs = new State(BUFFER_LENGTH, socket);
                cs.socket.BeginReceive(cs.tempBuffer, 0, BUFFER_LENGTH, SocketFlags.None, new AsyncCallback(Recieve), cs);
            }
        }
Ejemplo n.º 6
0
        public void SendAuthCustom(Header h, Subheader sh, UserInformation i, UsernameList l, WriteCustom wc)
        {
            PacketWriter pw = new PacketWriter();

            pw.WriteInt((int)h);
            pw.WriteInt((int)sh);
            pw.WriteObject(i);
            pw.WriteObject(l);
            if (wc != null)
            {
                wc.Invoke(pw);
            }
            Send(pw.GetBytes(BUFFER_LENGTH));
        }
Ejemplo n.º 7
0
        private void ApplicationHandler(Subheader sh, PacketReader pr)
        {
            switch (sh)
            {
            case Subheader.PING:
                Console.WriteLine(EndTimer() + " ms");
                break;

            default:
                Console.WriteLine("Application error - " + (int)sh);
                //SendError(Header.Error, Subheader.INVALIDREQ, null);
                break;
            }
        }
Ejemplo n.º 8
0
        private void AccountHandler(Subheader sh, PacketReader pr)
        {
            switch (sh)
            {
            case Subheader.USERINFO:
                var user =
                    pr.ReadObject <UserInformation>();

                Console.WriteLine("Successful login, " + user.username + "!");
                break;

            default:
                Console.WriteLine("Invalid Account Subheader");
                break;
            }
        }
Ejemplo n.º 9
0
        private void Application(Socket socket, Subheader sh, PacketReader pr)
        {
            ServerUserInformation sentUser = FindUser(pr.ReadObject <SessionInformation>());

            switch (sh)
            {
            case Subheader.ADDUSR:
                if (DatabaseQuery.AddFriend(sentUser, pr.ReadObject <UserInformation>()) != Subheader.NULL)
                {
                    SendError(socket, sh, null);
                }
                break;

            case Subheader.REMOVEUSR:
            case Subheader.DEC_REQ:
                if (DatabaseQuery.RemoveFriend(sentUser, pr.ReadObject <FriendInformation>()) != Subheader.NULL)
                {
                    SendError(socket, sh, null);
                }
                break;

            case Subheader.BLOCKUSR:
            case Subheader.ACC_REQ:
                if (DatabaseQuery.UpdateFriendRequest(sentUser, pr.ReadObject <FriendInformation>()) != Subheader.NULL)
                {
                    SendError(socket, sh, null);
                }
                break;

            case Subheader.VIEWFRIENDS:
                if (DatabaseQuery.ViewFriends(sentUser) != Subheader.NULL)
                {
                    SendError(socket, sh, null);
                }
                break;

            case Subheader.PING:
                SendHeaders(socket, Header.Application, sh);
                break;

            default:     // Invalid Subheader
                Dispose(socket);
                Console.WriteLine("Application disposal: " + (int)sh);
                //SendError(socket, Subheader.INVALIDREQ, null);
                break;
            }
        }
Ejemplo n.º 10
0
        private void Message(Socket socket, Subheader sh, PacketReader pr)
        {
            //Header h = Header.Message;

            SessionInformation    session = pr.ReadObject <SessionInformation>(); // Reads Session Information from User Identity
            ServerUserInformation sUsers  = FindUser(session);                    //

            if (!UserExist(session))
            {
                SendError(socket, Subheader.SESSIONLOST, null);
                return;
            }

            var users = UsernameList.Deserialize(ref pr);


            switch (sh)
            {
            case Subheader.TEXTMSG:     // (Header,Subheader,SessionInformation,UsernameList,String)
                var text = pr.ReadString();
                Console.WriteLine(text);
                //Redirect(users, (user) => {RedirectPacket(h, sh, socket, sUsers.username, user, text); });
                break;

            /*
             * case Subheader.IMGMSG: // (Header,Subheader,SessionInformation,UsernameList,Image)
             * var img = pr.ReadImage();
             * Redirect(users, (user) => {
             *  RedirectPacket(h, sh, socket, sUsers.username, user, img); });
             * break;
             *
             * case Subheader.FILEMSG: // (Header,Subheader,SessionInformation,UsernameList,File)
             * var file = pr.ReadObject<File>();
             * Redirect(users, (user) => {
             *  RedirectPacket(h, sh, socket, sUsers.username, user, file);
             * });
             * break;
             */
            default:     // Invalid Subheader
                //Console.Write((int)sh);
                Dispose(socket);
                Console.WriteLine("Message disposal");
                SendError(socket, sh, (pw) => { pw.Write("server - Error with sending test message"); });
                break;
            }
        }
Ejemplo n.º 11
0
        private void HandlePacket(byte[] buffer)
        {
            PacketReader pr = new PacketReader(buffer);
            Header       h  = (Header)pr.ReadInt32();
            Subheader    sh = (Subheader)pr.ReadInt32();

            Console.WriteLine($" {(int)h} - {(int)sh}");

            switch (h)
            {
            case Header.Account:
                AccountHandler(sh, pr);
                break;

            case Header.NetCode:
                NetCodeHandler(sh, pr);
                break;

            case Header.Message:
                MessageHandler(sh, pr);
                break;

            case Header.Application:
                ApplicationHandler(sh, pr);
                break;

            case Header.Friend:
                FriendHandler(sh, pr);
                break;

            case Header.Error:
                ErrorHandler(sh, pr);
                break;

            case Header.Undefined:
                Console.WriteLine("6");
                //Ignore
                break;

            default:
                Console.WriteLine("Invalid header");
                SendError(Header.Error, Subheader.INVALIDREQ, null);
                break;
            }
        }
Ejemplo n.º 12
0
        private void Admin(Socket socket, Subheader sh, PacketReader pr)
        {
            ServerUserInformation sentUser = FindUser(pr.ReadObject <SessionInformation>());


            switch (sh)
            {
            case Subheader.GETNUMCLIENTS:
                Console.WriteLine(clients.Count + " clients");
                break;

            case Subheader.GETUPTIME:
                Console.WriteLine(serverTimer.ElapsedMilliseconds + " uptime");
                break;

            default:     // Invalid Subheader
                Dispose(socket);
                Console.WriteLine("Admin disposal");
                //SendError(socket, Subheader.INVALIDREQ, null);
                break;
            }
        }
Ejemplo n.º 13
0
 private void ErrorHandler(Subheader sh, PacketReader pr)
 {
     throw new NotImplementedException();
 }
Ejemplo n.º 14
0
        private void Account(Socket socket, Subheader sh, PacketReader pr)
        {
            ServerUserInformation usrInfo = new ServerUserInformation();
            UserInformation       info;

            switch (sh)
            {
            case Subheader.LOGIN:
                info = pr.ReadObject <UserInformation>();
                sh   = DatabaseQuery.Login(ref info, ref usrInfo);
                UpdateClientInfo(usrInfo);
                if (sh != Subheader.NULL)
                {
                    SendError(socket, sh, null);
                }
                else
                {
                    SendUserInfo(socket, info);
                }
                break;

            case Subheader.REGISTER:
                info = pr.ReadObject <UserInformation>();
                sh   = DatabaseQuery.Register(ref info, ref usrInfo);
                UpdateClientInfo(usrInfo);
                if (sh != Subheader.NULL)
                {
                    SendError(socket, sh, null);
                }
                else
                {
                    SendUserInfo(socket, info);
                }
                break;

            case Subheader.USERNAME:
                sh = DatabaseQuery.UserExists(pr.ReadString());
                if (sh != Subheader.NULL)
                {
                    SendError(socket, sh, null);
                }
                else
                {
                    SendHeaders(socket, Header.Account, Subheader.USERNAME);
                }
                break;

            case Subheader.CHANGEPASS:
                info = pr.ReadObject <UserInformation>();
                sh   = DatabaseQuery.ChangePassword(ref info, ref usrInfo);
                UpdateClientInfo(usrInfo);
                if (sh != Subheader.NULL)
                {
                    SendError(socket, sh, null);
                }
                else
                {
                    SendUserInfo(socket, info);
                }
                break;

            default:     // Invalid Subheader
                SendError(socket, Subheader.INVALIDREQ, null);
                break;
            }
        }
Ejemplo n.º 15
0
 private void NetCode(Socket socket, Subheader sh, PacketReader pr)
 {
     throw new NotImplementedException();
 }
Ejemplo n.º 16
0
 private void Error(Socket socket, Subheader sh, PacketReader pr)
 {
     Console.WriteLine("Error name: " + Enum.GetName(typeof(Subheader), sh) + "\n\tError Code " + (int)sh);
 }