powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Передача сообщения в класс Клиента
2 сообщений из 2, страница 1 из 1
Передача сообщения в класс Клиента
    #38227040
Roman46
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте коллеги. Я использую в своём проекте библиотеки netty и apache wicket. Подскажите как сделать так чтобы когда на странице регистрации, написанной на wicket, когда пользователь жмет на кнопку зарегистрироваться страница не переходила на другую пока не получит ответ от сервера в методе messageReceived() класса ClientHandler.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
public class RegistrationPage extends BasePage {

    private final TextField<String> login;
    private final PasswordTextField password;
    private final TextField<String> surname;
    private final TextField<String> name;
    private final TextField<String> patronymic;
    private final EmailTextField email;
    private final TextField<String> country;
    private final TextField<String> city;

    public RegistrationPage() {
        add(new FeedbackPanel("feedback"));
        login = new TextField<String>("Логин", Model.of(""));
        login.setRequired(true);
        password = new PasswordTextField("Пароль", Model.of(""));
        password.setRequired(true);
        final PasswordTextField confirmPassword = new PasswordTextField("Подтвердите пароль", Model.of(""));
        confirmPassword.setRequired(true);
        surname = new TextField<String>("Фамилия", Model.of(""));
        surname.setRequired(true);
        name = new TextField<String>("Имя", Model.of(""));
        name.setRequired(true);
        patronymic = new TextField<String>("Отчество", Model.of(""));
        email = new EmailTextField("E-Mail", Model.of(""));
        email.setRequired(true);
        email.add(EmailAddressValidator.getInstance());
        country = new TextField<String>("Страна", Model.of(""));
        city = new TextField<String>("Город", Model.of(""));
        Form register = new Form("registrationForm") {
            protected void onSubmit() {
                checkValues();
                executeRequest();
                PageParameters parameters = new PageParameters();
                setResponsePage(ResultRegistrationPage.class, parameters.add("result", "YES!!!"));
            }
        };
        add(register);
        register.add(login);
        register.add(password);
        register.add(confirmPassword);
        register.add(new EqualPasswordInputValidator(password, confirmPassword));
        register.add(surname);
        register.add(name);
        register.add(patronymic);
        register.add(email);
        register.add(country);
        register.add(city);
    }

    private void checkValues() {
        String userLogin = login.getModelObject();
        if (userLogin.length() <= 2)
            login.error("Недопустимый логин. Логин должен содержать не менее 4 символов.");
        if (userLogin.length() >= 21)
            login.error("Недопустимый логин. Логин должен содержать не более 20 символов.");
        Pattern templateLogin = Pattern.compile("^[A-Za-zА-Яа-я]{1}[A-Za-zА-Яа-я0-9-_\\.']{4,20}$");
        if (!templateLogin.matcher(userLogin).matches())
            login.error("Недопустимый логин. Логин должен состоять из латинских символов, цифр, дефиса, нижниго подчеркивания или точки, начинаться с буквы и заканчиваться буквой или цифрой.");
        String passwordUser = password.getModelObject();
        if (passwordUser.length() < 6)
            password.error("Слишком короткий пароль.");
        if (passwordUser.length() >= 21)
            password.error("Слишком длинный пароль (нельзя более 20 символов).");
        Pattern templatePassword = Pattern.compile("^[A-Za-zА-Яа-я\\d!@#;%:&*-_,\\Q$^()+.\\E]{6,20}$");
        if (!templatePassword.matcher(passwordUser).matches())
            password.error("В пароле указаны недопустимые символы.");
        Pattern templateTextField = Pattern.compile("^[a-zA-Zа-яА-Я][a-zA-Zа-яА-Я-_'\\. ]{2,}$");
        String surnameUser = surname.getModelObject();
        if (surnameUser.length() <= 2)
            surname.error("Поле 'Фамилия' должно содержать не менее 2 символов.");
        if (!templateTextField.matcher(surnameUser).matches())
            surname.error("Поле 'Фамилия' содержит не допустимые символы.");
        String nameUser = name.getModelObject();
        if (nameUser.length() <= 2)
            name.error("Поле 'Имя' должно содержать не менее 2 символов.");
        if (!templateTextField.matcher(nameUser).matches())
            name.error("Поле 'Имя' содержит не допустимые символы.");
        if (patronymic.getModelObject() != null) {
            String patronymicUser = patronymic.getModelObject();
            if (patronymicUser.length() <= 2)
                patronymic.error("Поле 'Фамилия' должно содержать не менее 2 символов.");
            if (!templateTextField.matcher(patronymicUser).matches())
                patronymic.error("Поле 'Фамилия' содержит не допустимые символы.");
        }
        if (country.getModelObject() != null) {
            String countryUser = country.getModelObject();
            if (countryUser.length() <= 2)
                country.error("Поле 'Страна' должно содержать не менее 2 символов.");
            if (!templateTextField.matcher(countryUser).matches())
                country.error("Поле 'Страна' содержит не допустимые символы.");
        }
        if (city.getModelObject() != null) {
            String cityUser = city.getModelObject();
            if (cityUser.length() <= 2)
                city.error("Поле 'Город' должно содержать не менее 2 символов.");
            if (!templateTextField.matcher(cityUser).matches())
                city.error("Поле 'Город' содержит не допустимые символы.");
        }
    }

