5
0
mirror of https://github.com/wailsapp/wails.git synced 2025-05-04 01:00:21 +08:00
wails/v2/internal/webserver/webserver.go
2020-10-09 10:33:11 +11:00

88 lines
2.0 KiB
Go

package webserver
import (
"fmt"
"net/http"
"sync"
"github.com/wailsapp/wails/v2/internal/assetdb"
"github.com/wailsapp/wails/v2/internal/binding"
"github.com/wailsapp/wails/v2/internal/logger"
"github.com/wailsapp/wails/v2/internal/messagedispatcher"
"github.com/wailsapp/wails/v2/internal/subsystem"
)
// WebServer serves the application over http
type WebServer struct {
port int
ip string
assets *assetdb.AssetDB
logger *logger.Logger
dispatcher *messagedispatcher.Dispatcher
event *subsystem.Event
server *http.Server
bindings *binding.Bindings
lock sync.Mutex
connections map[string]*WebClient
}
// NewWebServer creates a new WebServer
func NewWebServer(logger *logger.Logger) *WebServer {
// Return a WebServer with default values
return &WebServer{
assets: db,
connections: make(map[string]*WebClient),
logger: logger,
}
}
// URL returns the URL that the server is serving from
func (w *WebServer) URL() string {
return fmt.Sprintf("http://%s:%d", w.ip, w.port)
}
// SetPort sets the server port to listen on
func (w *WebServer) SetPort(port int) {
w.port = port
}
// SetIP sets the server ip to listen on
func (w *WebServer) SetIP(ip string) {
w.ip = ip
}
// SetBindings provides the webserver with the mapping of bindings to provide to a client
func (w *WebServer) SetBindings(bindings *binding.Bindings) {
w.bindings = bindings
}
// Start the webserver
func (w *WebServer) Start(dispatcher *messagedispatcher.Dispatcher, event *subsystem.Event) error {
var err error
// Create the server
w.server = &http.Server{Addr: fmt.Sprintf("%s:%d", w.ip, w.port)}
w.event = event
// Set up the Web Server's routes
err = w.setUpRoutes()
if err != nil {
return err
}
// Save the dispatcher
w.dispatcher = dispatcher
// Start the WebServer
err = w.server.ListenAndServe()
// Return any error except http.ErrServerClosed
if err != nil && err != http.ErrServerClosed {
return err
}
return nil
}