Initial 2024-01-26
This commit is contained in:
168
cmpSnipper/cmpSnipperHttpWsHandle.go
Normal file
168
cmpSnipper/cmpSnipperHttpWsHandle.go
Normal file
@@ -0,0 +1,168 @@
|
||||
|
||||
package cmpSnipper
|
||||
|
||||
import (
|
||||
"time"
|
||||
"net/http"
|
||||
|
||||
"github.com/gorilla/websocket"
|
||||
)
|
||||
|
||||
type cmpWbsCliStruct struct {
|
||||
W http.ResponseWriter
|
||||
Connect *websocket.Conn
|
||||
HostPort string
|
||||
}
|
||||
|
||||
var upgrader = websocket.Upgrader{
|
||||
ReadBufferSize: 1024,
|
||||
WriteBufferSize: 1024,
|
||||
HandshakeTimeout: 60 * time.Second,
|
||||
}
|
||||
|
||||
func (app *App) HttpWebSockHand(w http.ResponseWriter, req *http.Request) {
|
||||
conn, err := upgrader.Upgrade(w, req, nil)
|
||||
|
||||
defer conn.Close()
|
||||
|
||||
if err != nil {
|
||||
app.Log(err)
|
||||
return
|
||||
}
|
||||
|
||||
app.Log("HttpWebSockHand:for")
|
||||
|
||||
HostPort := req.Header.Get("X-Real-Ip")
|
||||
|
||||
if HostPort == "" {
|
||||
HostPort = req.Header.Get("X-Forwarded-For")
|
||||
}
|
||||
|
||||
if HostPort == "" {
|
||||
HostPort = req.RemoteAddr
|
||||
}
|
||||
|
||||
app.Log("New client: %s", HostPort)
|
||||
|
||||
var cmpWbsCli cmpWbsCliStruct = cmpWbsCliStruct{
|
||||
w,
|
||||
conn,
|
||||
HostPort,
|
||||
}
|
||||
|
||||
|
||||
app.CliList = append(app.CliList, cmpWbsCli)
|
||||
|
||||
app.Log(app.CliList)
|
||||
|
||||
for i, cli := range app.CliList {
|
||||
app.Log("Client %s, %s", i, cli.HostPort)
|
||||
}
|
||||
|
||||
for {
|
||||
var inp = map[string]interface{}{}
|
||||
var out = map[string]interface{}{
|
||||
"snip": "",
|
||||
"result": nil,
|
||||
}
|
||||
|
||||
err := conn.ReadJSON(&inp)
|
||||
|
||||
if err != nil {
|
||||
app.Log("Read JSON: %s", err)
|
||||
app.Log(err)
|
||||
|
||||
var list []cmpWbsCliStruct
|
||||
|
||||
for _, ii := range app.CliList {
|
||||
if ii.HostPort == HostPort {
|
||||
continue
|
||||
}
|
||||
|
||||
list = append(list, ii)
|
||||
}
|
||||
|
||||
app.CliList = list
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
app.Log("Received message: %+v", inp)
|
||||
|
||||
out["snip"] = inp["snip"]
|
||||
|
||||
// app.Log("Copy snip OK")
|
||||
|
||||
var snip string;
|
||||
|
||||
snip = inp["snip"].(string)
|
||||
|
||||
// app.Log("Look snip")
|
||||
|
||||
if app.SnipExists(snip) {
|
||||
out["result"], err = app.SnipCall(cmpWbsCli, snip, inp)
|
||||
|
||||
if err != nil {
|
||||
out["error"] = "Server error"
|
||||
}
|
||||
} else {
|
||||
out["error"] = "Unknown snip"
|
||||
app.Log("Unknow snip:", inp["snip"])
|
||||
}
|
||||
|
||||
err = conn.WriteJSON(out)
|
||||
|
||||
if err != nil {
|
||||
app.Log(err)
|
||||
}
|
||||
|
||||
// for
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (app *App) HttpWebSockSendTo(cmpWbsCli cmpWbsCliStruct, snip string, result map[string]interface{}) {
|
||||
var err error
|
||||
|
||||
out := map[string]interface{}{
|
||||
"snip": snip,
|
||||
"result": result,
|
||||
}
|
||||
|
||||
err = cmpWbsCli.Connect.WriteJSON(out)
|
||||
|
||||
if err != nil {
|
||||
app.Log(err)
|
||||
return
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (app *App) HttpWebSockSendAll(snip string, result map[string]interface{}) {
|
||||
var err error
|
||||
|
||||
app.Log("Send to all")
|
||||
|
||||
out := map[string]interface{}{
|
||||
"snip": snip,
|
||||
"result": result,
|
||||
}
|
||||
|
||||
for _, ii := range app.CliList {
|
||||
if ii.HostPort == "" {
|
||||
break
|
||||
}
|
||||
|
||||
err = ii.Connect.WriteJSON(out)
|
||||
|
||||
if err != nil {
|
||||
app.Log(err)
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
Reference in New Issue
Block a user