mirror of
https://github.com/wailsapp/wails.git
synced 2025-05-03 22:50:59 +08:00
88 lines
2.0 KiB
Go
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
|
|
}
|