mirror of
https://github.com/Octops/quake-kube.git
synced 2026-04-09 11:20:32 +00:00
Initial commit
This commit is contained in:
58
internal/quake/client/server.go
Normal file
58
internal/quake/client/server.go
Normal file
@ -0,0 +1,58 @@
|
||||
package client
|
||||
|
||||
import (
|
||||
"net"
|
||||
"net/http"
|
||||
"time"
|
||||
|
||||
"github.com/cockroachdb/cmux"
|
||||
)
|
||||
|
||||
type Server struct {
|
||||
Addr string
|
||||
Handler http.Handler
|
||||
ServerAddr string
|
||||
}
|
||||
|
||||
func (s *Server) Serve(l net.Listener) error {
|
||||
m := cmux.New(l)
|
||||
websocketL := m.Match(cmux.HTTP1HeaderField("Upgrade", "websocket"))
|
||||
httpL := m.Match(cmux.Any())
|
||||
|
||||
go func() {
|
||||
s := &http.Server{
|
||||
Addr: s.Addr,
|
||||
Handler: s.Handler,
|
||||
ReadTimeout: 10 * time.Second,
|
||||
WriteTimeout: 10 * time.Second,
|
||||
MaxHeaderBytes: 1 << 20,
|
||||
}
|
||||
if err := s.Serve(httpL); err != cmux.ErrListenerClosed {
|
||||
panic(err)
|
||||
}
|
||||
}()
|
||||
|
||||
wsproxy, err := NewProxy(s.ServerAddr)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
go func() {
|
||||
s := &http.Server{
|
||||
Handler: wsproxy,
|
||||
}
|
||||
if err := s.Serve(websocketL); err != cmux.ErrListenerClosed {
|
||||
panic(err)
|
||||
}
|
||||
}()
|
||||
|
||||
return m.Serve()
|
||||
}
|
||||
|
||||
func (s *Server) ListenAndServe() error {
|
||||
l, err := net.Listen("tcp", s.Addr)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return s.Serve(l)
|
||||
}
|
||||
Reference in New Issue
Block a user