Skip to content

Commit 964a4cf

Browse files
committed
lite
1 parent 67423ba commit 964a4cf

File tree

4 files changed

+46
-190
lines changed

4 files changed

+46
-190
lines changed

build.gradle.kts

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,16 +41,14 @@ repositories {
4141
maven(url = "http://maven.aliyun.com/nexus/content/repositories/jcenter")
4242
mavenCentral()
4343
jcenter()
44-
maven(url = "http://repo.spring.io/plugins-release")
44+
// maven(url = "http://repo.spring.io/plugins-release")
4545
maven(url = "https://plugins.gradle.org/m2/")
4646
}
4747

4848
dependencies {
4949
implementation("net.mamoe:mirai-core-qqandroid:1.3.0")
5050
implementation("com.squareup.okhttp3:okhttp:4.8.0")
51-
implementation("com.google.protobuf:protobuf-java:3.12.2")
52-
// implementation("com.google.protobuf:protobuf-javalite:3.8.0")
53-
implementation("com.google.protobuf:protobuf-java-util:3.12.2")
51+
implementation("com.google.protobuf:protobuf-javalite:3.8.0")
5452

5553
implementation("org.springframework.boot:spring-boot-starter-web")
5654
implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
@@ -67,7 +65,20 @@ dependencies {
6765
protobuf {
6866
generatedFilesBaseDir = "$projectDir/src"
6967
println(generatedFilesBaseDir)
70-
protoc { artifact = "com.google.protobuf:protoc:3.7.0" }
68+
protoc {
69+
// You still need protoc like in the non-Android case
70+
artifact = "com.google.protobuf:protoc:3.8.0"
71+
}
72+
generateProtoTasks {
73+
all().forEach {
74+
it.builtins{
75+
remove("java")
76+
id("java"){
77+
option("lite")
78+
}
79+
}
80+
}
81+
}
7182
}
7283
sourceSets {
7384
main {

src/main/kotlin/net/lz1998/mirai/entity/WebSocketBotClient.kt

Lines changed: 27 additions & 158 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,22 @@
11
package net.lz1998.mirai.entity
22

3-
import com.google.protobuf.util.JsonFormat
3+
import kotlinx.coroutines.Dispatchers
44
import kotlinx.coroutines.GlobalScope
55
import kotlinx.coroutines.launch
6-
import net.lz1998.mirai.utils.handleApiCall
6+
import kotlinx.coroutines.withContext
7+
import net.lz1998.mirai.utils.*
78
import net.lz1998.mirai.utils.toFrame
89
import net.mamoe.mirai.Bot
910
import net.mamoe.mirai.event.events.BotEvent
1011
import okhttp3.*
1112
import okio.ByteString
1213
import okio.ByteString.Companion.toByteString
13-
import onebot.OnebotApi
1414
import onebot.OnebotFrame
1515
import java.util.concurrent.TimeUnit
1616

1717
class WebsocketBotClient(override var botId: Long, override var password: String, wsUrl: String) : RemoteBot {
1818
override lateinit var bot: Bot
1919

20-
val jsonFormatParser: JsonFormat.Parser = JsonFormat.parser().ignoringUnknownFields()
21-
val jsonFormatPrinter: JsonFormat.Printer = JsonFormat.printer().preservingProtoFieldNames()
2220

2321
private var lastWsConnectTime: Long = 0
2422
private lateinit var wsClient: WebSocket
@@ -35,24 +33,10 @@ class WebsocketBotClient(override var botId: Long, override var password: String
3533
.url(wsUrl)
3634
.build()
3735
private var wsListener: WebSocketListener = object : WebSocketListener() {
38-
override fun onMessage(webSocket: WebSocket, text: String) {
39-
GlobalScope.launch {
40-
val reqBuilder = OnebotFrame.Frame.newBuilder()
41-
jsonFormatParser.merge(text, reqBuilder)
42-
val req = reqBuilder.build()
43-
val resp = onRemoteApi(req)
44-
val respStr = jsonFormatPrinter.print(resp)
45-
val ok = wsClient.send(respStr)
46-
if (!ok) {
47-
wsConnect()
48-
}
49-
50-
}
51-
}
5236

5337
override fun onMessage(webSocket: WebSocket, bytes: ByteString) {
5438
GlobalScope.launch {
55-
val req = OnebotFrame.Frame.parseFrom(bytes.toByteArray())
39+
val req = withContext(Dispatchers.IO) { OnebotFrame.Frame.parseFrom(bytes.toByteArray()) }
5640
val resp = onRemoteApi(req)
5741
val ok = wsClient.send(resp.toByteArray().toByteString())
5842
if (!ok) {
@@ -106,150 +90,35 @@ class WebsocketBotClient(override var botId: Long, override var password: String
10690
}
10791

10892
override suspend fun onRemoteApi(req: OnebotFrame.Frame): OnebotFrame.Frame {
109-
val apiReq = when (req.messageType) {
110-
OnebotFrame.Frame.MessageType.PrivateMessageEvent -> req.privateMessageEvent
111-
OnebotFrame.Frame.MessageType.GroupMessageEvent -> req.groupMessageEvent
112-
OnebotFrame.Frame.MessageType.GroupUploadNoticeEvent -> req.groupUploadNoticeEvent
113-
OnebotFrame.Frame.MessageType.GroupAdminNoticeEvent -> req.groupAdminNoticeEvent
114-
OnebotFrame.Frame.MessageType.GroupDecreaseNoticeEvent -> req.groupDecreaseNoticeEvent
115-
OnebotFrame.Frame.MessageType.GroupIncreaseNoticeEvent -> req.groupIncreaseNoticeEvent
116-
OnebotFrame.Frame.MessageType.GroupBanNoticeEvent -> req.groupBanNoticeEvent
117-
OnebotFrame.Frame.MessageType.FriendAddNoticeEvent -> req.friendAddNoticeEvent
118-
OnebotFrame.Frame.MessageType.GroupRecallNoticeEvent -> req.groupRecallNoticeEvent
119-
OnebotFrame.Frame.MessageType.FriendRecallNoticeEvent -> req.friendRecallNoticeEvent
120-
OnebotFrame.Frame.MessageType.FriendRequestEvent -> req.friendRequestEvent
121-
OnebotFrame.Frame.MessageType.GroupRequestEvent -> req.groupRequestEvent
122-
OnebotFrame.Frame.MessageType.SendPrivateMsgReq -> req.sendPrivateMsgReq
123-
OnebotFrame.Frame.MessageType.SendGroupMsgReq -> req.sendGroupMsgReq
124-
OnebotFrame.Frame.MessageType.SendMsgReq -> req.sendMsgReq
125-
OnebotFrame.Frame.MessageType.DeleteMsgReq -> req.deleteMsgReq
126-
OnebotFrame.Frame.MessageType.GetMsgReq -> req.getMsgReq
127-
OnebotFrame.Frame.MessageType.GetForwardMsgReq -> req.getForwardMsgReq
128-
OnebotFrame.Frame.MessageType.SendLikeReq -> req.sendLikeReq
129-
OnebotFrame.Frame.MessageType.SetGroupKickReq -> req.setGroupKickReq
130-
OnebotFrame.Frame.MessageType.SetGroupBanReq -> req.setGroupBanReq
131-
OnebotFrame.Frame.MessageType.SetGroupAnonymousReq -> req.setGroupAnonymousReq
132-
OnebotFrame.Frame.MessageType.SetGroupWholeBanReq -> req.setGroupWholeBanReq
133-
OnebotFrame.Frame.MessageType.SetGroupAdminReq -> req.setGroupAdminReq
134-
OnebotFrame.Frame.MessageType.SetGroupAnonymousBanReq -> req.setGroupAnonymousBanReq
135-
OnebotFrame.Frame.MessageType.SetGroupCardReq -> req.setGroupCardReq
136-
OnebotFrame.Frame.MessageType.SetGroupNameReq -> req.setGroupNameReq
137-
OnebotFrame.Frame.MessageType.SetGroupLeaveReq -> req.setGroupLeaveReq
138-
OnebotFrame.Frame.MessageType.SetGroupSpecialTitleReq -> req.setGroupSpecialTitleReq
139-
OnebotFrame.Frame.MessageType.SetFriendAddRequestReq -> req.setFriendAddRequestReq
140-
OnebotFrame.Frame.MessageType.SetGroupAddRequestReq -> req.setGroupAddRequestReq
141-
OnebotFrame.Frame.MessageType.GetLoginInfoReq -> req.getLoginInfoReq
142-
OnebotFrame.Frame.MessageType.GetStrangerInfoReq -> req.getStrangerInfoReq
143-
OnebotFrame.Frame.MessageType.GetFriendListReq -> req.getFriendListReq
144-
OnebotFrame.Frame.MessageType.GetGroupInfoReq -> req.getGroupInfoReq
145-
OnebotFrame.Frame.MessageType.GetGroupListReq -> req.getGroupListReq
146-
OnebotFrame.Frame.MessageType.GetGroupMemberInfoReq -> req.getGroupMemberInfoReq
147-
OnebotFrame.Frame.MessageType.GetGroupMemberListReq -> req.getGroupMemberListReq
148-
OnebotFrame.Frame.MessageType.GetGroupHonorInfoReq -> req.getGroupHonorInfoReq
149-
OnebotFrame.Frame.MessageType.GetCookiesReq -> req.getCookiesReq
150-
OnebotFrame.Frame.MessageType.GetCsrfTokenReq -> req.getCsrfTokenReq
151-
OnebotFrame.Frame.MessageType.GetCredentialsReq -> req.getCredentialsReq
152-
OnebotFrame.Frame.MessageType.GetRecordReq -> req.getRecordReq
153-
OnebotFrame.Frame.MessageType.GetImageReq -> req.getImageReq
154-
OnebotFrame.Frame.MessageType.CanSendImageReq -> req.canSendImageReq
155-
OnebotFrame.Frame.MessageType.CanSendRecordReq -> req.canSendRecordReq
156-
OnebotFrame.Frame.MessageType.GetStatusReq -> req.getStatusReq
157-
OnebotFrame.Frame.MessageType.GetVersionInfoReq -> req.getVersionInfoReq
158-
OnebotFrame.Frame.MessageType.SetRestartReq -> req.setRestartReq
159-
OnebotFrame.Frame.MessageType.CleanCacheReq -> req.cleanCacheReq
160-
161-
OnebotFrame.Frame.MessageType.SendPrivateMsgResp -> req.sendPrivateMsgResp
162-
OnebotFrame.Frame.MessageType.SendGroupMsgResp -> req.sendGroupMsgResp
163-
OnebotFrame.Frame.MessageType.SendMsgResp -> req.sendMsgResp
164-
OnebotFrame.Frame.MessageType.DeleteMsgResp -> req.deleteMsgResp
165-
OnebotFrame.Frame.MessageType.GetMsgResp -> req.getMsgResp
166-
OnebotFrame.Frame.MessageType.GetForwardMsgResp -> req.getForwardMsgResp
167-
OnebotFrame.Frame.MessageType.SendLikeResp -> req.sendLikeResp
168-
OnebotFrame.Frame.MessageType.SetGroupKickResp -> req.setGroupKickResp
169-
OnebotFrame.Frame.MessageType.SetGroupBanResp -> req.setGroupBanResp
170-
OnebotFrame.Frame.MessageType.SetGroupAnonymousResp -> req.setGroupAnonymousResp
171-
OnebotFrame.Frame.MessageType.SetGroupWholeBanResp -> req.setGroupWholeBanResp
172-
OnebotFrame.Frame.MessageType.SetGroupAdminResp -> req.setGroupAdminResp
173-
OnebotFrame.Frame.MessageType.SetGroupAnonymousBanResp -> req.setGroupAnonymousBanResp
174-
OnebotFrame.Frame.MessageType.SetGroupCardResp -> req.setGroupCardResp
175-
OnebotFrame.Frame.MessageType.SetGroupNameResp -> req.setGroupNameResp
176-
OnebotFrame.Frame.MessageType.SetGroupLeaveResp -> req.setGroupLeaveResp
177-
OnebotFrame.Frame.MessageType.SetGroupSpecialTitleResp -> req.setGroupSpecialTitleResp
178-
OnebotFrame.Frame.MessageType.SetFriendAddRequestResp -> req.setFriendAddRequestResp
179-
OnebotFrame.Frame.MessageType.SetGroupAddRequestResp -> req.setGroupAddRequestResp
180-
OnebotFrame.Frame.MessageType.GetLoginInfoResp -> req.getLoginInfoResp
181-
OnebotFrame.Frame.MessageType.GetStrangerInfoResp -> req.getStrangerInfoResp
182-
OnebotFrame.Frame.MessageType.GetFriendListResp -> req.getFriendListResp
183-
OnebotFrame.Frame.MessageType.GetGroupInfoResp -> req.getGroupInfoResp
184-
OnebotFrame.Frame.MessageType.GetGroupListResp -> req.getGroupListResp
185-
OnebotFrame.Frame.MessageType.GetGroupMemberInfoResp -> req.getGroupMemberInfoResp
186-
OnebotFrame.Frame.MessageType.GetGroupMemberListResp -> req.getGroupMemberListResp
187-
OnebotFrame.Frame.MessageType.GetGroupHonorInfoResp -> req.getGroupHonorInfoResp
188-
OnebotFrame.Frame.MessageType.GetCookiesResp -> req.getCookiesResp
189-
OnebotFrame.Frame.MessageType.GetCsrfTokenResp -> req.getCsrfTokenResp
190-
OnebotFrame.Frame.MessageType.GetCredentialsResp -> req.getCredentialsResp
191-
OnebotFrame.Frame.MessageType.GetRecordResp -> req.getRecordResp
192-
OnebotFrame.Frame.MessageType.GetImageResp -> req.getImageResp
193-
OnebotFrame.Frame.MessageType.CanSendImageResp -> req.canSendImageResp
194-
OnebotFrame.Frame.MessageType.CanSendRecordResp -> req.canSendRecordResp
195-
OnebotFrame.Frame.MessageType.GetStatusResp -> req.getStatusResp
196-
OnebotFrame.Frame.MessageType.GetVersionInfoResp -> req.getVersionInfoResp
197-
OnebotFrame.Frame.MessageType.SetRestartResp -> req.setRestartResp
198-
OnebotFrame.Frame.MessageType.CleanCacheResp -> req.cleanCacheResp
199-
else -> null
200-
}
201-
val apiResp = apiReq?.let { handleApiCall(bot, it) }
202-
val respFrameBuilder = OnebotFrame.Frame.newBuilder()
203-
respFrameBuilder.echo = req.echo
204-
respFrameBuilder.botId = botId
205-
when (apiResp) {
206-
is OnebotApi.SendPrivateMsgResp -> respFrameBuilder.sendPrivateMsgResp = apiResp
207-
is OnebotApi.SendGroupMsgResp -> respFrameBuilder.sendGroupMsgResp = apiResp
208-
is OnebotApi.SendMsgResp -> respFrameBuilder.sendMsgResp = apiResp
209-
is OnebotApi.DeleteMsgResp -> respFrameBuilder.deleteMsgResp = apiResp
210-
is OnebotApi.GetMsgResp -> respFrameBuilder.getMsgResp = apiResp
211-
is OnebotApi.GetForwardMsgResp -> respFrameBuilder.getForwardMsgResp = apiResp
212-
is OnebotApi.SendLikeResp -> respFrameBuilder.sendLikeResp = apiResp
213-
is OnebotApi.SetGroupKickResp -> respFrameBuilder.setGroupKickResp = apiResp
214-
is OnebotApi.SetGroupBanResp -> respFrameBuilder.setGroupBanResp = apiResp
215-
is OnebotApi.SetGroupAnonymousBanResp -> respFrameBuilder.setGroupAnonymousBanResp = apiResp
216-
is OnebotApi.SetGroupWholeBanResp -> respFrameBuilder.setGroupWholeBanResp = apiResp
217-
is OnebotApi.SetGroupAdminResp -> respFrameBuilder.setGroupAdminResp = apiResp
218-
is OnebotApi.SetGroupAnonymousResp -> respFrameBuilder.setGroupAnonymousResp = apiResp
219-
is OnebotApi.SetGroupCardResp -> respFrameBuilder.setGroupCardResp = apiResp
220-
is OnebotApi.SetGroupNameResp -> respFrameBuilder.setGroupNameResp = apiResp
221-
is OnebotApi.SetGroupLeaveResp -> respFrameBuilder.setGroupLeaveResp = apiResp
222-
is OnebotApi.SetGroupSpecialTitleResp -> respFrameBuilder.setGroupSpecialTitleResp = apiResp
223-
is OnebotApi.SetFriendAddRequestResp -> respFrameBuilder.setFriendAddRequestResp = apiResp
224-
is OnebotApi.SetGroupAddRequestResp -> respFrameBuilder.setGroupAddRequestResp = apiResp
225-
is OnebotApi.GetLoginInfoResp -> respFrameBuilder.getLoginInfoResp = apiResp
226-
is OnebotApi.GetStrangerInfoResp -> respFrameBuilder.getStrangerInfoResp = apiResp
227-
is OnebotApi.GetFriendListResp -> respFrameBuilder.getFriendListResp = apiResp
228-
is OnebotApi.GetGroupInfoResp -> respFrameBuilder.getGroupInfoResp = apiResp
229-
is OnebotApi.GetGroupListResp -> respFrameBuilder.getGroupListResp = apiResp
230-
is OnebotApi.GetGroupMemberInfoResp -> respFrameBuilder.getGroupMemberInfoResp = apiResp
231-
is OnebotApi.GetGroupMemberListResp -> respFrameBuilder.getGroupMemberListResp = apiResp
232-
is OnebotApi.GetGroupHonorInfoResp -> respFrameBuilder.getGroupHonorInfoResp = apiResp
233-
is OnebotApi.GetCookiesResp -> respFrameBuilder.getCookiesResp = apiResp
234-
is OnebotApi.GetCsrfTokenResp -> respFrameBuilder.getCsrfTokenResp = apiResp
235-
is OnebotApi.GetCredentialsResp -> respFrameBuilder.getCredentialsResp = apiResp
236-
is OnebotApi.GetRecordResp -> respFrameBuilder.getRecordResp = apiResp
237-
is OnebotApi.GetImageResp -> respFrameBuilder.getImageResp = apiResp
238-
is OnebotApi.CanSendImageResp -> respFrameBuilder.canSendImageResp = apiResp
239-
is OnebotApi.CanSendRecordResp -> respFrameBuilder.canSendRecordResp = apiResp
240-
is OnebotApi.GetStatusResp -> respFrameBuilder.getStatusResp = apiResp
241-
is OnebotApi.GetVersionInfoResp -> respFrameBuilder.getVersionInfoResp = apiResp
242-
is OnebotApi.SetRestartResp -> respFrameBuilder.setRestartResp = apiResp
243-
is OnebotApi.CleanCacheResp -> respFrameBuilder.cleanCacheResp = apiResp
93+
val respBuilder = OnebotFrame.Frame.newBuilder()
94+
respBuilder.echo = req.echo
95+
respBuilder.botId = botId
96+
when (req.messageType) {
97+
OnebotFrame.Frame.MessageType.SendPrivateMsgReq -> respBuilder.sendPrivateMsgResp = handleSendPrivateMsg(bot, req.sendPrivateMsgReq)
98+
OnebotFrame.Frame.MessageType.SendGroupMsgReq -> respBuilder.sendGroupMsgResp = handleSendGroupMsg(bot, req.sendGroupMsgReq)
99+
OnebotFrame.Frame.MessageType.SendMsgReq -> respBuilder.sendMsgResp = handleSendMsgReq(bot, req.sendMsgReq)
100+
OnebotFrame.Frame.MessageType.DeleteMsgReq -> respBuilder.deleteMsgResp = handleDeleteMsg(bot, req.deleteMsgReq)
101+
OnebotFrame.Frame.MessageType.SetGroupKickReq -> respBuilder.setGroupKickResp = handleSetGroupKick(bot, req.setGroupKickReq)
102+
OnebotFrame.Frame.MessageType.SetGroupBanReq -> respBuilder.setGroupBanResp = handleSetGroupBan(bot, req.setGroupBanReq)
103+
OnebotFrame.Frame.MessageType.SetGroupWholeBanReq -> respBuilder.setGroupWholeBanResp = handleSetGroupWholeBan(bot, req.setGroupWholeBanReq)
104+
OnebotFrame.Frame.MessageType.SetGroupCardReq -> respBuilder.setGroupCardResp = handleSetGroupCard(bot, req.setGroupCardReq)
105+
OnebotFrame.Frame.MessageType.SetGroupNameReq -> respBuilder.setGroupNameResp = handleSetGroupName(bot, req.setGroupNameReq)
106+
OnebotFrame.Frame.MessageType.SetGroupLeaveReq -> respBuilder.setGroupLeaveResp = handleSetGroupLeave(bot, req.setGroupLeaveReq)
107+
OnebotFrame.Frame.MessageType.SetGroupSpecialTitleReq -> respBuilder.setGroupSpecialTitleResp = handleSetGroupSpecialTitle(bot, req.setGroupSpecialTitleReq)
108+
OnebotFrame.Frame.MessageType.GetLoginInfoReq -> respBuilder.getLoginInfoResp = handleGetLoginInfo(bot, req.getLoginInfoReq)
109+
OnebotFrame.Frame.MessageType.GetFriendListReq -> respBuilder.getFriendListResp = handleGetFriendList(bot, req.getFriendListReq)
110+
OnebotFrame.Frame.MessageType.GetGroupInfoReq -> respBuilder.getGroupInfoResp = handleGetGroupInfo(bot, req.getGroupInfoReq)
111+
OnebotFrame.Frame.MessageType.GetGroupListReq -> respBuilder.getGroupListResp = handleGetGroupList(bot, req.getGroupListReq)
112+
OnebotFrame.Frame.MessageType.GetGroupMemberInfoReq -> respBuilder.getGroupMemberInfoResp = handleGetGroupMemberInfo(bot, req.getGroupMemberInfoReq)
113+
OnebotFrame.Frame.MessageType.GetGroupMemberListReq -> respBuilder.getGroupMemberListResp = handleGetGroupMemberList(bot, req.getGroupMemberListReq)
244114
}
245-
return respFrameBuilder.build()
115+
return respBuilder.build()
246116
}
247117

248118
override fun onBotEvent(botEvent: BotEvent) {
249119
val eventFrame = botEvent.toFrame() ?: return
250120
// TODO 写二进制还是json?配置
251-
val eventStr = jsonFormatPrinter.print(eventFrame)
252-
val ok = wsClient.send(eventStr)
121+
val ok = wsClient.send(eventFrame.toByteArray().toByteString())
253122
if (!ok) {
254123
wsConnect()
255124
}

0 commit comments

Comments
 (0)