    private void executeRequest() {
        HashMap<String, Object> parameters = new HashMap<String, Object>();
        parameters.put("login", login.getModelObject());
        parameters.put("password", password.getModelObject());
        parameters.put("surname", surname.getModelObject());
        parameters.put("name", name.getModelObject());
        parameters.put("patronymic", patronymic.getModelObject());
        parameters.put("email", email.getModelObject());
        parameters.put("country", country.getModelObject());
        parameters.put("city", city.getModelObject());
        PacketRequest request = new PacketRequest("commands.CreateUserCommand", parameters);
        Client client = new Client();
        client.sendPackage(request);
        //client.stop();
    }
}


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
public class Client {

    private static final Logger log = Logger.getLogger(Client.class);
    private ClientBootstrap bootstrap;
    private Channel connector;

    public Client() {
        ExecutorService bossExecutor = new OrderedMemoryAwareThreadPoolExecutor(1, 400000000, 2000000000, 60, TimeUnit.SECONDS);
        ExecutorService ioExecutor = new OrderedMemoryAwareThreadPoolExecutor(4, 400000000, 2000000000, 60, TimeUnit.SECONDS);
        ChannelFactory factory = new NioClientSocketChannelFactory(bossExecutor, ioExecutor, 4);
        bootstrap = new ClientBootstrap(factory);
        bootstrap.setPipelineFactory(new ChannelPipelineFactory() {
            @Override
            public ChannelPipeline getPipeline() throws Exception {
                return Channels.pipeline(new ClientDecoder(), new ClientEncoder(), new ClientHandler());
            }
        });
        ChannelFuture future = bootstrap.connect(new InetSocketAddress("localhost", 8089));
        if (!future.awaitUninterruptibly().isSuccess()) {
            log.warn("Could not connect to the server with the address localhost:8089.");
            bootstrap.releaseExternalResources();
        }
        connector = future.getChannel();
        if (connector.isConnected()) {
            log.info("Successfully connected to the server with the address localhost:8089.");
        } else {
            log.warn("Could not connect to the server with the address localhost:8089.");
        }
    }

    public void sendPackage(PacketRequest request) {
        if (connector.isConnected()) {
            connector.write(request);
        } else {
            log.warn("Interrupted by connecting to the server with the address localhost:8089.");
        }
    }

    public void stop() {
        if (connector != null)
            connector.close().awaitUninterruptibly();
        bootstrap.releaseExternalResources();
        log.info("The client is stopped.");
    }
}


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
public class ClientHandler extends SimpleChannelUpstreamHandler {

    private static final Logger log = Logger.getLogger(ClientHandler.class);

    public ClientHandler() {
    }

    @Override
    public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception {
        log.info("The connection to the server " + e.getChannel().getRemoteAddress() + ".");
    }

    public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
        System.out.println(((PacketResponse) e.getMessage()).getResult());
    }

    public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) throws Exception {
        log.warn("Exception caught: ", e.getCause());
        if (e.getChannel().isConnected()) {
            e.getChannel().close();
        } else {
            ctx.getChannel().close();
        }
    }
}
...
Рейтинг: 0 / 0
Передача сообщения в класс Клиента
    #38228334
