mirror of
https://github.com/wailsapp/wails.git
synced 2025-05-03 00:09:56 +08:00
[windows-x] Update events system to accommodate dev build
This commit is contained in:
parent
dbcf4058e5
commit
e00d65d468
@ -8,6 +8,7 @@ import (
|
||||
"flag"
|
||||
"github.com/wailsapp/wails/v2/internal/binding"
|
||||
"github.com/wailsapp/wails/v2/internal/frontend"
|
||||
"github.com/wailsapp/wails/v2/internal/frontend/desktop"
|
||||
"github.com/wailsapp/wails/v2/internal/frontend/devserver"
|
||||
"github.com/wailsapp/wails/v2/internal/frontend/dispatcher"
|
||||
"github.com/wailsapp/wails/v2/internal/frontend/runtime"
|
||||
@ -100,8 +101,11 @@ func CreateApp(appoptions *options.App) (*App, error) {
|
||||
ctx = context.WithValue(ctx, "events", eventHandler)
|
||||
messageDispatcher := dispatcher.NewDispatcher(myLogger, appBindings, eventHandler)
|
||||
|
||||
appFrontend := devserver.NewFrontend(ctx, appoptions, myLogger, appBindings, messageDispatcher, menuManager)
|
||||
eventHandler.SetFrontend(appFrontend)
|
||||
// Create the frontends and register to event handler
|
||||
desktopFrontend := desktop.NewFrontend(ctx, appoptions, myLogger, appBindings, messageDispatcher)
|
||||
appFrontend := devserver.NewFrontend(ctx, appoptions, myLogger, appBindings, messageDispatcher, menuManager, desktopFrontend)
|
||||
eventHandler.AddFrontend(appFrontend)
|
||||
eventHandler.AddFrontend(desktopFrontend)
|
||||
|
||||
result := &App{
|
||||
ctx: ctx,
|
||||
|
@ -259,7 +259,7 @@ func (f *Frontend) processMessage(message string) {
|
||||
}
|
||||
return
|
||||
}
|
||||
result, err := f.dispatcher.ProcessMessage(message)
|
||||
result, err := f.dispatcher.ProcessMessage(message, f)
|
||||
if err != nil {
|
||||
f.logger.Error(err.Error())
|
||||
}
|
||||
|
@ -9,7 +9,6 @@ import (
|
||||
"github.com/wailsapp/wails/v2/internal/binding"
|
||||
"github.com/wailsapp/wails/v2/internal/frontend"
|
||||
"github.com/wailsapp/wails/v2/internal/frontend/assetserver"
|
||||
"github.com/wailsapp/wails/v2/internal/frontend/desktop"
|
||||
"github.com/wailsapp/wails/v2/internal/logger"
|
||||
"github.com/wailsapp/wails/v2/internal/menumanager"
|
||||
"github.com/wailsapp/wails/v2/pkg/menu"
|
||||
@ -70,12 +69,13 @@ func (d *DevServer) Run(ctx context.Context) error {
|
||||
continue
|
||||
}
|
||||
|
||||
// Notify the other browsers
|
||||
if len(msg) > 2 && strings.HasPrefix(string(msg), "EE") {
|
||||
d.notifyExcludingSender(msg, c)
|
||||
continue
|
||||
}
|
||||
|
||||
result, err := d.dispatcher.ProcessMessage(string(msg))
|
||||
// Send the message to dispatch to the frontend
|
||||
result, err := d.dispatcher.ProcessMessage(string(msg), d)
|
||||
if err != nil {
|
||||
d.logger.Error(err.Error())
|
||||
}
|
||||
@ -235,8 +235,6 @@ func (d *DevServer) UpdateApplicationMenu() {
|
||||
}
|
||||
|
||||
func (d *DevServer) Notify(name string, data ...interface{}) {
|
||||
d.desktopFrontend.Notify(name, data...)
|
||||
// Notify Websockets....
|
||||
d.notify(name, data...)
|
||||
}
|
||||
|
||||
@ -342,10 +340,10 @@ func (d *DevServer) notifyExcludingSender(eventMessage []byte, sender *websocket
|
||||
d.desktopFrontend.Notify(notifyMessage.Name, notifyMessage.Data...)
|
||||
}
|
||||
|
||||
func NewFrontend(ctx context.Context, appoptions *options.App, myLogger *logger.Logger, appBindings *binding.Bindings, dispatcher frontend.Dispatcher, menuManager *menumanager.Manager) *DevServer {
|
||||
func NewFrontend(ctx context.Context, appoptions *options.App, myLogger *logger.Logger, appBindings *binding.Bindings, dispatcher frontend.Dispatcher, menuManager *menumanager.Manager, desktopFrontend frontend.Frontend) *DevServer {
|
||||
result := &DevServer{
|
||||
ctx: ctx,
|
||||
desktopFrontend: desktop.NewFrontend(ctx, appoptions, myLogger, appBindings, dispatcher),
|
||||
desktopFrontend: desktopFrontend,
|
||||
appoptions: appoptions,
|
||||
logger: myLogger,
|
||||
appBindings: appBindings,
|
||||
|
@ -1,5 +1,5 @@
|
||||
package frontend
|
||||
|
||||
type Dispatcher interface {
|
||||
ProcessMessage(message string) (string, error)
|
||||
ProcessMessage(message string, sender Frontend) (string, error)
|
||||
}
|
||||
|
@ -23,7 +23,7 @@ func NewDispatcher(log *logger.Logger, bindings *binding.Bindings, events fronte
|
||||
}
|
||||
}
|
||||
|
||||
func (d *Dispatcher) ProcessMessage(message string) (string, error) {
|
||||
func (d *Dispatcher) ProcessMessage(message string, sender frontend.Frontend) (string, error) {
|
||||
if message == "" {
|
||||
return "", errors.New("No message to process")
|
||||
}
|
||||
@ -31,7 +31,7 @@ func (d *Dispatcher) ProcessMessage(message string) (string, error) {
|
||||
case 'L':
|
||||
return d.processLogMessage(message)
|
||||
case 'E':
|
||||
return d.processEventMessage(message)
|
||||
return d.processEventMessage(message, sender)
|
||||
case 'C':
|
||||
return d.processCallMessage(message)
|
||||
default:
|
||||
|
@ -3,6 +3,7 @@ package dispatcher
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"github.com/wailsapp/wails/v2/internal/frontend"
|
||||
)
|
||||
|
||||
type EventMessage struct {
|
||||
@ -10,7 +11,7 @@ type EventMessage struct {
|
||||
Data []interface{} `json:"data"`
|
||||
}
|
||||
|
||||
func (d *Dispatcher) processEventMessage(message string) (string, error) {
|
||||
func (d *Dispatcher) processEventMessage(message string, sender frontend.Frontend) (string, error) {
|
||||
if len(message) < 3 {
|
||||
return "", errors.New("Invalid Event Message: " + message)
|
||||
}
|
||||
@ -22,7 +23,7 @@ func (d *Dispatcher) processEventMessage(message string) (string, error) {
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
go d.events.Notify(eventMessage.Name, eventMessage.Data)
|
||||
go d.events.Notify(sender, eventMessage.Name, eventMessage.Data)
|
||||
case 'X':
|
||||
eventName := message[2:]
|
||||
go d.events.Off(eventName)
|
||||
|
@ -6,5 +6,5 @@ type Events interface {
|
||||
Once(eventName string, callback func(...interface{}))
|
||||
Emit(eventName string, data ...interface{})
|
||||
Off(eventName string)
|
||||
Notify(name string, data ...interface{})
|
||||
Notify(sender Frontend, name string, data ...interface{})
|
||||
}
|
||||
|
@ -19,15 +19,21 @@ type eventListener struct {
|
||||
// Events handles eventing
|
||||
type Events struct {
|
||||
log *logger.Logger
|
||||
frontend frontend.Frontend
|
||||
frontend []frontend.Frontend
|
||||
|
||||
// Go event listeners
|
||||
listeners map[string][]*eventListener
|
||||
notifyLock sync.RWMutex
|
||||
}
|
||||
|
||||
func (e *Events) Notify(name string, data ...interface{}) {
|
||||
e.notify(name, data...)
|
||||
func (e *Events) Notify(sender frontend.Frontend, name string, data ...interface{}) {
|
||||
e.notifyBackend(name, data...)
|
||||
for _, thisFrontend := range e.frontend {
|
||||
if thisFrontend == sender {
|
||||
continue
|
||||
}
|
||||
thisFrontend.Notify(name, data...)
|
||||
}
|
||||
}
|
||||
|
||||
func (e *Events) On(eventName string, callback func(...interface{})) {
|
||||
@ -43,8 +49,10 @@ func (e *Events) Once(eventName string, callback func(...interface{})) {
|
||||
}
|
||||
|
||||
func (e *Events) Emit(eventName string, data ...interface{}) {
|
||||
e.notify(eventName, data...)
|
||||
e.frontend.Notify(eventName, data...)
|
||||
e.notifyBackend(eventName, data...)
|
||||
for _, thisFrontend := range e.frontend {
|
||||
thisFrontend.Notify(eventName, data...)
|
||||
}
|
||||
}
|
||||
|
||||
func (e *Events) Off(eventName string) {
|
||||
@ -82,8 +90,8 @@ func (e *Events) unRegisterListener(eventName string) {
|
||||
e.notifyLock.Unlock()
|
||||
}
|
||||
|
||||
// Notify for the given event name
|
||||
func (e *Events) notify(eventName string, data ...interface{}) {
|
||||
// Notify backend for the given event name
|
||||
func (e *Events) notifyBackend(eventName string, data ...interface{}) {
|
||||
|
||||
// Get list of event listeners
|
||||
listeners := e.listeners[eventName]
|
||||
@ -137,6 +145,7 @@ func (e *Events) notify(eventName string, data ...interface{}) {
|
||||
e.notifyLock.Unlock()
|
||||
}
|
||||
|
||||
func (e *Events) SetFrontend(appFrontend frontend.Frontend) {
|
||||
e.frontend = appFrontend
|
||||
func (e *Events) AddFrontend(appFrontend frontend.Frontend) {
|
||||
println("Adding frontend", appFrontend)
|
||||
e.frontend = append(e.frontend, appFrontend)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user