Commit 9a0092ff authored by Him188's avatar Him188 Committed by Him188moe

Updated packets

parent 70dc6cf6
...@@ -5,6 +5,8 @@ import net.mamoe.mirai.network.packet.ClientPacket; ...@@ -5,6 +5,8 @@ import net.mamoe.mirai.network.packet.ClientPacket;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
/** /**
* Packet 已经 {@link ClientPacket#encode()}, 即将被发送
*
* @author Him188moe * @author Him188moe
*/ */
public final class BeforePacketSendEvent extends ClientPacketEvent implements Cancellable { public final class BeforePacketSendEvent extends ClientPacketEvent implements Cancellable {
......
package net.mamoe.mirai.event.events.network;
import net.mamoe.mirai.network.packet.ClientPacket;
import org.jetbrains.annotations.NotNull;
/**
* Packet 已经发出
*
* @author Him188moe
*/
public final class PacketSentEvent extends ClientPacketEvent {
public PacketSentEvent(@NotNull ClientPacket packet) {
super(packet);
}
}
...@@ -5,6 +5,8 @@ package net.mamoe.mirai.network ...@@ -5,6 +5,8 @@ package net.mamoe.mirai.network
import net.mamoe.mirai.Robot import net.mamoe.mirai.Robot
import net.mamoe.mirai.contact.Group import net.mamoe.mirai.contact.Group
import net.mamoe.mirai.contact.QQ import net.mamoe.mirai.contact.QQ
import net.mamoe.mirai.event.events.network.BeforePacketSendEvent
import net.mamoe.mirai.event.events.network.PacketSentEvent
import net.mamoe.mirai.event.events.network.ServerPacketReceivedEvent import net.mamoe.mirai.event.events.network.ServerPacketReceivedEvent
import net.mamoe.mirai.event.events.qq.FriendMessageEvent import net.mamoe.mirai.event.events.qq.FriendMessageEvent
import net.mamoe.mirai.event.events.robot.RobotLoginSucceedEvent import net.mamoe.mirai.event.events.robot.RobotLoginSucceedEvent
...@@ -197,12 +199,17 @@ class RobotNetworkHandler(private val robot: Robot) : Closeable { ...@@ -197,12 +199,17 @@ class RobotNetworkHandler(private val robot: Robot) : Closeable {
checkNotNull(socket) { "socket closed" } checkNotNull(socket) { "socket closed" }
try { try {
packet.encode() packet.encodePacket()
packet.writeHex(Protocol.tail)
if (BeforePacketSendEvent(packet).broadcast().isCancelled) {
return
}
val data = packet.toByteArray() val data = packet.toByteArray()
socket!!.send(DatagramPacket(data, data.size)) socket!!.send(DatagramPacket(data, data.size))
MiraiLogger info "Packet sent: $packet" MiraiLogger info "Packet sent: $packet"
PacketSentEvent(packet).broadcast()
} catch (e: Throwable) { } catch (e: Throwable) {
e.printStackTrace() e.printStackTrace()
} }
......
...@@ -14,11 +14,13 @@ import java.security.MessageDigest ...@@ -14,11 +14,13 @@ import java.security.MessageDigest
@ExperimentalUnsignedTypes @ExperimentalUnsignedTypes
abstract class ClientPacket : ByteArrayDataOutputStream(), Packet { abstract class ClientPacket : ByteArrayDataOutputStream(), Packet {
@Getter @Getter
val packageId: String val idHex: String
var encoded: Boolean = false
init { init {
val annotation = this.javaClass.getAnnotation(PacketId::class.java) val annotation = this.javaClass.getAnnotation(PacketId::class.java)
packageId = annotation.value idHex = annotation.value
try { try {
this.writeHex(Protocol.head) this.writeHex(Protocol.head)
...@@ -32,7 +34,7 @@ abstract class ClientPacket : ByteArrayDataOutputStream(), Packet { ...@@ -32,7 +34,7 @@ abstract class ClientPacket : ByteArrayDataOutputStream(), Packet {
@Throws(IOException::class) @Throws(IOException::class)
fun writePacketId() { fun writePacketId() {
this.writeHex(this@ClientPacket.packageId) this.writeHex(this@ClientPacket.idHex)
} }
/** /**
...@@ -42,11 +44,19 @@ abstract class ClientPacket : ByteArrayDataOutputStream(), Packet { ...@@ -42,11 +44,19 @@ abstract class ClientPacket : ByteArrayDataOutputStream(), Packet {
* Before sending the packet, a [tail][Protocol.tail] will be added. * Before sending the packet, a [tail][Protocol.tail] will be added.
*/ */
@Throws(IOException::class) @Throws(IOException::class)
abstract fun encode() protected abstract fun encode()
fun encodePacket() {
if (encoded) {
return
}
encode()
writeHex(Protocol.tail)
}
@Throws(IOException::class) @Throws(IOException::class)
fun encodeToByteArray(): ByteArray { fun encodeToByteArray(): ByteArray {
encode() encodePacket()
return toByteArray() return toByteArray()
} }
...@@ -88,24 +98,6 @@ fun DataOutputStream.writeHex(hex: String) { ...@@ -88,24 +98,6 @@ fun DataOutputStream.writeHex(hex: String) {
} }
} }
@ExperimentalUnsignedTypes
fun DataOutputStream.writeVarInt(dec: UInt) {
/*.判断开始 (n < 256)
返回 (取文本右边 (“0” + 取十六进制文本 (n), 2))
.判断 (n ≥ 256)
hex = 取文本右边 (“0” + 取十六进制文本 (n), 4)
返回 (取文本左边 (hex, 2) + “ ” + 取文本右边 (hex, 2))
.默认
返回 (“”)
.判断结束*/
when {
dec < 256u -> this.writeByte(dec.toByte().toInt())//drop other bits
dec > 256u -> this.writeShort(dec.toShort().toInt())
else -> throw IllegalArgumentException(dec.toString())
}
}
fun DataOutputStream.encryptAndWrite(byteArray: ByteArray, key: ByteArray) { fun DataOutputStream.encryptAndWrite(byteArray: ByteArray, key: ByteArray) {
this.write(TEA.encrypt(byteArray, key)) this.write(TEA.encrypt(byteArray, key))
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment