예제 #1
0
        public static void ReceiveAuthentificationCallback(IAsyncResult AR)
        {
            Console.WriteLine("Authentication");
            User   user   = (User)AR.AsyncState;
            Socket socket = user.socket;

            try
            {
                ReceiveCallbackState state = new ReceiveCallbackState(user);
                int received = user.socket.EndReceive(AR);
                StreamParser(received, state);
                string msg_string = state.buffer.First();
                state.buffer.RemoveAt(0);
                Message message = MessageParser(msg_string);
                Message res     = AuthenticationHandler.Instance.Handle(user, message);
                SendMessage(user, res);
                if (user.authenticated)
                {
                    user.socket.BeginReceive(user.my_buffer, 0, user.my_buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveCallback), state);
                }
            }
            catch (Exception my_exception)
            {
                UserManager.Instance.DisconnectUser(user);
                Console.WriteLine(my_exception.ToString());
            }
        }
예제 #2
0
        public static void ReceiveCallback(IAsyncResult AR)
        {
            Console.WriteLine("Receive Callback");
            ReceiveCallbackState state = (ReceiveCallbackState)AR.AsyncState;
            User user = state.user;

            try
            {
                int received = user.socket.EndReceive(AR);
                Console.WriteLine(received);
                StreamParser(received, state);
                if (received > 0)
                {
                    while (state.buffer.Count > 0 && MessageComplete(state.buffer.First()))
                    {
                        string  msg_string = state.buffer.First();
                        Message message    = MessageParser(msg_string);
                        state.buffer.RemoveAt(0);

                        var response_object = MessageHandler.Instance.Handle(message, user);

                        foreach (User usr in response_object.Item2.Where(u => u.authenticated == true))
                        {
                            foreach (Message msg in response_object.Item1)
                            {
                                SendMessage(usr, msg);
                            }
                        }
                    }
                    user.socket.BeginReceive(user.my_buffer, 0, user.my_buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveCallback), state);
                }
                else
                {
                    UserManager.Instance.DisconnectUser(user);
                    //user.socket.BeginReceive(user.my_buffer, 0, user.my_buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveCallback), state);
                    Console.WriteLine(user.username);
                }
            }
            catch (Exception my_excepion)//excepion?
            {
                UserManager.Instance.DisconnectUser(user);
                Console.WriteLine(my_excepion.Message);
            }

            Console.WriteLine("Receivecallback finished");
        }
예제 #3
0
        public static void StreamParser(int n_bytes, ReceiveCallbackState state)
        {
            byte[] data_buffer = new byte[n_bytes];
            Array.Copy(state.user.my_buffer, data_buffer, n_bytes);
            string        text         = Encoding.UTF8.GetString(data_buffer);
            Regex         regex        = new Regex("!END");
            List <string> split_buffer = Regex.Split(text, @"(?<=!END)").ToList();

            foreach (string s in split_buffer)
            {
                if (state.buffer.Count == 0 || MessageComplete(state.buffer.First()))
                {
                    state.buffer.Add(s);
                }
                else
                {
                    state.buffer[0] = state.buffer[0] + s;
                }
            }
        }