private void ReceiveCallback(IAsyncResult AR) { Socket current = (Socket)AR.AsyncState; int received; bool bool_return = false; int int_return = 0; string _login, _password, _ip; try { received = current.EndReceive(AR); } catch (SocketException) { MW.Dispatcher.Invoke(() => { MW.lbx_OperationsList.Items.Add("Client: " + current.RemoteEndPoint + " forcefully disconnected"); }); MW.updateCounterOfActiveUsers(false); current.Close(); client_sockets.Remove(current); return; } byte[] recBuf = new byte[received]; Array.Copy(BUFFER, recBuf, received); string text = Encoding.ASCII.GetString(recBuf); if (text.ToUpper() == "EXIT") { MW.Dispatcher.Invoke(() => { MW.lbx_OperationsList.Items.Add("Client: " + current.RemoteEndPoint + " disconnected"); }); MW.updateCounterOfActiveUsers(false); current.Shutdown(SocketShutdown.Both); current.Close(); client_sockets.Remove(current); return; } else { string[] roger = null; try { roger = text.Split('|'); } catch { MW.Dispatcher.Invoke(() => { MW.lbx_OperationsList.Items.Add("Client: " + current.RemoteEndPoint + " used unknown commend"); }); } if (roger[0].ToUpper() == "REG" && roger.Length == 3) { _login = roger[1]; _password = roger[2]; _ip = current.RemoteEndPoint.ToString(); Task t = new Task(() => { MW.Dispatcher.Invoke(() => { int_return = DatabaseOrder.AddUser(database_connection, _login, _password); }); }); MW.tasklist.Add(SingletonSecured.Instance.AddTask(t)); t.Start(); t.Wait(); if (int_return == 0) { MW.Dispatcher.Invoke(() => { MW.lbx_OperationsList.Items.Add("Registration complied for client: " + _ip + ", username: "******"REG|TRUE"); current.Send(data); current.BeginReceive(BUFFER, 0, config.GetBuffer(), SocketFlags.None, ReceiveCallback, current); } else if (int_return == 1) { MW.Dispatcher.Invoke(() => { MW.lbx_OperationsList.Items.Add("Duplicated login: "******", client: " + _ip); }); byte[] data = Encoding.ASCII.GetBytes("REG|FALSE"); current.Send(data); current.BeginReceive(BUFFER, 0, config.GetBuffer(), SocketFlags.None, ReceiveCallback, current); } else { byte[] data = Encoding.ASCII.GetBytes("REG|FALSE"); current.Send(data); current.BeginReceive(BUFFER, 0, config.GetBuffer(), SocketFlags.None, ReceiveCallback, current); } } else if (roger[0].ToUpper() == "LOG" && roger.Length == 3) { _login = roger[1]; _password = roger[2]; _ip = current.RemoteEndPoint.ToString(); Task t = new Task(() => { MW.Dispatcher.Invoke(() => { bool_return = DatabaseOrder.LogIn(database_connection, _login, _password); }); }); MW.tasklist.Add(SingletonSecured.Instance.AddTask(t)); t.Start(); t.Wait(); if (bool_return) { MW.Dispatcher.Invoke(() => { MW.lbx_OperationsList.Items.Add("Pomyślnie zalogowano się na użytkownika: " + _login); }); byte[] data = Encoding.ASCII.GetBytes("LOG|TRUE"); current.Send(data); Monitor.Enter(permits_locker); permits.Add(_login + "|" + current.RemoteEndPoint.ToString()); Monitor.Exit(permits_locker); current.BeginReceive(BUFFER, 0, config.GetBuffer(), SocketFlags.None, ReceiveCallbackLoged, current); } else { MW.Dispatcher.Invoke(() => { MW.lbx_OperationsList.Items.Add("Błędne dane uwierzytelniające z adresu: " + _ip); }); byte[] data = Encoding.ASCII.GetBytes("LOG|FALSE"); current.Send(data); current.BeginReceive(BUFFER, 0, config.GetBuffer(), SocketFlags.None, ReceiveCallback, current); } } else { current.BeginReceive(BUFFER, 0, config.GetBuffer(), SocketFlags.None, ReceiveCallback, current); } } }