Skip to content

Instantly share code, notes, and snippets.

@plewin
Created February 17, 2017 12:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save plewin/794cd0e2c2f97bc501a3ba87883e2b1b to your computer and use it in GitHub Desktop.
Save plewin/794cd0e2c2f97bc501a3ba87883e2b1b to your computer and use it in GitHub Desktop.
import com.rabbitmq.client.AMQP
import com.rabbitmq.client.DefaultConsumer
import com.rabbitmq.client.Envelope
import groovy.json.JsonSlurper
import org.freeplane.core.undo.IActor
import org.freeplane.features.map.NodeModel
import org.freeplane.features.mode.Controller
import ComChannel
def channel = ComChannel.getChannel() // singleton rabbit mq channel to keep it running in background
def consumer = new DefaultConsumer(channel) {
@Override
void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
String message = new String(body, "UTF-8")
def jsonSlurper = new JsonSlurper()
def event = jsonSlurper.parseText(message)
handleEvent(event)
}
void handleEvent(event) {
switch (event.event) {
case "node_changed":
if(event.property == "node_text") {
def map = Controller.currentController.getMap()
def mynode = map.getNodeForID(event.node)
def actor = new IActor() {
void act() {
mynode.setUserObject(event.newValue)
Controller.getCurrentModeController().getMapController().nodeChanged(mynode, NodeModel.NODE_TEXT, event.oldValue, event.newValue)
}
String getDescription() {
return "setNodeText"
}
void undo() {
mynode.setUserObject(event.oldValue)
Controller.getCurrentModeController().getMapController().nodeChanged(mynode, NodeModel.NODE_TEXT, event.newValue, event.oldValue)
}
}
Controller.currentModeController.execute(actor, map)
}
break
}
c.statusInfo = " [x] Received '${event.event}'"
}
}
try {
channel.basicCancel("tag")
} catch(Exception ignore) {} // ignore if consumer not already registered
channel.basicConsume("hello", true, "tag", consumer)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment