ed3v8vl01025
대표칭호 없음
BungeeCord Plugin Messaging Channel의 경우 번지코드를 사용한다는 전제하에 서버 안에 최소 1명의 플레이어가 온라인이어야 한다는 제약이 있었습니다.
하지만, MessageLibrary를 이용하면 RabbitMQ를 통해 제약 없이 Bukkit 서버 간 메시지를 주고받을 수 있습니다.
MessageLibrary는 타입별 MessageHandler를 등록해 해당 타입의 Message가 들어오면 해당 MessageHandler를 처리하게 설계되어 있습니다. 또한 데이터는 Gson을 통해 직렬화 과정을 거쳐 실제 전송 과정에서는JSON으로 전송하게 됩니다.
다음과 같은 테스트 코드를 통해 'Test{message='Send Message', serialized='null'}' 메세지가 출력됨을 확인할 수 있습니다.
Test.java
package Message; public class Test { private String message; private transient String serialized; public Test() {} public Test(String message) { this.message = message; this.serialized = "Not Serialized"; } @Override public String toString() { return "Test{" + "message='" + this.message + '\'' + ", serialized='" + this.serialized + '\'' + '}'; } }
Send.java
public class Send extends JavaPlugin { private RabbitManager rabbitManager; private ConnectionHandle connectionHandle; private ChannelHandler channelHandler; @Override public void onEnable() { this.rabbitManager = ((MessageLibrary) Bukkit.getPluginManager().getPlugin("MessageLibrary")).getRabbitManager(); this.connectionHandle = this.rabbitManager.getConnection(this); this.channelHandler = this.connectionHandle.registerChannel("Test"); this.channelHandler.sendMessage(new Test("Send Message")); }
Recv.java
public class Recv extends JavaPlugin { private RabbitManager rabbitManager; private ConnectionHandle connectionHandle; private ChannelHandler channelHandler; @Override public void onEnable() { this.rabbitManager = ((MessageLibrary) Bukkit.getPluginManager().getPlugin("MessageLibrary")).getRabbitManager(); this.connectionHandle = this.rabbitManager.getConnection(this); this.channelHandler = this.connectionHandle.registerChannel("Test"); this.channelHandler.registerType(Test.class, System.out::println); }
명이
2021.07.24오 Plugin Message 때문에 골치아팠던적이 있는데, 이런 좋은게 있었네요!
lhh2020
2021.07.25이걸 좀 일찍 알았어야 했는데..