diff --git a/client/src/main/scala/rabbit/Emit.scala b/client/src/main/scala/rabbit/Emit.scala new file mode 100644 index 0000000..9b5bda6 --- /dev/null +++ b/client/src/main/scala/rabbit/Emit.scala @@ -0,0 +1,16 @@ +import spray.json._ +import MessageJsonProtocol._ +import scala.language.postfixOps + +object Emit { + private val emitter: RabbitmqEmitter = new RabbitmqEmitter + + def send(message: String) = emitter.SendMessage(message, "fuckoff") +} + +object emit2 extends App { + + val message: JsValue = Message("ajeje", "brazorf", 213).toJson + + Emit.send(message.toString()) +} diff --git a/client/src/main/scala/rabbit/RabbitmqConnection.scala b/client/src/main/scala/rabbit/RabbitmqConnection.scala new file mode 100644 index 0000000..91c0086 --- /dev/null +++ b/client/src/main/scala/rabbit/RabbitmqConnection.scala @@ -0,0 +1,65 @@ +import com.rabbitmq.client.{ConnectionFactory, Delivery} + +trait RabbitmqConnection{ + val factory = new ConnectionFactory + val exchangeName: String = "topicLogs" + val exchangeType: String = "topic" + var routingKey: String = "prova." //potrebbe essere migliorato -> cambiare struttura classi + val charsetName = "UTF-8" +} + +class RabbitmqEmitter extends RabbitmqConnection { + + def SendMessage(message: String, logName: String = "*") = { + try{ + val connection = factory.newConnection + val channel = connection.createChannel + + // exchange configuration + routingKey = routingKey + logName + channel.exchangeDeclare(exchangeName, exchangeType) + try{ + //send message + channel.basicPublish(exchangeName, routingKey, null, message.getBytes(charsetName)) + System.out.println(" [x] Sent to " + routingKey + ": '" + message + "'") + + } catch { + case _ => println("Error in sending") + } finally { + if (channel.isOpen) channel.close() + if (connection.isOpen) connection.close() + } + } catch { + case _ => println("Error in connect creation") + } + } + +} + +class RabbitmqReciver extends RabbitmqConnection { + + def work(callback: String => Unit, logName: String = "*"): Unit = { + try{ + val connection = factory.newConnection + val channel = connection.createChannel + + // queue configuration + channel.exchangeDeclare(exchangeName, exchangeType) + val queueName = channel.queueDeclare.getQueue + routingKey = routingKey + logName + channel.queueBind(queueName, exchangeName, routingKey) + + //recive message + val autoAck = true + channel.basicConsume(queueName, autoAck, + (consumerTag: String, delivery: Delivery) => { + val message = new String(delivery.getBody, charsetName) + callback(message) + }, + (consumerTag: String) => {}) + } catch { + case _ => println("Error in reciver") + } + + } +} \ No newline at end of file diff --git a/client/src/main/scala/rabbit/Recv.scala b/client/src/main/scala/rabbit/Recv.scala new file mode 100644 index 0000000..3cd6948 --- /dev/null +++ b/client/src/main/scala/rabbit/Recv.scala @@ -0,0 +1,24 @@ +import spray.json._ +import MessageJsonProtocol._ + +object Recv { + private val reciver: RabbitmqReciver = new RabbitmqReciver + + def work(callback: String => Unit, logName: String = "*") = reciver.work(callback, logName) +} + +object r1 extends App { + Recv.work(s => println(s), "fuckoff") +} + +object r2 extends App { + Recv.work(s => println(s), "bitches") +} + +object r3 extends App { + Recv.work(s => { + println(s) + val msg = s.parseJson.convertTo[Message] + println(msg.payload) + }) +}