Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@actuino
Created March 20, 2017 08:41
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 actuino/72b9e45652884c199713a9594fe1bd69 to your computer and use it in GitHub Desktop.
Save actuino/72b9e45652884c199713a9594fe1bd69 to your computer and use it in GitHub Desktop.
A websocket client in Go that connects to a unicorn display server - See http://www.actuino.fr/raspi/learn-go-pi.html
package main
import (
"github.com/graarh/golang-socketio"
"github.com/graarh/golang-socketio/transport"
"log"
"runtime"
"time"
"fmt"
"io/ioutil"
"encoding/json"
"os"
"strconv"
)
import . "github.com/alexellis/blinkt_go"
type colors map[string][3]int
type FileMessage struct {
Name string `json:"Name"`
Channel string `json:"Channel"`
Type string `json:"Type"`
Payload [8][8]int `json:"Payload"`
}
func main() {
brightness := 0.3
display_server_host := "192.168.7.3"
if "" != os.Getenv("DISPLAY_SERVER_HOST") {
display_server_host = os.Getenv("DISPLAY_SERVER_HOST")
}
display_server_port := 80
if "" != os.Getenv("DISPLAY_SERVER_PORT") {
port, err := strconv.Atoi(os.Getenv("DISPLAY_SERVER_PORT"))
if err == nil {
display_server_port = port
}
}
log.Println("--- Server: ", display_server_host, display_server_port)
blinkt := NewBlinkt(brightness)
blinkt.SetClearOnExit(true)
blinkt.Setup()
Delay(100)
runtime.GOMAXPROCS(runtime.NumCPU())
dat, err := ioutil.ReadFile("./colors.json")
if err != nil {
fmt.Println(err.Error())
os.Exit(1)
}
var palette colors
json.Unmarshal(dat, &palette)
c, err := gosocketio.Dial(
gosocketio.GetUrl(display_server_host, display_server_port, false),
transport.GetDefaultWebsocketTransport())
if err != nil {
log.Fatal(err)
}
err = c.On("message", func(h *gosocketio.Channel, args string) {
log.Println("--- Got message: ", args)
})
if err != nil {
log.Fatal(err)
}
err = c.On("file", func(h *gosocketio.Channel, args FileMessage) {
log.Println("--- Got json file: ", args)
blinkt.Clear()
for i, colorIndex := range args.Payload[0] {
rgb := palette[strconv.Itoa(colorIndex)];
blinkt.SetPixel(i, rgb[0], rgb[1], rgb[2])
blinkt.Show()
}
})
if err != nil {
log.Fatal(err)
}
err = c.On(gosocketio.OnDisconnection, func(h *gosocketio.Channel) {
log.Fatal("Disconnected")
})
if err != nil {
log.Fatal(err)
}
err = c.On(gosocketio.OnConnection, func(h *gosocketio.Channel) {
log.Println("Connected")
})
if err != nil {
log.Fatal(err)
}
for {
time.Sleep(1 * time.Second)
}
c.Close()
log.Println(" [x] Complete")
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment