1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- package main
- import (
- bridge "core/dart-bridge"
- "encoding/json"
- "github.com/metacubex/mihomo/constant"
- )
- var Port int64
- var ServicePort int64
- type MessageType string
- const (
- LogMessage MessageType = "log"
- ProtectMessage MessageType = "protect"
- DelayMessage MessageType = "delay"
- ProcessMessage MessageType = "process"
- RequestMessage MessageType = "request"
- StartedMessage MessageType = "started"
- LoadedMessage MessageType = "loaded"
- )
- type Delay struct {
- Name string `json:"name"`
- Value int32 `json:"value"`
- }
- type Process struct {
- Id int64 `json:"id"`
- Metadata *constant.Metadata `json:"metadata"`
- }
- type Message struct {
- Type MessageType `json:"type"`
- Data interface{} `json:"data"`
- }
- func (message *Message) Json() (string, error) {
- data, err := json.Marshal(message)
- return string(data), err
- }
- func SendMessage(message Message) {
- s, err := message.Json()
- if err != nil {
- return
- }
- if handler, ok := messageHandlers[message.Type]; ok {
- handler(s)
- } else {
- sendToPort(s)
- }
- }
- var messageHandlers = map[MessageType]func(string) bool{
- ProtectMessage: sendToServicePort,
- ProcessMessage: sendToServicePort,
- StartedMessage: conditionalSend,
- LoadedMessage: conditionalSend,
- }
- func sendToPort(s string) bool {
- return bridge.SendToPort(Port, s)
- }
- func sendToServicePort(s string) bool {
- return bridge.SendToPort(ServicePort, s)
- }
- func conditionalSend(s string) bool {
- isSuccess := sendToPort(s)
- if !isSuccess {
- return sendToServicePort(s)
- }
- return isSuccess
- }
|