Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
M
Mirai
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
MyCard
Mirai
Commits
d1cc2710
Commit
d1cc2710
authored
Sep 30, 2019
by
Him188
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Improved temporary packet handlers
parent
738c7675
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
28 additions
and
19 deletions
+28
-19
mirai-core/src/main/java/net/mamoe/mirai/message/defaults/UnsolvedImage.kt
...in/java/net/mamoe/mirai/message/defaults/UnsolvedImage.kt
+7
-3
mirai-core/src/main/java/net/mamoe/mirai/network/BotNetworkHandler.kt
...rc/main/java/net/mamoe/mirai/network/BotNetworkHandler.kt
+2
-3
mirai-core/src/main/java/net/mamoe/mirai/network/LoginSession.kt
...ore/src/main/java/net/mamoe/mirai/network/LoginSession.kt
+4
-9
mirai-core/src/main/java/net/mamoe/mirai/network/protocol/tim/TIMBotNetworkHandler.kt
.../mamoe/mirai/network/protocol/tim/TIMBotNetworkHandler.kt
+0
-1
mirai-core/src/main/java/net/mamoe/mirai/network/protocol/tim/handler/TemporaryPacketHandler.kt
...ai/network/protocol/tim/handler/TemporaryPacketHandler.kt
+15
-3
No files found.
mirai-core/src/main/java/net/mamoe/mirai/message/defaults/UnsolvedImage.kt
View file @
d1cc2710
package
net.mamoe.mirai.message.defaults
import
kotlinx.coroutines.Dispatchers
import
kotlinx.coroutines.withContext
import
net.mamoe.mirai.contact.Contact
import
net.mamoe.mirai.network.LoginSession
import
net.mamoe.mirai.network.protocol.tim.packet.image.ClientTryGetImageIDPacket
...
...
@@ -30,7 +32,7 @@ class UnsolvedImage(filename: String, val image: BufferedImage) : Image(getImage
return
session
.
expectPacket
<
ServerTryGetImageIDResponsePacket
>
{
toSend
{
ClientTryGetImageIDPacket
(
session
.
bot
.
account
.
qqNumber
,
session
.
sessionKey
,
contact
.
number
,
image
)
}
e
xpect
{
onE
xpect
{
when
(
it
)
{
is
ServerTryGetImageIDFailedPacket
->
{
//已经存在于服务器了
...
...
@@ -38,6 +40,7 @@ class UnsolvedImage(filename: String, val image: BufferedImage) : Image(getImage
is
ServerTryGetImageIDSuccessPacket
->
{
val
data
=
image
.
toByteArray
()
withContext
(
Dispatchers
.
IO
)
{
if
(!
ImageNetworkUtils
.
postImage
(
it
.
uKey
.
toUHexString
(),
data
.
size
,
session
.
bot
.
account
.
qqNumber
,
contact
.
number
,
data
))
{
throw
RuntimeException
(
"cannot upload image"
)
}
...
...
@@ -46,6 +49,7 @@ class UnsolvedImage(filename: String, val image: BufferedImage) : Image(getImage
}
}
}
}
companion
object
{
...
...
mirai-core/src/main/java/net/mamoe/mirai/network/BotNetworkHandler.kt
View file @
d1cc2710
...
...
@@ -6,7 +6,6 @@ import net.mamoe.mirai.network.protocol.tim.handler.ActionPacketHandler
import
net.mamoe.mirai.network.protocol.tim.handler.DataPacketSocket
import
net.mamoe.mirai.network.protocol.tim.handler.MessagePacketHandler
import
net.mamoe.mirai.network.protocol.tim.handler.TemporaryPacketHandler
import
net.mamoe.mirai.network.protocol.tim.internal.handler.*
import
net.mamoe.mirai.network.protocol.tim.packet.ClientPacket
import
net.mamoe.mirai.network.protocol.tim.packet.Packet
import
net.mamoe.mirai.network.protocol.tim.packet.ServerEventPacket
...
...
@@ -46,14 +45,14 @@ interface BotNetworkHandler : Closeable {
*
* java 调用方式: `botNetWorkHandler.getMessage()`
*/
va
r
message
:
MessagePacketHandler
va
l
message
:
MessagePacketHandler
/**
* 动作处理. 如发送好友请求, 处理别人发来的好友请求等
*
* java 调用方式: `botNetWorkHandler.getAction()`
*/
va
r
action
:
ActionPacketHandler
va
l
action
:
ActionPacketHandler
fun
tryLogin
(
touchingTimeoutMillis
:
Long
=
200
):
CompletableFuture
<
LoginState
>
...
...
mirai-core/src/main/java/net/mamoe/mirai/network/LoginSession.kt
View file @
d1cc2710
...
...
@@ -42,13 +42,12 @@ class LoginSession(
/**
* 发送一个数据包, 并期待接受一个特定的 [ServerPacket].
* 发送成功后, 该方法会等待收到 [ServerPacket] 直到超时.
*
* 实现方法:
* ```kotlin
* session.expectPacket<ServerPacketXXX> {
* toSend { ClientPacketXXX(...) }
*
e
xpect {//it: ServerPacketXXX
*
onE
xpect {//it: ServerPacketXXX
*
* }
* }
...
...
@@ -57,8 +56,6 @@ class LoginSession(
* @param P 期待的包
* @param handlerTemporary 处理器.
* @return future. 可进行超时处理
*
* Kotlin DSL: 仅 Kotlin 使用.
*/
@JvmSynthetic
inline
fun
<
reified
P
:
ServerPacket
>
expectPacket
(
handlerTemporary
:
TemporaryPacketHandler
<
P
>.()
->
Unit
):
CompletableFuture
<
Unit
>
{
...
...
@@ -83,15 +80,13 @@ class LoginSession(
* @param toSend 将要发送的包
* @param handler 处理期待的包
* @return future. 可进行超时处理
*
* Kotlin DSL: 仅 Kotlin 使用.
*/
@JvmSynthetic
inline
fun
<
reified
P
:
ServerPacket
>
expectPacket
(
toSend
:
ClientPacket
,
noinline
handler
:
(
P
)
->
Unit
):
CompletableFuture
<
Unit
>
{
inline
fun
<
reified
P
:
ServerPacket
>
expectPacket
(
toSend
:
ClientPacket
,
noinline
handler
:
suspend
(
P
)
->
Unit
):
CompletableFuture
<
Unit
>
{
val
future
=
CompletableFuture
<
Unit
>()
this
.
bot
.
network
.
addHandler
(
TemporaryPacketHandler
(
P
::
class
,
future
,
this
).
also
{
it
.
toSend
{
toSend
}
it
.
e
xpect
(
handler
)
it
.
toSend
(
toSend
)
it
.
onE
xpect
(
handler
)
})
return
future
}
...
...
mirai-core/src/main/java/net/mamoe/mirai/network/protocol/tim/TIMBotNetworkHandler.kt
View file @
d1cc2710
...
...
@@ -10,7 +10,6 @@ import net.mamoe.mirai.network.BotNetworkHandler
import
net.mamoe.mirai.network.LoginSession
import
net.mamoe.mirai.network.NetworkScope
import
net.mamoe.mirai.network.protocol.tim.handler.*
import
net.mamoe.mirai.network.protocol.tim.internal.handler.*
import
net.mamoe.mirai.network.protocol.tim.packet.*
import
net.mamoe.mirai.network.protocol.tim.packet.login.*
import
net.mamoe.mirai.task.MiraiThreadPool
...
...
mirai-core/src/main/java/net/mamoe/mirai/network/protocol/tim/handler/TemporaryPacketHandler.kt
View file @
d1cc2710
...
...
@@ -8,6 +8,14 @@ import kotlin.reflect.KClass
/**
* 临时数据包处理器
* ```kotlin
* session.addHandler<ClientTouchResponsePacket>{
* toSend { ClientTouchPacket() }
* onExpect {//it: ClientTouchResponsePacket
* //do sth.
* }
* }
* ```
*
* @see LoginSession.expectPacket
*/
...
...
@@ -18,7 +26,7 @@ open class TemporaryPacketHandler<P : ServerPacket>(
)
{
private
lateinit
var
toSend
:
ClientPacket
private
lateinit
var
expect
:
(
P
)
->
Unit
private
lateinit
var
expect
:
suspend
(
P
)
->
Unit
lateinit
var
session
:
LoginSession
//无需覆盖
...
...
@@ -27,8 +35,12 @@ open class TemporaryPacketHandler<P : ServerPacket>(
this
.
toSend
=
packet
()
}
fun
toSend
(
packet
:
ClientPacket
)
{
this
.
toSend
=
packet
}
fun
expect
(
handler
:
(
P
)
->
Unit
)
{
fun
onExpect
(
handler
:
suspend
(
P
)
->
Unit
)
{
this
.
expect
=
handler
}
...
...
@@ -37,7 +49,7 @@ open class TemporaryPacketHandler<P : ServerPacket>(
session
.
socket
.
sendPacket
(
toSend
)
}
fun
onPacketReceived
(
session
:
LoginSession
,
packet
:
ServerPacket
):
Boolean
{
suspend
fun
onPacketReceived
(
session
:
LoginSession
,
packet
:
ServerPacket
):
Boolean
{
if
(
expectationClass
.
isInstance
(
packet
)
&&
session
===
this
.
fromSession
)
{
@Suppress
(
"UNCHECKED_CAST"
)
expect
(
packet
as
P
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment