簡體   English   中英

如何從Java對象向客戶端發送spring消息

[英]How do I send a spring message to client from a Java object

我需要使用SimpMessagingTemplate(或JSON格式的任何消息)將stomp消息從對象發送到我的客戶端

但是我的對象不是Controller,如果我將我的類聲明為控制器,我的Spring啟動應用程序由於沒有設置bean而無法啟動。

我正在為我的學士論文創建一個游戲,該游戲托管在Spring服務器上。 在我的應用程序中,我有房間,每個房間都有一個運行一個線程的gameSession。

我目前有一個名為RoomsController的類,它將預定的消息發送到服務器

@Controller
public class RoomsController {
@Autowired
    private SimpMessagingTemplate template;

    @Scheduled(fixedRate = 500)
    public void updateRoomsInterface() throws Exception {
        Game.getInstance().getRooms().forEach((k,v) -> {
            if (v != null) {
                System.out.println("Ted posilam do room " + k + " ktery se jmenuje " + v.getName() + " cely seznam hracu, schvalne co mi prijde, ok?");
                Map <String, Player> playersList = v.getPlayers();
//              String message = v.getPlayers().get;
                this.template.convertAndSend("/topic/game/room/"+v.getID(), playersList);
            }
        });
    }
}

這有點好,但我需要我的GameSession對象獨立於服務器計時器(因為不同的游戲在不同的時間開始,我需要使用游戲的滴答)

我的GameSession目前看起來像這樣:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.simp.SimpMessagingTemplate;

public class GameSession extends Thread {
    @Autowired
    private SimpMessagingTemplate template;
    private volatile boolean exit = false;
    private Room room;


    public GameSession(Room room) {
        this.room = room;
        status = "WAITING";
    }

    @Override
    public void run() {
        // dokud ne exit
        while (!false) {
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            sendMessage();
        }
    }

    public void sendMessage() {
        System.out.println("Does this execute?");
        this.template.convertAndSend("/topic/game/room/"+room.getID()+"/session", "THIS IS A TEST");
    }
}

但是當這個執行時,我在線程中得到一個異常

Does this execute?
Exception in thread "Thread-6" java.lang.NullPointerException
    at cz.vse.pavm07.bp.objects.GameSession.sendMessage(GameSession.java:65)
    at cz.vse.pavm07.bp.objects.GameSession.run(GameSession.java:34)

我需要每個gameSession直接從gameSession對象發送消息,因為滴答聲。

我究竟做錯了什么?

您的GameSession未標記為bean,因此請添加@Component或其他GameSession型注釋以將其標記為spring bean。

@Service
public class GameSession extends Thread {
    @Autowired
    private SimpMessagingTemplate template;

    //code here
 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM