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  }