Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.12.2019, 06:44   #1
michael3019
Новичок
Джуниор
 
Регистрация: 12.12.2019
Сообщений: 1
По умолчанию Дедлайн, нужно кое что изменить в коде

Я создал чат, он полностью работает, подключается к бд. Проблема в том что чат реализован с помощью этих двух бинов, нужно от них избавиться, реализовать без них. Можете помочь сделать без этих двух бинов. Я так думаю нужно создать таймер, который с помощью определенного времени будет показывать непрочитанные сообщения пользователю.
Те самые два бина от которых нужно избавится в Spring Configurator
Код:
@Configuration
@SpringComponent
@ApplicationScope
public class SpringConfigurator {
    @Bean
    UnicastProcessor<Message> publisher(){
        return  UnicastProcessor.create();
    }

    @Bean
    Flux<Message> messages(UnicastProcessor<Message> publisher) {
        return publisher.replay(0).autoConnect();
    }
}
Я использую эти два бина в этом классе
Код:
@StyleSheet("frontend://styles/styles.css")
@Route
@PWA(name = "Vaadin Chat", shortName = "Vaadin Chat")
@Push
public class MainView extends VerticalLayout {
  private final UnicastProcessor<Message> publisher;
  private final Flux<Message> messages;
  private String username;

  private final RestService restService;



   @Autowired
      public MainView(UnicastProcessor<Message> publisher,
                      Flux<Message> messages,
                      RestService restService) {
        this.publisher = publisher;
        this.messages = messages; 
    addClassName("main-view");
    setSizeFull();
    setDefaultHorizontalComponentAlignment(Alignment.CENTER);

    H1 header = new H1("Vaadin Chat");
    header.getElement().getThemeList().add("dark");

    add(header);

    askUsername();
    this.restService = restService;
  }

  private void askUsername() {
    HorizontalLayout layout = new HorizontalLayout();
    TextField usernameField = new TextField();
    Button startButton = new Button("Start chat");

    layout.add(usernameField, startButton);

    startButton.addClickListener(click -> {
      username = usernameField.getValue();
      remove(layout);
      showChat();
    });

    add(layout);
  }

  private void showChat() {
    MessageList messageList = new MessageList();


    add(messageList, createInputLayout());
    expand(messageList);

    List<Message> lasts = restService.getLast();
    for (Message message : lasts)
      messageList.add(new Paragraph(message.getFrom() + ": " + message.getMessage()));

    messages.subscribe(message -> {
      getUI().ifPresent(ui ->
              ui.access(() ->
                      messageList.add(
                              new Paragraph(message.getFrom() + ": " +
                                      message.getMessage())
                      )
              ));
    });
  }

  private Component createInputLayout() {
    HorizontalLayout layout = new HorizontalLayout();
    layout.setWidth("100%");

    TextField messageField = new TextField();
    messageField.addKeyDownListener(Key.ENTER, keyDownEvent -> sender(messageField));
    Button sendButton = new Button("Send");
    sendButton.addThemeVariants(ButtonVariant.LUMO_PRIMARY);

    layout.add(messageField, sendButton);
    layout.expand(messageField);

    sendButton.addClickListener(click -> sender(messageField));
    messageField.focus();

    return layout;
  }

  private void sender(TextField textField) {
    Message message = new Message(username, textField.getValue());
    publisher.onNext(message);
    restService.saveMessage(message);
    textField.clear();
    textField.focus();
  }
}
Другие файлы проекта

MessageServiceImpl
Код:
@Service
@Transactional
public class MessageServiceImpl implements MessageService {
    private final MessageRepository repository;
    private final PageRequest lastRequest;

    @Autowired
    public MessageServiceImpl(MessageRepository repository) {
        this.repository = repository;
        lastRequest = new PageRequest(0, 10, Sort.Direction.DESC, "id");
    }

    @Override
    public void add(Message message) {
        message.setTime(new Timestamp(new Date().getTime()));
        repository.saveAndFlush(message);
    }

    @Override
    public List<Message> getAllMessages() {
        return repository.findAll();
    }

    @Override
    public List<Message> getLast() {
        List<Message> result = repository.findAll(lastRequest).getContent();

        return result.stream()
                .sorted(Comparator.comparingLong(Message::getId))
                .collect(Collectors.toList());
    }
}

RestService
@Service
public class RestService {
    private final RestTemplate restTemplate;

    public RestService(RestTemplateBuilder restTemplateBuilder) {
        this.restTemplate = restTemplateBuilder.build();
    }

    public void saveMessage(Message message) {
        String url = "http://localhost:8080/api/save";

        this.restTemplate.put(url, new Gson().toJson(message));
    }

    public List<Message> getLast() {
        String url = "http://localhost:8080/api/last";

        String json = restTemplate.getForObject(url, String.class);
        return new Gson().fromJson(json, new TypeToken<List<Message>>(){}.getType());
    }
}
MessageService

Код:
public interface MessageService {
    void add(Message message);

    List<Message> getAllMessages();
    List<Message> getLast();
}
MessageList

Код:
public class MessageList extends Div {

  public MessageList() {
    addClassName("message-list");
  }

  @Override
  public void add(Component... components) {
    super.add(components);

    components[components.length-1]
        .getElement()
        .callFunction("scrollIntoView");
  }
michael3019 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите изменить код(он работает, но нужно изменить) Programmer_1 Помощь студентам 4 17.09.2018 20:05
задача. помогите изменить формулу в коде под нужную.Логические функции переменных Мишаня@ Помощь студентам 4 04.01.2014 01:27
Помоогите изменить программу в коде делфи Murfik97 Помощь студентам 11 09.11.2013 11:42
Нужно кое-что исправить в коде Fonochka Помощь студентам 7 27.12.2010 20:20
Что изменить в коде? lider24816 Помощь студентам 1 30.05.2009 09:58