Message receiver is working!

This commit is contained in:
Him188moe 2019-09-01 01:02:25 +08:00
parent 680de13f82
commit f61f738daf
6 changed files with 69 additions and 8 deletions

View File

@ -229,6 +229,7 @@ class RobotNetworkHandler(val robot: Robot, val number: Int, private val passwor
is ServerFriendMessageEventPacket -> {
println(packet.toString())
//friend message
}

View File

@ -201,9 +201,9 @@ fun Int.toLByteArray(): ByteArray = byteArrayOf(
@ExperimentalUnsignedTypes
fun Int.toHexString(separator: String = " "): String = this.toByteArray().toUByteArray().toUHexString(separator);
private fun md5(str: String): ByteArray = MessageDigest.getInstance("MD5").digest(str.toByteArray())
internal fun md5(str: String): ByteArray = MessageDigest.getInstance("MD5").digest(str.toByteArray())
private fun md5(byteArray: ByteArray): ByteArray = MessageDigest.getInstance("MD5").digest(byteArray)
internal fun md5(byteArray: ByteArray): ByteArray = MessageDigest.getInstance("MD5").digest(byteArray)
@ExperimentalUnsignedTypes
@Throws(IOException::class)

View File

@ -11,7 +11,7 @@ import java.io.DataInputStream
*/
@PacketId("")//随后写入
@ExperimentalUnsignedTypes
open class ClientMessageResponsePacket(
class ClientMessageResponsePacket(
private val qq: Int,
private val packetIdFromServer: ByteArray,
private val sessionKey: ByteArray,

View File

@ -1,6 +1,6 @@
package net.mamoe.mirai.network.packet
import net.mamoe.mirai.utils.MiraiLogger
import net.mamoe.mirai.util.toUHexString
import java.io.ByteArrayOutputStream
import java.io.DataInputStream
import java.util.zip.GZIPInputStream
@ -136,9 +136,6 @@ class ServerGroupMessageEventPacket(input: DataInputStream, packetId: ByteArray,
}*/
}
}
MiraiLogger info this.toString()
}
}

View File

@ -0,0 +1,54 @@
package net.mamoe.mirai.network.packet.message
import net.mamoe.mirai.network.Protocol
import net.mamoe.mirai.network.packet.*
import net.mamoe.mirai.util.lazyEncode
/**
* @author Him188moe
*/
@PacketId("00 CD")
@ExperimentalUnsignedTypes
class ClientSendFriendMessagePacket(
val qq: Int,
val sessionKey: ByteArray,
val message: String
) : ClientPacket() {
override fun encode() {
this.writeRandom(2)//part of packet id
this.writeQQ(qq)
this.writeHex(Protocol._fixVer)
this.encryptAndWrite(sessionKey) {
it.writeQQ(qq)
it.writeQQ(qq)//that's correct
it.writeHex("00 00 00 08 00 01 00 04 00 00 00 00")
it.writeHex("37 0F")
it.writeQQ(qq)
it.write(md5(lazyEncode { md5Key -> md5Key.writeQQ(qq); md5Key.write(sessionKey) }))
it.writeHex("00 0B")
it.writeRandom(2)
it.writeInt(System.currentTimeMillis().toInt())
it.writeHex("00 00 00 00 00 00 01 00 00 00 01 4D 53 47 00 00 00 00 00")
it.writeInt(System.currentTimeMillis().toInt())
it.writeRandom(4)
it.writeHex("00 00 00 00 09 00 86 00 00 0C E5 BE AE E8 BD AF E9 9B 85 E9 BB 91")
it.writeZero(2)
if ("[face" in message
|| ".gif]" in message
|| ".jpg]" in message
|| ".png]" in message
) {
TODO("复合消息构建")
} else {
//Plain text
this.writeByte(0x01)
this.writeInt(message.length + 3)
this.writeByte(0x01)
this.writeInt(message.length)
this.write(message.toByteArray())
}
}
}
}

View File

@ -1,17 +1,26 @@
package net.mamoe.mirai.network.packet.message
import net.mamoe.mirai.network.packet.ClientPacket
import net.mamoe.mirai.network.packet.PacketId
import net.mamoe.mirai.network.packet.encryptAndWrite
/**
* @author Him188moe
*/
@PacketId("00 CD")
@ExperimentalUnsignedTypes
class ClientFriendMessagePacket(
class ClientSendGroupMessagePacket(
val group: Int,
val qq: Int,
val sessionKey: ByteArray,
val message: String
) : ClientPacket() {
override fun encode() {
TODO()
this.encryptAndWrite(sessionKey) {
// it.write()
}
}
}