Commit 75352667 authored by Him188moe's avatar Him188moe

update

parent e530720f
......@@ -98,7 +98,8 @@ public class MiraiServer {
Robot robot = new Robot(1994701021, "xiaoqqq");
try {
//System.out.println(Protocol.Companion.getSERVER_IP().toString());
robot.connect("125.39.132.242", 8000);
//robot.connect("127.0.0.1");
robot.connect("125.39.132.242");
} catch (InterruptedException e) {
e.printStackTrace();
System.exit(1);
......
......@@ -3,10 +3,9 @@ package net.mamoe.mirai.network
import io.netty.bootstrap.Bootstrap
import io.netty.channel.*
import io.netty.channel.nio.NioEventLoopGroup
import io.netty.channel.socket.SocketChannel
import io.netty.channel.socket.nio.NioSocketChannel
import io.netty.channel.socket.nio.NioDatagramChannel
import io.netty.handler.codec.MessageToMessageEncoder
import io.netty.handler.codec.bytes.ByteArrayDecoder
import io.netty.handler.codec.bytes.ByteArrayEncoder
import net.mamoe.mirai.network.packet.client.ClientPacket
import net.mamoe.mirai.network.packet.client.login.*
import net.mamoe.mirai.network.packet.client.touch.ClientTouchPacket
......@@ -34,6 +33,7 @@ class Robot(val number: Int, private val password: String) {
private var serverIP: String = ""
set(value) {
serverAddress = InetSocketAddress(value, 8000)
field = value
}
private lateinit var serverAddress: InetSocketAddress;
......@@ -61,7 +61,7 @@ class Robot(val number: Int, private val password: String) {
@ExperimentalUnsignedTypes
private fun onPacketReceived(packet: ServerPacket) {
packet.decode()
println(packet.toString())
println("Packet received: $packet")
when (packet) {
is ServerTouchResponsePacket -> {
if (packet.serverIP != null) {//redirection
......@@ -130,51 +130,43 @@ class Robot(val number: Int, private val password: String) {
}
packet.writeHex(Protocol.tail)
println("Packet sent: $packet")
val p = DatagramPacket(packet.toByteArray());
p.socketAddress = this.serverAddress
channel!!.writeAndFlush(p)
/*val p = DatagramPacket(packet.toByteArray());
p.socketAddress = this.serverAddress*/
channel!!.writeAndFlush(packet.toByteArray())
}
companion object {
private fun DatagramPacket(toByteArray: ByteArray): DatagramPacket = DatagramPacket(toByteArray, toByteArray.size)
}
private fun DatagramPacket(toByteArray: ByteArray): DatagramPacket = DatagramPacket(toByteArray, toByteArray.size, this.serverAddress)
@ExperimentalUnsignedTypes
@Throws(InterruptedException::class)
fun connect(ip: String, port: Int = 8000) {
fun connect(ip: String) {
this.serverIP = ip;
val group = NioEventLoopGroup()
try {
val b = Bootstrap()
b.group(group)
.channel(NioSocketChannel::class.java)
.remoteAddress(InetSocketAddress("0.0.0.0", 62154))
.channel(NioDatagramChannel::class.java)
.option(ChannelOption.SO_BROADCAST, true)
.handler(object : ChannelInitializer<SocketChannel>() {
.handler(object : ChannelInitializer<NioDatagramChannel>() {
@Throws(Exception::class)
override fun initChannel(ch: SocketChannel) {
ch.pipeline().addLast(ByteArrayEncoder())
override fun initChannel(ch: NioDatagramChannel) {
ch.pipeline().addLast(object : MessageToMessageEncoder<ByteArray>() {
override fun encode(ctx: ChannelHandlerContext?, msg: ByteArray?, out: MutableList<Any>?) {
out!!.add(DatagramPacket(msg!!))
}
})
ch.pipeline().addLast(ByteArrayDecoder())
ch.pipeline().addLast(object : SimpleChannelInboundHandler<ByteArray>() {
override fun channelRead0(ctx: ChannelHandlerContext, bytes: ByteArray) {
try {
/*val remaining = Reader.read(bytes);
if (Reader.isPacketAvailable()) {
robot.onPacketReceived(Reader.toServerPacket())
Reader.init()
remaining
}*/
this@Robot.onPacketReceived(ServerPacket.ofByteArray(bytes))
} catch (e: Exception) {
MiraiLogger.catching(e)
}
}
override fun channelActive(ctx: ChannelHandlerContext) {
println("Successfully connected to server")
}
override fun exceptionCaught(ctx: ChannelHandlerContext, cause: Throwable) {
MiraiLogger.catching(cause)
}
......@@ -182,7 +174,7 @@ class Robot(val number: Int, private val password: String) {
}
})
channel = b.connect().sync().channel()
channel = b.bind(15345).sync().channel()
sendPacket(ClientTouchPacket(this@Robot.number, serverIP))
channel!!.closeFuture().sync()
......
......@@ -48,7 +48,7 @@ class ClientTouchPacket(val qq: Int, val serverIp: String) : ClientPacket() {
}
override fun toString(): String {
return this.javaClass.simpleName + this.javaClass.declaredFields.joinToString(", ", "{", "}") { it.name + "=" + it.get(this) }
return this.javaClass.simpleName + this.javaClass.declaredFields.joinToString(", ", "{", "}") { it.trySetAccessible(); it.name + "=" + it.get(this) }
}
}
......
package net.mamoe.mirai.network.packet.server
import net.mamoe.mirai.network.packet.Packet
import net.mamoe.mirai.network.packet.client.toHexString
import net.mamoe.mirai.network.packet.server.login.*
import net.mamoe.mirai.network.packet.server.touch.ServerTouchResponsePacket
import net.mamoe.mirai.network.packet.server.touch.ServerTouchResponsePacketEncrypted
......@@ -16,19 +17,20 @@ abstract class ServerPacket(val input: DataInputStream) : Packet {
companion object {
@ExperimentalUnsignedTypes
fun ofByteArray(bytes: ByteArray): ServerPacket {
println("Raw received: $bytes")
val stream = DataInputStream(bytes.inputStream())
val stream = bytes.dataInputStream()
stream.skipUntil(10)
val idBytes = stream.readUntil(11)
stream.skip(3)
return when (val flag = idBytes.joinToString("") { it.toString(16) }) {
return when (val idBytes = stream.readInt().toHexString(" ")) {
"08 25 31 01" -> ServerTouchResponsePacketEncrypted(ServerTouchResponsePacket.Type.TYPE_08_25_31_01, stream)
"08 25 31 02" -> ServerTouchResponsePacketEncrypted(ServerTouchResponsePacket.Type.TYPE_08_25_31_02, stream)
"08 36 31 03", "08 36 31 04", "08 36 31 05", "08 36 31 06" -> {
when (bytes.size) {
271, 207 -> return ServerLoginResponseResendPacketEncrypted(stream, when (flag) {
271, 207 -> return ServerLoginResponseResendPacketEncrypted(stream, when (idBytes) {
"08 36 31 03" -> ServerLoginResponseResendPacket.Flag.`08 36 31 03`
else -> ServerLoginResponseResendPacket.Flag.OTHER
})
......
......@@ -21,6 +21,6 @@ object MiraiLogger{
private fun print(value:String?){
val s = SimpleDateFormat("MM-dd HH:mm:ss").format(Date())
System.out.println(LoggerTextFormat.BLUE.toString() + "[Mirai] $s : $value")
println(LoggerTextFormat.BLUE.toString() + "[Mirai] $s : $value")
}
}
\ No newline at end of file
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