Пример #1
0
 private static Packet UserAuthentification(Packet p)
 {
     try
     {
         ClientAccountLogin         packet   = (ClientAccountLogin)p;
         ServerAcknowledgementLogin response = new ServerAcknowledgementLogin();
         //Authentification process: modify IsLoggedIn and login variable of the response packet
         if (User.validateUser(packet.login, packet.password))
         {
             Console.WriteLine("User connected. Sending response.");
             response.verification = true;
             response.login        = packet.login;
         }
         else
         {
             response.verification = false;
             response.login        = "******";
         }
         loginPacket = response;
         return(response);
     }
     catch (Exception e)
     {
         Console.WriteLine(e.ToString());
     }
     return(null);
 }
Пример #2
0
        private static Packet Login(Packet p)
        {
            ServerAcknowledgementLogin packet = (ServerAcknowledgementLogin)p;

            if (packet.verification)
            {
                //Login logic (create static user) + notification
                User user = new User();
                user.id             = packet.id;
                user.username       = packet.login;
                Session.currentUser = user;
                Session.isLoggedIn  = true;
                Console.WriteLine("Connected as {0}.", packet.login);
            }
            return(null);
        }
Пример #3
0
        //Dispatcher logic layer
        public static void ReadCallback(IAsyncResult ar)
        {
            try{
                String content = String.Empty;

                //Retrieve the state object and the handler socket
                // from the async state object
                StateObject state   = (StateObject)ar.AsyncState;
                Socket      handler = state.workSocket;

                //Read data from the client socket
                int bytesRead = handler.EndReceive(ar);

                if (bytesRead > 0)
                {
                    state.sb.Append(Encoding.ASCII.GetString(state.buffer, 0, bytesRead));

                    content = state.sb.ToString();
                    if (content.Length > 0)
                    {
                        Packet pck = Packet.Parse(state.buffer);
                        //All the data has been read from the cient. Display it on the console
                        //Console.WriteLine("Read {0} bytes from socket. \n Data : ", content.Length, content);
                        //Business layer:
                        byte[] response = Dispatcher_Server.Switcher(pck);
                        if (response != null && response.Length > 0)
                        {
                            Send(handler, response);
                            sendDone.WaitOne();
                        }
                        if (Dispatcher_Server.SendingQueue.Count > 0)
                        {
                            //TODO: can tweak to accept generalized packet format, instead of specific
                            foreach (Packet sendingPacket in Dispatcher_Server.SendingQueue)
                            {
                                PacketSendMessage messagePacket = (PacketSendMessage)sendingPacket;
                                Send(Client_SocketID.list_clients[User.GetUserByID(messagePacket.userID).socketID],
                                     Packet.Encode(messagePacket.PacketType(), (ICanSerialize)messagePacket));
                                sendDone.WaitOne();
                            }
                        }
                        //client/user status as connected (set clientSocketID)
                        else if (Dispatcher_Server.loginPacket?.ID == PacketType.ServerAcknowledgementLogin.ID())
                        {
                            ServerAcknowledgementLogin loginPacket =
                                (ServerAcknowledgementLogin)Dispatcher_Server.loginPacket;
                            Client_SocketID.list_clients.Add(Client_SocketID.count++, handler);
                            User.GetUserByID(loginPacket.id).connectToCurrentClient(Client_SocketID.count);
                        }
                    }
                    else
                    {
                        ///Not all data received. Get more.
                        handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0,
                                             new AsyncCallback(ReadCallback), state);
                    }
                }
                receiveDone.Set();
            }
            catch (System.Net.Sockets.SocketException e)
            {
                Console.WriteLine("Client disconnected");
                e.ToString();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }
        }