diff --git a/Processor/ProcessC2CMessage.go b/Processor/ProcessC2CMessage.go index 6144444f..fd975f3a 100644 --- a/Processor/ProcessC2CMessage.go +++ b/Processor/ProcessC2CMessage.go @@ -352,7 +352,10 @@ func (p *Processors) ProcessC2CMessage(data *dto.WSC2CMessageData) error { var messageText string //当屏蔽错误通道时候=性能模式 不解析at 不解析图片 - if !config.GetDisableErrorChan() { + GetDisableErrorChan := config.GetDisableErrorChan() + + // 判断性能模式 + if !GetDisableErrorChan { //转换at messageText = handlers.RevertTransformedText(data, "group_private", p.Api, p.Apiv2, 0, 0, config.GetWhiteEnable(5)) if messageText == "" { @@ -436,8 +439,15 @@ func (p *Processors) ProcessC2CMessage(data *dto.WSC2CMessageData) error { // Convert OnebotGroupMessage to map and send groupMsgMap := structToMap(groupMsg) - //上报信息到onebotv11应用端(正反ws) - go p.BroadcastMessageToAll(groupMsgMap, p.Apiv2, data) + + // 不使用性能模式 + if !GetDisableErrorChan { + //上报信息到onebotv11应用端(正反ws) + go p.BroadcastMessageToAll(groupMsgMap, p.Apiv2, data) + } else { + // 性能模式 + go p.BroadcastMessageToAllFAF(groupMsgMap, p.Apiv2, data) + } //组合FriendData userdata := structs.FriendData{ diff --git a/Processor/ProcessGroupMessage.go b/Processor/ProcessGroupMessage.go index 802666c7..92ed371c 100644 --- a/Processor/ProcessGroupMessage.go +++ b/Processor/ProcessGroupMessage.go @@ -77,8 +77,10 @@ func (p *Processors) ProcessGroupMessage(data *dto.WSGroupATMessageData) error { } var messageText string + GetDisableErrorChan := config.GetDisableErrorChan() + //当屏蔽错误通道时候=性能模式 不解析at 不解析图片 - if !config.GetDisableErrorChan() { + if !GetDisableErrorChan { // 转换at messageText = handlers.RevertTransformedText(data, "group", p.Api, p.Apiv2, GroupID64, userid64, config.GetWhiteEnable(4)) if messageText == "" { @@ -327,7 +329,14 @@ func (p *Processors) ProcessGroupMessage(data *dto.WSGroupATMessageData) error { groupMsgMap = structToMap(groupMsgS) } - //上报信息到onebotv11应用端(正反ws) - go p.BroadcastMessageToAll(groupMsgMap, p.Apiv2, data) + // 如果不是性能模式 + if !GetDisableErrorChan { + //上报信息到onebotv11应用端(正反ws) 并等待返回 + go p.BroadcastMessageToAll(groupMsgMap, p.Apiv2, data) + } else { + // FAF式 + go p.BroadcastMessageToAllFAF(groupMsgMap, p.Apiv2, data) + } + return nil } diff --git a/Processor/Processor.go b/Processor/Processor.go index 07246242..bc9c4421 100644 --- a/Processor/Processor.go +++ b/Processor/Processor.go @@ -255,6 +255,26 @@ func (p *Processors) SendMessageToAllClients(message map[string]interface{}) err return result.ErrorOrNil() } +// 方便快捷的发信息函数 +func (p *Processors) BroadcastMessageToAllFAF(message map[string]interface{}, api openapi.MessageAPI, data interface{}) error { + // 并发发送到我们作为客户端的Wsclient + for _, client := range p.Wsclient { + go func(c callapi.WebSocketServerClienter) { + _ = c.SendMessage(message) // 忽略错误 + }(client) + } + + // 并发发送到我们作为服务器连接到我们的WsServerClients + for _, serverClient := range p.WsServerClients { + go func(sc callapi.WebSocketServerClienter) { + _ = sc.SendMessage(message) // 忽略错误 + }(serverClient) + } + + // 不再等待所有 goroutine 完成,直接返回 + return nil +} + // 方便快捷的发信息函数 func (p *Processors) BroadcastMessageToAll(message map[string]interface{}, api openapi.MessageAPI, data interface{}) error { var wg sync.WaitGroup diff --git a/wsclient/ws.go b/wsclient/ws.go index 5e1de336..52fa919b 100644 --- a/wsclient/ws.go +++ b/wsclient/ws.go @@ -44,7 +44,7 @@ func (client *WebSocketClient) SendMessage(message map[string]interface{}) error return err } - // 创建错误通道,用于接收写操作的结果 + // 创建专用通道,用于接收写操作的结果 client.writeCh <- writeRequest{ messageType: websocket.TextMessage, data: msgBytes,