Skip to content

Instantly share code, notes, and snippets.

@kjunichi
Created December 13, 2024 11:20
Show Gist options
  • Save kjunichi/211819f7304fc4d49fbaab2a684595ec to your computer and use it in GitHub Desktop.
Save kjunichi/211819f7304fc4d49fbaab2a684595ec to your computer and use it in GitHub Desktop.
最新のSocket.ioに対応した版
package main
import (
"fmt"
"log"
"net/http"
"os"
"os/exec"
"path/filepath"
"runtime"
"strconv"
socketio "github.com/googollee/go-socket.io"
)
func socketIoServer(port int) {
server := socketio.NewServer(nil)
server.OnConnect("/", func(so socketio.Conn) error {
so.SetContext("")
log.Println("on connection")
so.Join("gopher")
return nil
})
server.OnEvent("/", "electron start", func(so socketio.Conn, msg string) {
log.Println("recv electron: " + msg)
})
server.OnEvent("/", "gopher", func(so socketio.Conn, msg string) {
//so.Emit("news","こんにちは");
})
server.OnEvent("/", "gopher send", func(so socketio.Conn, msg string) {
log.Println("gopher send :", msg)
server.BroadcastToRoom("", "gopher", "news", msg)
so.Emit("gopher recv", "send: ok")
})
server.OnEvent("/", "gopher sendHtml", func(so socketio.Conn, msg string) {
// log.Println("gopher sendHtml :", msg)
server.BroadcastToRoom("", "gopher", "writeHtml", msg)
so.Emit("gopher recv", "send: ok writeHtml")
})
server.OnEvent("/", "gopher stop", func(so socketio.Conn, msg string) {
log.Println("gopher stop :", msg)
server.BroadcastToRoom("", "gopher", "stop", msg)
so.Emit("gopher recv", "send: ok")
})
server.OnEvent("/", "gopher front", func(so socketio.Conn) string {
msg := so.Context().(string)
log.Println("gopher front :", msg)
server.BroadcastToRoom("", "gopher", "front", msg)
so.Emit("gopher recv", "send: ok front")
return msg
})
server.OnDisconnect("/", func(so socketio.Conn, reason string) {
log.Println("on disconnect")
})
server.OnError("/", func(so socketio.Conn, err error) {
log.Println("error:", err)
})
go server.Serve()
defer server.Close()
http.Handle("/socket.io/", server)
http.Handle("/", http.FileServer(http.Dir("./asset")))
log.Println("Serving at localhost:" + strconv.Itoa(port) + "...")
log.Fatal(http.ListenAndServe(":"+strconv.Itoa(port), nil))
}
func exists(filename string) bool {
_, err := os.Stat(filename)
return err == nil
}
func getElectronPath(gopheronPath string) string {
localElectron := gopheronPath + "/" + "node_modules/.bin/electron"
electronPath := "electron"
if exists(localElectron) {
return filepath.FromSlash(localElectron)
}
return electronPath
}
func getGopath() string {
goPath := os.Getenv("GOPATH")
if len(goPath) == 0 {
if runtime.GOOS == "windows" {
goPath = os.Getenv("USERPROFILE") + "/go"
} else {
goPath = os.Getenv("HOME") + "/go"
}
}
return goPath
}
func startElectron() {
//gopheronPath := path.Dir(os.Args[0])
gopheronPath := getGopath() + "/src/github.com/kjunichi/gopheron"
os.Chdir(gopheronPath)
out, err := exec.Command(getElectronPath(gopheronPath), "--with-golang", gopheronPath).Output()
if err != nil {
fmt.Println(err)
os.Exit(1)
}
fmt.Println(string(out))
}
func main() {
go socketIoServer(5050)
startElectron()
//time.Sleep(10000 * time.Second)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment