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