Saya baru mengenal Atmosfir jadi saya pasti melewatkan sesuatu yang sederhana. Saya membuat sampel dan dapat membuat @Broadcast berfungsi tetapi BroadcasterFactory tidak berfungsi. Saya dapat melacak onMessage yang akan dipukul (melalui pendengar) tetapi saya tidak melihat onBroadcast terjadi kecuali @Broadcast ditentukan. Selain itu, kecuali saya menentukan @Broadcast, saya tidak melihat pesan terkirim ke klien. Kode WebSocket saya sangat mendasar:
@Path("/chat")
@AtmosphereService(
interceptors = {AtmosphereResourceLifecycleInterceptor.class,
TrackMessageSizeInterceptor.class/*,
BroadcastOnPostAtmosphereInterceptor.class*/}//,
)
public class HelloWorldWS {
@GET
@Produces(MediaType.APPLICATION_JSON)
public SuspendResponse<String> connect(@Context AtmosphereResource res)
{
// eventually this will be done via subscription in the post area
BroadcasterFactory.getDefault().get().addAtmosphereResource(res);
return new SuspendResponse.SuspendResponseBuilder<String>()
//.broadcaster(BroadcasterFactory.getDefault().get())
.outputComments(true)
.addListener(new ResourceListener())
.build();
}
//@Broadcast(writeEntity = false)
@POST
public void broadcast(String message) {
final String msg = String.format("{'author':'fdsa','message':'%s'}", "Override proof");
// Send to all
BroadcasterFactory.getDefault().get().broadcast(msg);
// No Really, send to all
Collection<Broadcaster> broadcasters = BroadcasterFactory.getDefault().lookupAll();
for (Broadcaster b : broadcasters)
{
System.out.println("Broadcaster: " + b.toString() + "; Count: " + b.getAtmosphereResources().size());
for (AtmosphereResource r : b.getAtmosphereResources())
{
System.out.println("Notifying Resource: " + r.toString());
r.write(msg);
}
}
}
}
Ketika saya mengaktifkan @Broadcast/BroadcastOnPostAtmosphereInterceptor maka pesan tersebut diteruskan ke klien (kode saya di fungsi "broadcast" tidak melakukan apa pun). Ketika saya mengomentari @Broadcast/BroadcastOnPostAtmosphereInterceptor maka saya mengharapkan kode Siaran saya untuk menyampaikan pesan tersebut.
Dengan @Broadcast saya menampilkan callback ResourceListener berikut: onPreSuspend, onSuspend, onConnect, onMessage, onBroadcast (klien mendapatkannya)
Ketika @Broadcast dikomentari, saya menampilkan panggilan balik ResourceListener berikut: onPreSuspend, onSuspend, onConnect, onMessage (klien tidak pernah menerima pesan)
Apa yang saya lakukan salah?
Saya menggunakan atmosfer 2.1.2 dengan Jersey 1.17