diff --git a/core/src/main/golang/event/event.go b/core/src/main/golang/event/event.go index 9c2100d..17a8be6 100644 --- a/core/src/main/golang/event/event.go +++ b/core/src/main/golang/event/event.go @@ -7,6 +7,13 @@ var ( handleClose func() ) +const ( + EventClose = 0 + EventLog = 1 + EventProxyChanged = 2 + EventTraffic = 3 +) + func SetHandlers(send func([]byte), close func()) error { if handleSend != nil || handleClose != nil { return errors.New("Already registered") @@ -22,3 +29,9 @@ func ClearHandlers() { handleSend = nil handleClose = nil } + +func send(buf []byte) { + if handleSend != nil { + handleSend(buf) + } +} diff --git a/core/src/main/golang/event/log.go b/core/src/main/golang/event/log.go index 0e4b82e..656a1ae 100644 --- a/core/src/main/golang/event/log.go +++ b/core/src/main/golang/event/log.go @@ -1 +1,79 @@ package event + +import "github.com/Dreamacro/clash/log" + +import "encoding/json" + +import "encoding/binary" + +var logExit chan int = nil + +func StartLogEvent() { + if logExit != nil { + return + } + + go func() { + logExit = make(chan int) + sub := log.Subscribe() + + defer log.UnSubscribe(sub) + defer func() { + close(logExit) + logExit = nil + }() + + for { + select { + case data := <-sub: + log := data.(*log.Event) + + if log == nil { + continue + } + + var message struct { + Type int `json:"type"` + Message string `json:"message"` + } + + message.Type = levelToInt(log.LogLevel) + message.Message = log.Payload + + s, _ := json.Marshal(&message) + + var prefix [4]byte + + binary.BigEndian.PutUint32(prefix[:], EventLog) + + send(append(prefix[:], s[:]...)) + + case <-logExit: + return + } + } + }() +} + +func StopLogEvent() { + if logExit == nil { + return + } + + logExit <- 0 +} + +func levelToInt(level log.LogLevel) int { + switch level { + case log.DEBUG: + return 1 + case log.INFO: + return 2 + case log.WARNING: + return 3 + case log.ERROR: + return 4 + } + + return 1 +} diff --git a/core/src/main/java/com/github/kr328/clash/core/serialization/Parcels.kt b/core/src/main/java/com/github/kr328/clash/core/serialization/Parcels.kt index daddd62..6199388 100644 --- a/core/src/main/java/com/github/kr328/clash/core/serialization/Parcels.kt +++ b/core/src/main/java/com/github/kr328/clash/core/serialization/Parcels.kt @@ -38,4 +38,6 @@ object Parcels : AbstractSerialFormat(EmptyModule) { return nextObject ?: throw NullPointerException("Parcel read data null") } } -} \ No newline at end of file +} + +