Roman46
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема была решена так как показано ниже осталось только добавить в класс RegistrationPage ожидание ответа:
Код: java
1.
2.
3.
4.
public interface ClientHandlerListener {

    public void messageReceived(PacketResponse message);
}


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
public class Client implements ClientHandlerListener {

    private static final Logger log = Logger.getLogger(Client.class);
    private ClientBootstrap bootstrap;
    private Channel connector;
    private Object result;

    public Client() {
        ExecutorService bossExecutor = new OrderedMemoryAwareThreadPoolExecutor(1, 400000000, 2000000000, 60, TimeUnit.SECONDS);
        ExecutorService ioExecutor = new OrderedMemoryAwareThreadPoolExecutor(4, 400000000, 2000000000, 60, TimeUnit.SECONDS);
        ChannelFactory factory = new NioClientSocketChannelFactory(bossExecutor, ioExecutor, 4);
        bootstrap = new ClientBootstrap(factory);
        final ClientHandler handler = new ClientHandler(this);
        bootstrap.setPipelineFactory(new ChannelPipelineFactory() {
            @Override
            public ChannelPipeline getPipeline() throws Exception {
                return Channels.pipeline(new ClientDecoder(), new ClientEncoder(), handler);
            }
        });
        ChannelFuture future = bootstrap.connect(new InetSocketAddress("localhost", 8089));
        if (!future.awaitUninterruptibly().isSuccess()) {
            log.warn("Could not connect to the server with the address localhost:8089.");
            bootstrap.releaseExternalResources();
        }
        connector = future.getChannel();
        if (connector.isConnected()) {
            log.info("Successfully connected to the server with the address localhost:8089.");
        } else {
            log.warn("Could not connect to the server with the address localhost:8089.");
        }
    }

    public void sendPackage(PacketRequest request) {
        if (connector.isConnected()) {
            connector.write(request);
        } else {
            log.warn("Interrupted by connecting to the server with the address localhost:8089.");
        }
    }

    @Override
    public void messageReceived(PacketResponse response) {
        result = response.getResult();
    }

    public Object getResult() {
        return result;
    }

    public void stop() {
        if (connector != null)
            connector.close().awaitUninterruptibly();
        bootstrap.releaseExternalResources();
        log.info("The client is stopped.");
    }
}


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
public class ClientHandler extends SimpleChannelUpstreamHandler {

    private static final Logger log = Logger.getLogger(ClientHandler.class);
    private ClientHandlerListener listener;

    public ClientHandler(ClientHandlerListener listener) {
        this.listener = listener;
    }

    @Override
    public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception {
        log.info("The connection to the server " + e.getChannel().getRemoteAddress() + ".");
    }

    public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
        listener.messageReceived((PacketResponse) e.getMessage());
    }

    public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) throws Exception {
        log.warn("Exception caught: ", e.getCause());
        if (e.getChannel().isConnected()) {
            e.getChannel().close();
        } else {
            ctx.getChannel().close();
        }
    }
}


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
public class RegistrationPage extends BasePage {

    private final TextField<String> login;
    private final PasswordTextField password;
    private final TextField<String> surname;
    private final TextField<String> name;
    private final TextField<String> patronymic;
    private final EmailTextField email;
    private final TextField<String> country;
    private final TextField<String> city;

    public RegistrationPage() {
        add(new FeedbackPanel("feedback"));
        login = new TextField<String>("Логин", Model.of(""));
        login.setRequired(true);
        password = new PasswordTextField("Пароль", Model.of(""));
        password.setRequired(true);
        final PasswordTextField confirmPassword = new PasswordTextField("Подтвердите пароль", Model.of(""));
        confirmPassword.setRequired(true);
        surname = new TextField<String>("Фамилия", Model.of(""));
        surname.setRequired(true);
        name = new TextField<String>("Имя", Model.of(""));
        name.setRequired(true);
        patronymic = new TextField<String>("Отчество", Model.of(""));
        email = new EmailTextField("E-Mail", Model.of(""));
        email.setRequired(true);
        email.add(EmailAddressValidator.getInstance());
        country = new TextField<String>("Страна", Model.of(""));
        city = new TextField<String>("Город", Model.of(""));
        Form register = new Form("registrationForm") {
            protected void onSubmit() {
                checkValues();
                executeRequest();
                PageParameters parameters = new PageParameters();
                setResponsePage(ResultRegistrationPage.class, parameters.add("result", "YES!!!"));
            }
        };
        add(register);
        register.add(login);
        register.add(password);
        register.add(confirmPassword);
        register.add(new EqualPasswordInputValidator(password, confirmPassword));
        register.add(surname);
        register.add(name);
        register.add(patronymic);
        register.add(email);
        register.add(country);
        register.add(city);
    }

