翻出历史项目,先上传,未测试(MQTT3.1.1已经支持)

This commit is contained in:
Jason
2020-09-11 06:48:42 +08:00
parent ad870c9948
commit 19e8e303ec
29 changed files with 2787 additions and 0 deletions

65
socket.go Normal file
View File

@@ -0,0 +1,65 @@
package beeq
import (
"crypto/tls"
"golang.org/x/net/websocket"
"net"
"net/http"
"time"
)
type tcpKeepAliveListener struct {
*net.TCPListener
}
func (ln tcpKeepAliveListener) Accept() (c net.Conn, err error) {
tc, err := ln.AcceptTCP()
if err != nil {
return
}
tc.SetKeepAlive(true)
tc.SetKeepAlivePeriod(3 * time.Minute)
return tc, nil
}
func AcceptSocket(ln net.Listener, cb func(conn net.Conn)) {
go (func() {
//defer ln.Close()
for {
if conn, err := ln.Accept(); err != nil {
//TODO log
break
} else {
cb(conn)
}
}
})()
}
func AcceptWebSocket(ln net.Listener, pattern string, cb func(conn net.Conn)) {
h := func(ws *websocket.Conn) {
conn := NewWSConn(ws)
cb(conn)
//block here
conn.Wait()
}
mux := http.NewServeMux()
mux.Handle(pattern, websocket.Handler(h))
svr := http.Server{Handler:mux}
go svr.Serve(tcpKeepAliveListener{ln.(*net.TCPListener)})
}
func ListenSocket(laddr string) (net.Listener, error) {
return net.Listen("tcp", laddr)
}
func ListenSocketTLS(laddr string, cert string, key string) (net.Listener, error) {
if ce, err := tls.LoadX509KeyPair(cert, key); err != nil {
return nil, err
} else {
config := &tls.Config{Certificates: []tls.Certificate{ce}}
return tls.Listen("tcp", laddr, config)
}
}