64 lines
1.3 KiB
Go
64 lines
1.3 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"log"
|
|
"time"
|
|
)
|
|
|
|
import (
|
|
"github.com/meatballhat/box-o-sand/sylvilagus/go/sylvilagus"
|
|
"github.com/streadway/amqp"
|
|
)
|
|
|
|
func main() {
|
|
connection, err := amqp.Dial(sylvilagus.AMQP_URI)
|
|
if err != nil {
|
|
log.Fatal("Failed to connect!:", err)
|
|
}
|
|
|
|
defer connection.Close()
|
|
|
|
channel, err := sylvilagus.CreateRPCTopology(connection)
|
|
if err != nil {
|
|
log.Fatal("Failed to build topology!:", err)
|
|
}
|
|
|
|
pings, err := channel.Consume("ping", "ping", false, false, false, false, nil)
|
|
if err != nil {
|
|
log.Fatal("Failed to start consuming!:", err)
|
|
}
|
|
|
|
quit := make(chan bool)
|
|
|
|
go func(quit chan bool) {
|
|
log.Println("Waiting for RPC calls...")
|
|
|
|
for ping := range pings {
|
|
if err = ping.Ack(false); err == nil {
|
|
log.Println("Received API call... replying...")
|
|
|
|
pingInst := &sylvilagus.Ping{}
|
|
err = json.Unmarshal(ping.Body, pingInst)
|
|
if err == nil {
|
|
msg := amqp.Publishing{
|
|
DeliveryMode: amqp.Persistent,
|
|
Timestamp: time.Now(),
|
|
ContentType: "text/plain",
|
|
Body: []byte(fmt.Sprintf("Pong! %s", pingInst.Time)),
|
|
}
|
|
|
|
channel.Publish("", ping.ReplyTo, false, false, msg)
|
|
} else {
|
|
log.Println("Failed to json.Unmarshal the ping!:", err)
|
|
}
|
|
} else {
|
|
log.Println("Failed to ACK the ping!:", err)
|
|
}
|
|
}
|
|
}(quit)
|
|
|
|
<-quit
|
|
}
|