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.

107 lines
2.5 KiB

4 years ago
  1. #!/usr/bin/env amm
  2. import $repo.`https://jitpack.io`
  3. import $ivy.`com.github.gim-.java-stomp-ws:stomp-client-ws:v1.0`
  4. import eu.mivrenik.stomp.StompFrame
  5. import eu.mivrenik.stomp.client.StompClient
  6. import eu.mivrenik.stomp.client.listener.StompMessageListener
  7. import java.net.URI
  8. import scala.util.Try
  9. import scala.util.Success
  10. import scala.util.Failure
  11. import scala.collection.JavaConverters._
  12. import org.java_websocket.drafts.Draft._
  13. import org.java_websocket.drafts.Draft_6455
  14. import java.{util => ju}
  15. import ju.HashMap
  16. import scala.concurrent.Future
  17. import scala.concurrent.ExecutionContext.Implicits._
  18. @main
  19. def run(
  20. username: String = "user",
  21. password: String = "password",
  22. host: String = "localhost",
  23. port: Int = 8080,
  24. endpoint: String = "ws"
  25. ) = {
  26. val msg =
  27. s"""{"toUser":"admin","fromUser":"$username","messageContent":"hello"}"""
  28. val usernameAndPassword = s"$username:$password"
  29. val encoded =
  30. ju.Base64.getEncoder.encodeToString(usernameAndPassword.getBytes())
  31. val headers = new ju.HashMap[String, String]
  32. headers.put("Authorization", s"Basic $encoded")
  33. val stompSocket = new StompClient(
  34. URI.create(s"ws://$host:$port/$endpoint"),
  35. new Draft_6455(),
  36. headers,
  37. 60
  38. )
  39. val t = new Thread(() => {
  40. val res = Try(stompSocket.connectBlocking())
  41. println(res)
  42. res match {
  43. case Success(value) => {
  44. println("Connected")
  45. stompSocket ? (
  46. "/user/queue/ping",
  47. (stompFrame: StompFrame) => {
  48. println("Server message: " + stompFrame.getBody())
  49. }
  50. )
  51. val x = stompSocket ? (
  52. "/user/queue/reply",
  53. (stompFrame: StompFrame) => {
  54. println("Server message: " + stompFrame.getBody())
  55. stompSocket.close()
  56. }
  57. )
  58. stompSocket ! "/app/ping"
  59. stompSocket ! ("/app/message-test", Some(msg))
  60. }
  61. case Failure(exception) => { println(exception.getMessage()) }
  62. }
  63. })
  64. t.start()
  65. Thread.sleep(1000)
  66. t.stop()
  67. }
  68. /**
  69. * Extension methods for Java Stomp Client
  70. *
  71. * @param client
  72. */
  73. implicit class RichStompClient(client: StompClient) {
  74. /**
  75. * alias for send
  76. *
  77. * @param dest
  78. * @param message
  79. */
  80. def !(dest: String, message: Option[String] = None) =
  81. message.fold(client.send(dest, ""))(m => client.send(dest, m))
  82. /**
  83. * alias for subscribe
  84. *
  85. * @param route
  86. * @param listener
  87. * @return StompSubscription
  88. */
  89. def ?(route: String, listener: StompMessageListener) =
  90. client.subscribe(route, listener)
  91. }