102 lines
2.2 KiB
Go
102 lines
2.2 KiB
Go
package server
|
|
|
|
import (
|
|
"context"
|
|
"log"
|
|
|
|
"github.com/valyala/fasthttp"
|
|
|
|
"git.loafle.net/commons_go/rpc/gateway"
|
|
"git.loafle.net/commons_go/server"
|
|
cwf "git.loafle.net/commons_go/websocket_fasthttp"
|
|
oogw "git.loafle.net/overflow/overflow_gateway_websocket"
|
|
)
|
|
|
|
type SocketHandlers struct {
|
|
cwf.SocketHandlers
|
|
}
|
|
|
|
func (sh *SocketHandlers) Init() error {
|
|
if err := sh.SocketHandlers.Init(); nil != err {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (sh *SocketHandlers) Handshake(ctx *fasthttp.RequestCtx) (id string, extensionsHeader *fasthttp.ResponseHeader) {
|
|
return "", nil
|
|
}
|
|
|
|
// OnConnect invoked when client is connected
|
|
// If you override ths method, must call
|
|
func (sh *SocketHandlers) OnConnect(soc cwf.Socket) {
|
|
sh.SocketHandlers.OnConnect(soc)
|
|
|
|
}
|
|
|
|
func (sh *SocketHandlers) Handle(soc *cwf.Socket, stopChan <-chan struct{}, doneChan chan<- struct{}) {
|
|
codec, err := sh.rpcServerHandler.GetCodec(sh.ContentType)
|
|
if nil != err {
|
|
log.Printf("RPC Handle: %v", err)
|
|
doneChan <- struct{}{}
|
|
return
|
|
}
|
|
|
|
var socConn *cwf.SocketConn
|
|
ctx := context.WithValue(context.Background(), oogw.ServletSocketKey, soc)
|
|
// conn.SetPongHandler(func(string) error { c.conn.SetReadDeadline(time.Now().Add(pongWait)); return nil })
|
|
|
|
for {
|
|
if socConn, err = soc.WaitRequest(); nil != err {
|
|
doneChan <- struct{}{}
|
|
return
|
|
}
|
|
|
|
// // "git.loafle.net/commons_go/websocket_fasthttp/websocket"
|
|
// switch socConn.MessageType {
|
|
// case websocket.TextMessage:
|
|
// case websocket.BinaryMessage:
|
|
// }
|
|
|
|
if err = gateway.Handle(ctx, sh.rpcServerHandler, codec, socConn, socConn); nil != err {
|
|
if server.IsClientDisconnect(err) {
|
|
doneChan <- struct{}{}
|
|
return
|
|
}
|
|
log.Printf("RPC: %v", err)
|
|
}
|
|
|
|
if err = socConn.Close(); nil != err {
|
|
doneChan <- struct{}{}
|
|
return
|
|
}
|
|
|
|
select {
|
|
case <-stopChan:
|
|
return
|
|
default:
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
// OnDisconnect invoked when client is disconnected
|
|
// If you override ths method, must call
|
|
func (sh *SocketHandlers) OnDisconnect(soc *cwf.Socket) {
|
|
|
|
sh.SocketHandlers.OnDisconnect(soc)
|
|
}
|
|
|
|
// Destroy invoked when server is stopped
|
|
// If you override ths method, must call
|
|
func (sh *SocketHandlers) Destroy() {
|
|
|
|
sh.SocketHandlers.Destroy()
|
|
}
|
|
|
|
func (sh *SocketHandlers) Validate() {
|
|
sh.SocketHandlers.Validate()
|
|
|
|
}
|