github.com/secoba/wails/v2@v2.6.4/internal/frontend/dispatcher/dispatcher.go (about)

     1  package dispatcher
     2  
     3  import (
     4  	"context"
     5  
     6  	"github.com/pkg/errors"
     7  	"github.com/secoba/wails/v2/internal/binding"
     8  	"github.com/secoba/wails/v2/internal/frontend"
     9  	"github.com/secoba/wails/v2/internal/logger"
    10  	"github.com/secoba/wails/v2/pkg/options"
    11  )
    12  
    13  type Dispatcher struct {
    14  	log        *logger.Logger
    15  	bindings   *binding.Bindings
    16  	events     frontend.Events
    17  	bindingsDB *binding.DB
    18  	ctx        context.Context
    19  	errfmt     options.ErrorFormatter
    20  }
    21  
    22  func NewDispatcher(ctx context.Context, log *logger.Logger, bindings *binding.Bindings, events frontend.Events, errfmt options.ErrorFormatter) *Dispatcher {
    23  	return &Dispatcher{
    24  		log:        log,
    25  		bindings:   bindings,
    26  		events:     events,
    27  		bindingsDB: bindings.DB(),
    28  		ctx:        ctx,
    29  		errfmt:     errfmt,
    30  	}
    31  }
    32  
    33  func (d *Dispatcher) ProcessMessage(message string, sender frontend.Frontend) (string, error) {
    34  	if message == "" {
    35  		return "", errors.New("No message to process")
    36  	}
    37  	switch message[0] {
    38  	case 'L':
    39  		return d.processLogMessage(message)
    40  	case 'E':
    41  		return d.processEventMessage(message, sender)
    42  	case 'C':
    43  		return d.processCallMessage(message, sender)
    44  	case 'c':
    45  		return d.processSecureCallMessage(message, sender)
    46  	case 'W':
    47  		return d.processWindowMessage(message, sender)
    48  	case 'B':
    49  		return d.processBrowserMessage(message, sender)
    50  	case 'Q':
    51  		sender.Quit()
    52  		return "", nil
    53  	case 'S':
    54  		sender.Show()
    55  		return "", nil
    56  	case 'H':
    57  		sender.Hide()
    58  		return "", nil
    59  	default:
    60  		return "", errors.New("Unknown message from front end: " + message)
    61  	}
    62  }