github.com/LQR471814/websocket-ftp/server@v0.4.0/state.go (about) 1 package server 2 3 import ( 4 "net" 5 "net/http" 6 7 utils "github.com/LQR471814/go-utils" 8 "github.com/gorilla/websocket" 9 ) 10 11 type ServerHooks interface { 12 OnTransferRequest(*Transfer) chan bool 13 OnTransferUpdate(*Transfer) 14 OnTransferComplete(*Transfer, File) 15 OnAllTransfersComplete(*Transfer) 16 } 17 18 var upgrader = websocket.Upgrader{ 19 CheckOrigin: func(*http.Request) bool { return true }, //? Allow cross-origin requests 20 ReadBufferSize: 1024, 21 WriteBufferSize: 1024, 22 } 23 24 type WSFTPServer struct { 25 Transfers map[uint64]*Transfer 26 Config ServerConfig 27 28 ids utils.IDStore 29 server http.Server 30 } 31 32 type ServerConfig struct { 33 Handlers ServerHooks 34 Verbose bool 35 } 36 37 func NewDefaultServer() *WSFTPServer { 38 return &WSFTPServer{ 39 Transfers: map[uint64]*Transfer{}, 40 Config: ServerConfig{}, 41 } 42 } 43 44 func NewServer(config ServerConfig) *WSFTPServer { 45 return &WSFTPServer{ 46 Transfers: map[uint64]*Transfer{}, 47 Config: config, 48 } 49 } 50 51 func initHTTP(s *WSFTPServer) http.Server { 52 return http.Server{ 53 Handler: http.HandlerFunc( 54 func(w http.ResponseWriter, r *http.Request) { 55 Handler(s, w, r) 56 }, 57 ), 58 } 59 } 60 61 func (s *WSFTPServer) Serve() { 62 s.server = initHTTP(s) 63 s.server.ListenAndServe() 64 } 65 66 func (s *WSFTPServer) ServeWith(listener net.Listener) { 67 s.server = initHTTP(s) 68 s.server.Serve(listener) 69 } 70 71 func (s *WSFTPServer) Close() { 72 s.server.Close() 73 }