    private void checkValues() {
        String userLogin = login.getModelObject();
        if (userLogin.length() <= 2)
            login.error("Недопустимый логин. Логин должен содержать не менее 4 символов.");
        if (userLogin.length() >= 21)
            login.error("Недопустимый логин. Логин должен содержать не более 20 символов.");
        Pattern templateLogin = Pattern.compile("^[A-Za-zА-Яа-я]{1}[A-Za-zА-Яа-я0-9-_\\.']{4,20}$");
        if (!templateLogin.matcher(userLogin).matches())
            login.error("Недопустимый логин. Логин должен состоять из латинских символов, цифр, дефиса, нижниго подчеркивания или точки, начинаться с буквы и заканчиваться буквой или цифрой.");
        String passwordUser = password.getModelObject();
        if (passwordUser.length() < 6)
            password.error("Слишком короткий пароль.");
        if (passwordUser.length() >= 21)
            password.error("Слишком длинный пароль (нельзя более 20 символов).");
        Pattern templatePassword = Pattern.compile("^[A-Za-zА-Яа-я\\d!@#;%:&*-_,\\Q$^()+.\\E]{6,20}$");
        if (!templatePassword.matcher(passwordUser).matches())
            password.error("В пароле указаны недопустимые символы.");
        Pattern templateTextField = Pattern.compile("^[a-zA-Zа-яА-Я][a-zA-Zа-яА-Я-_'\\. ]{2,}$");
        String surnameUser = surname.getModelObject();
        if (surnameUser.length() <= 2)
            surname.error("Поле 'Фамилия' должно содержать не менее 2 символов.");
        if (!templateTextField.matcher(surnameUser).matches())
            surname.error("Поле 'Фамилия' содержит не допустимые символы.");
        String nameUser = name.getModelObject();
        if (nameUser.length() <= 2)
            name.error("Поле 'Имя' должно содержать не менее 2 символов.");
        if (!templateTextField.matcher(nameUser).matches())
            name.error("Поле 'Имя' содержит не допустимые символы.");
        if (patronymic.getModelObject() != null) {
            String patronymicUser = patronymic.getModelObject();
            if (patronymicUser.length() <= 2)
                patronymic.error("Поле 'Фамилия' должно содержать не менее 2 символов.");
            if (!templateTextField.matcher(patronymicUser).matches())
                patronymic.error("Поле 'Фамилия' содержит не допустимые символы.");
        }
        if (country.getModelObject() != null) {
            String countryUser = country.getModelObject();
            if (countryUser.length() <= 2)
                country.error("Поле 'Страна' должно содержать не менее 2 символов.");
            if (!templateTextField.matcher(countryUser).matches())
                country.error("Поле 'Страна' содержит не допустимые символы.");
        }
        if (city.getModelObject() != null) {
            String cityUser = city.getModelObject();
            if (cityUser.length() <= 2)
                city.error("Поле 'Город' должно содержать не менее 2 символов.");
            if (!templateTextField.matcher(cityUser).matches())
                city.error("Поле 'Город' содержит не допустимые символы.");
        }
    }

    private void executeRequest() {
        HashMap<String, Object> parameters = new HashMap<String, Object>();
        parameters.put("login", login.getModelObject());
        parameters.put("password", password.getModelObject());
        parameters.put("surname", surname.getModelObject());
        parameters.put("name", name.getModelObject());
        parameters.put("patronymic", patronymic.getModelObject());
        parameters.put("email", email.getModelObject());
        parameters.put("country", country.getModelObject());
        parameters.put("city", city.getModelObject());
        PacketRequest request = new PacketRequest("commands.CreateUserCommand", parameters);
        Client client = new Client();
        client.sendPackage(request);

        System.out.println(client.getResult());
        //client.stop();
    }
}
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Передача сообщения в класс Клиента
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]