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

     1  package dispatcher
     2  
     3  import (
     4  	"encoding/json"
     5  	"fmt"
     6  
     7  	"github.com/secoba/wails/v2/internal/frontend"
     8  )
     9  
    10  type secureCallMessage struct {
    11  	ID         int               `json:"id"`
    12  	Args       []json.RawMessage `json:"args"`
    13  	CallbackID string            `json:"callbackID"`
    14  }
    15  
    16  func (d *Dispatcher) processSecureCallMessage(message string, sender frontend.Frontend) (string, error) {
    17  	var payload secureCallMessage
    18  	err := json.Unmarshal([]byte(message[1:]), &payload)
    19  	if err != nil {
    20  		return "", err
    21  	}
    22  
    23  	var result interface{}
    24  
    25  	// Lookup method
    26  	registeredMethod := d.bindingsDB.GetObfuscatedMethod(payload.ID)
    27  
    28  	// Check we have it
    29  	if registeredMethod == nil {
    30  		return "", fmt.Errorf("method '%d' not registered", payload.ID)
    31  	}
    32  
    33  	args, err2 := registeredMethod.ParseArgs(payload.Args)
    34  	if err2 != nil {
    35  		errmsg := fmt.Errorf("error parsing arguments: %s", err2.Error())
    36  		result, _ := d.NewErrorCallback(errmsg.Error(), payload.CallbackID)
    37  		return result, errmsg
    38  	}
    39  	result, err = registeredMethod.Call(args)
    40  
    41  	callbackMessage := &CallbackMessage{
    42  		CallbackID: payload.CallbackID,
    43  	}
    44  	if err != nil {
    45  		callbackMessage.Err = err.Error()
    46  	} else {
    47  		callbackMessage.Result = result
    48  	}
    49  	messageData, err := json.Marshal(callbackMessage)
    50  	d.log.Trace("json call result data: %+v\n", string(messageData))
    51  	if err != nil {
    52  		// what now?
    53  		d.log.Fatal(err.Error())
    54  	}
    55  
    56  	return "c" + string(messageData), nil
    57  }