You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
#!/usr/bin/env amm
import $repo.`https://jitpack.io`
import $ivy.`com.github.gim-.java-stomp-ws:stomp-client-ws:v1.0`
import eu.mivrenik.stomp.StompFrame import eu.mivrenik.stomp.client.StompClient import eu.mivrenik.stomp.client.listener.StompMessageListener import java.net.URI import scala.util.Try import scala.util.Success import scala.util.Failure import scala.collection.JavaConverters._ import org.java_websocket.drafts.Draft._ import org.java_websocket.drafts.Draft_6455 import java.{util => ju} import ju.HashMap import scala.concurrent.Future import scala.concurrent.ExecutionContext.Implicits._
@main def run( username: String = "user", password: String = "password", host: String = "localhost", port: Int = 8080, endpoint: String = "ws" ) = { val msg = s"""{"toUser":"admin","fromUser":"$username","messageContent":"hello"}""" val usernameAndPassword = s"$username:$password" val encoded = ju.Base64.getEncoder.encodeToString(usernameAndPassword.getBytes())
val headers = new ju.HashMap[String, String] headers.put("Authorization", s"Basic $encoded")
val stompSocket = new StompClient( URI.create(s"ws://$host:$port/$endpoint"), new Draft_6455(), headers, 60 )
val t = new Thread(() => { val res = Try(stompSocket.connectBlocking())
println(res)
res match { case Success(value) => { println("Connected") stompSocket ? ( "/user/queue/ping", (stompFrame: StompFrame) => { println("Server message: " + stompFrame.getBody()) } )
val x = stompSocket ? ( "/user/queue/reply", (stompFrame: StompFrame) => { println("Server message: " + stompFrame.getBody()) stompSocket.close() } )
stompSocket ! "/app/ping" stompSocket ! ("/app/message-test", Some(msg))
} case Failure(exception) => { println(exception.getMessage()) } } })
t.start() Thread.sleep(1000) t.stop() }
/** * Extension methods for Java Stomp Client * * @param client */ implicit class RichStompClient(client: StompClient) {
/** * alias for send * * @param dest * @param message */ def !(dest: String, message: Option[String] = None) = message.fold(client.send(dest, ""))(m => client.send(dest, m))
/** * alias for subscribe * * @param route * @param listener * @return StompSubscription */ def ?(route: String, listener: StompMessageListener) = client.subscribe(route, listener) }
|