// EXEC: cjc %import-path %L %l %f --test
// EXEC: ./main
package eventsource4cj.test
import eventsource4cj.server.*
import eventsource4cj.client.*
import eventsource4cj.model.*
func sseServer(): Unit {
let sseServer = SseServer("127.0.0.1", 8080)
spawn {
sseServer.serveForever()
}
let endpoint = "/bus"
// 发布端点(客户端连接事件处理回调函数)
sseServer.publish(
endpoint,
{
broker: SseEmitterBroker =>
println("客户端连接事件处理回调函数被调用")
true
}
)
// 发布端点(不传客户端连接事件处理回调函数)
//sseServer.publish(endpoint)
// 获取端点绑定的消息发送器
let emitter = SseEmitter.getEmitter(endpoint).getOrThrow()
// 向该端点上的全部连接发送消息
let message = MessageBuilder().data("hello world").build()
spawn {
while (true) {
emitter.sendAll(message)
}
}
}
func sseClient(): Unit {
// 创建消息源
let eventsource = EventSource("http://127.0.0.1:8080/bus")
// 设置消息处理函数
eventsource.onMessage({msg => println("默认处理消息:${msg.toMessageString()}")})
eventsource.onEvent("test-event", {msg => println("处理消息:${msg.toMessageString()}")})
// 开始订阅消息(异步操作)
let future = eventsource.subscribe()
try {
future.get(Duration.millisecond)
} catch (_: TimeoutException) {
// ignore
}
}
@Test
func cs1(): Unit {
sseServer()
sseClient()
}