Advertisement
Guest User

Client

a guest
Apr 9th, 2014
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 1.91 KB | None | 0 0
  1. class TCPMessageSender(listener: ActorRef) extends BaseActor {
  2.     final val MESSAGE_DELIMITER = "\n"
  3.     val buffer = new ListBuffer[Any]
  4.     IO(Tcp) ! Connect(new InetSocketAddress(configuration.data.tcp.host, configuration.data.tcp.port))
  5.  
  6.     override def receive = {
  7.       case msg @ (_: UserMessage | _: GroupMessage | _: RequestMessage) =>
  8.         logger.warn(s"Received message ($msg) before connected. Buffering...")
  9.         buffer += msg
  10.       case CommandFailed(_: Connect) =>
  11.         logger.warn("Can't connect. All messages will be ignored")
  12.         listener ! Terminate
  13.         context stop self
  14.       case c @ Connected(remote, local) =>
  15.         logger.info("Connected to " + c.remoteAddress)
  16.         val connection = sender
  17.         connection ! Register(self)
  18.         logger.info("Sending previous received messages: " + buffer.size)
  19.         buffer.foreach(msg => {
  20.           val msgString: String = JsonHelper.toJson(Map[String, Any]("message_type" -> msg.getClass.getSimpleName, "message" -> msg))
  21.           connection ! Write(ByteString(msgString + MESSAGE_DELIMITER))
  22.         })
  23.         buffer.clear
  24.         logger.info("Sent")
  25.         context become {
  26.           case msg @ (_: UserMessage | _: GroupMessage | _: RequestMessage) =>
  27.             val msgString: String = JsonHelper.toJson(Map[String, Any]("message_type" -> msg.getClass.getSimpleName, "message" -> msg))
  28.             logger.trace(s"Sending message: $msgString")
  29.             connection ! Write(ByteString(msgString + MESSAGE_DELIMITER))
  30.           case data: ByteString =>
  31.             connection ! Write(data)
  32.           case CommandFailed(w: Write) =>
  33.           // O/S buffer was full
  34.           case Received(data) =>
  35.             logger.warn(s"I am not supposed to receive this data: $data")
  36.           case "close" =>
  37.             connection ! Close
  38.           case _: ConnectionClosed =>
  39.             context stop self
  40.         }
  41.     }
  42.   }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement