mirror of
https://github.com/mamoe/mirai.git
synced 2025-02-12 18:50:20 +08:00
Merge remote-tracking branch 'origin/master'
This commit is contained in:
commit
45416ee4ae
@ -3,7 +3,7 @@
|
|||||||
一个以<b>TIM QQ协议</b>驱动的JAVA(+Kotlin) <b>全开源</b> QQ机器人服务端核心<br>
|
一个以<b>TIM QQ协议</b>驱动的JAVA(+Kotlin) <b>全开源</b> QQ机器人服务端核心<br>
|
||||||
不受由于<b>SMARTQQ</b>关停的影响<br>
|
不受由于<b>SMARTQQ</b>关停的影响<br>
|
||||||
项目处于快速开发阶段<br>
|
项目处于快速开发阶段<br>
|
||||||
由于是学生, 无法每日更新<br>
|
由于是学生, 无法每日更新<del>(24岁 是学生</del><br>
|
||||||
一切开发旨在学习, 请勿用于非法用途<br>
|
一切开发旨在学习, 请勿用于非法用途<br>
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
|
@ -9,6 +9,7 @@ import net.mamoe.mirai.network.Protocol;
|
|||||||
import net.mamoe.mirai.network.Robot;
|
import net.mamoe.mirai.network.Robot;
|
||||||
import net.mamoe.mirai.task.MiraiTaskManager;
|
import net.mamoe.mirai.task.MiraiTaskManager;
|
||||||
import net.mamoe.mirai.utils.LoggerTextFormat;
|
import net.mamoe.mirai.utils.LoggerTextFormat;
|
||||||
|
import net.mamoe.mirai.utils.MiraiLogger;
|
||||||
import net.mamoe.mirai.utils.config.MiraiConfig;
|
import net.mamoe.mirai.utils.config.MiraiConfig;
|
||||||
import net.mamoe.mirai.utils.config.MiraiMapSection;
|
import net.mamoe.mirai.utils.config.MiraiMapSection;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
@ -17,7 +18,6 @@ import java.io.File;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Scanner;
|
import java.util.Scanner;
|
||||||
|
|
||||||
@Log4j2
|
|
||||||
public class MiraiServer {
|
public class MiraiServer {
|
||||||
@Getter
|
@Getter
|
||||||
private static MiraiServer instance;
|
private static MiraiServer instance;
|
||||||
@ -40,11 +40,11 @@ public class MiraiServer {
|
|||||||
@Getter
|
@Getter
|
||||||
MiraiTaskManager taskManager;
|
MiraiTaskManager taskManager;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
MiraiLogger logger;
|
||||||
|
|
||||||
MiraiConfig setting;
|
MiraiConfig setting;
|
||||||
|
|
||||||
public static Logger getLogger() {
|
|
||||||
return log;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected MiraiServer(){
|
protected MiraiServer(){
|
||||||
instance = this;
|
instance = this;
|
||||||
@ -60,6 +60,7 @@ public class MiraiServer {
|
|||||||
this.getEventManager().boardcastEvent(new ServerDisableEvent());
|
this.getEventManager().boardcastEvent(new ServerDisableEvent());
|
||||||
getLogger().info(LoggerTextFormat.SKY_BLUE + "Data have been saved");
|
getLogger().info(LoggerTextFormat.SKY_BLUE + "Data have been saved");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -67,6 +68,7 @@ public class MiraiServer {
|
|||||||
this.parentFolder = new File(System.getProperty("user.dir"));
|
this.parentFolder = new File(System.getProperty("user.dir"));
|
||||||
this.unix = !System.getProperties().getProperty("os.name").toUpperCase().contains("WINDOWS");
|
this.unix = !System.getProperties().getProperty("os.name").toUpperCase().contains("WINDOWS");
|
||||||
|
|
||||||
|
this.logger = MiraiLogger.INSTANCE;
|
||||||
this.eventManager = MiraiEventManager.getInstance();
|
this.eventManager = MiraiEventManager.getInstance();
|
||||||
this.taskManager = MiraiTaskManager.getInstance();
|
this.taskManager = MiraiTaskManager.getInstance();
|
||||||
|
|
||||||
|
@ -25,49 +25,61 @@ public class MiraiEventManager {
|
|||||||
Lock hooksLock = new ReentrantLock();
|
Lock hooksLock = new ReentrantLock();
|
||||||
private Map<Class<? extends MiraiEvent>, List<MiraiEventHook<? extends MiraiEvent>>> hooks = new HashMap<>();
|
private Map<Class<? extends MiraiEvent>, List<MiraiEventHook<? extends MiraiEvent>>> hooks = new HashMap<>();
|
||||||
|
|
||||||
public <D extends MiraiEvent> void registerUntil(MiraiEventHook<D> hook, Predicate<D> toRemove){
|
public <D extends MiraiEvent> void hookUntil(MiraiEventHook<D> hook, Predicate<D> toRemove){
|
||||||
hooksLock.lock();
|
hooksLock.lock();
|
||||||
hooks.putIfAbsent(hook.getEventClass(),new ArrayList<>());
|
hooks.putIfAbsent(hook.getEventClass(),new ArrayList<>());
|
||||||
hooks.get(hook.getEventClass()).add(hook.setValidUntil(toRemove));
|
hooks.get(hook.getEventClass()).add(hook.setValidUntil(toRemove));
|
||||||
hooksLock.unlock();
|
hooksLock.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
public <D extends MiraiEvent> void registerWhile(MiraiEventHook<D> hook, Predicate<D> toKeep){
|
public <D extends MiraiEvent> void hookWhile(MiraiEventHook<D> hook, Predicate<D> toKeep){
|
||||||
hooksLock.lock();
|
hooksLock.lock();
|
||||||
hooks.putIfAbsent(hook.getEventClass(),new ArrayList<>());
|
hooks.putIfAbsent(hook.getEventClass(),new ArrayList<>());
|
||||||
hooks.get(hook.getEventClass()).add(hook.setValidWhile(toKeep));
|
hooks.get(hook.getEventClass()).add(hook.setValidWhile(toKeep));
|
||||||
hooksLock.unlock();
|
hooksLock.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
public <D extends MiraiEvent> void registerOnce(MiraiEventHook<D> hook){
|
public <D extends MiraiEvent> void hookOnce(MiraiEventHook<D> hook){
|
||||||
this.registerUntil(hook,(a) -> true);
|
this.hookUntil(hook,(a) -> true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public <D extends MiraiEvent> void register(MiraiEventHook<D> hook){
|
public <D extends MiraiEvent> void registerHook(MiraiEventHook<D> hook){
|
||||||
this.registerUntil(hook,(a) -> false);
|
this.hookUntil(hook,(a) -> false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 不推荐onEvent
|
||||||
|
* 非线程安全
|
||||||
|
* 不能保证下一个 D event发生时handler就位
|
||||||
|
* @author NaturalHG Aug27
|
||||||
|
*/
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
public <D extends MiraiEvent> MiraiEventHook<D> onEvent(Class<D> event){
|
public <D extends MiraiEvent> MiraiEventHook<D> onEvent(Class<D> event){
|
||||||
MiraiEventHook<D> hook = new MiraiEventHook<>(event);
|
MiraiEventHook<D> hook = new MiraiEventHook<>(event);
|
||||||
this.register(hook);
|
this.registerHook(hook);
|
||||||
return hook;
|
return hook;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
public <D extends MiraiEvent> MiraiEventHook<D> onEventOnce(Class<D> event){
|
public <D extends MiraiEvent> MiraiEventHook<D> onEventOnce(Class<D> event){
|
||||||
MiraiEventHook<D> hook = new MiraiEventHook<>(event);
|
MiraiEventHook<D> hook = new MiraiEventHook<>(event);
|
||||||
this.registerOnce(hook);
|
this.hookOnce(hook);
|
||||||
return hook;
|
return hook;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
public <D extends MiraiEvent> MiraiEventHook<D> onEventUntil(Class<D> event, Predicate<D> toRemove){
|
public <D extends MiraiEvent> MiraiEventHook<D> onEventUntil(Class<D> event, Predicate<D> toRemove){
|
||||||
MiraiEventHook<D> hook = new MiraiEventHook<>(event);
|
MiraiEventHook<D> hook = new MiraiEventHook<>(event);
|
||||||
this.registerUntil(hook,toRemove);
|
this.hookUntil(hook,toRemove);
|
||||||
return hook;
|
return hook;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
public <D extends MiraiEvent> MiraiEventHook<D> onEventWhile(Class<D> event, Predicate<D> toKeep){
|
public <D extends MiraiEvent> MiraiEventHook<D> onEventWhile(Class<D> event, Predicate<D> toKeep){
|
||||||
MiraiEventHook<D> hook = new MiraiEventHook<>(event);
|
MiraiEventHook<D> hook = new MiraiEventHook<>(event);
|
||||||
this.registerWhile(hook,toKeep);
|
this.hookWhile(hook,toKeep);
|
||||||
return hook;
|
return hook;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -14,6 +14,7 @@ import net.mamoe.mirai.network.packet.Packet
|
|||||||
import net.mamoe.mirai.network.packet.client.Client0825ResponsePacket
|
import net.mamoe.mirai.network.packet.client.Client0825ResponsePacket
|
||||||
import net.mamoe.mirai.network.packet.server.Server0825Packet
|
import net.mamoe.mirai.network.packet.server.Server0825Packet
|
||||||
import net.mamoe.mirai.network.packet.server.ServerPacket
|
import net.mamoe.mirai.network.packet.server.ServerPacket
|
||||||
|
import net.mamoe.mirai.utils.MiraiLogger
|
||||||
import java.net.InetSocketAddress
|
import java.net.InetSocketAddress
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -22,7 +23,7 @@ import java.net.InetSocketAddress
|
|||||||
* @author Him188moe @ Mirai Project
|
* @author Him188moe @ Mirai Project
|
||||||
*/
|
*/
|
||||||
class Robot(val number: Long) {
|
class Robot(val number: Long) {
|
||||||
private lateinit var ctx: ChannelHandlerContext;
|
private lateinit var ctx: ChannelHandlerContext
|
||||||
|
|
||||||
internal fun onPacketReceived(packet: Packet) {
|
internal fun onPacketReceived(packet: Packet) {
|
||||||
if (packet !is ServerPacket) {
|
if (packet !is ServerPacket) {
|
||||||
@ -56,7 +57,7 @@ class Robot(val number: Long) {
|
|||||||
ch.pipeline().addLast(object : SimpleChannelInboundHandler<ByteArray>() {
|
ch.pipeline().addLast(object : SimpleChannelInboundHandler<ByteArray>() {
|
||||||
override fun channelRead0(ctx: ChannelHandlerContext, bytes: ByteArray) {
|
override fun channelRead0(ctx: ChannelHandlerContext, bytes: ByteArray) {
|
||||||
try {
|
try {
|
||||||
this@Robot.ctx = ctx;
|
this@Robot.ctx = ctx
|
||||||
/*val remaining = Reader.read(bytes);
|
/*val remaining = Reader.read(bytes);
|
||||||
if (Reader.isPacketAvailable()) {
|
if (Reader.isPacketAvailable()) {
|
||||||
robot.onPacketReceived(Reader.toServerPacket())
|
robot.onPacketReceived(Reader.toServerPacket())
|
||||||
@ -65,7 +66,7 @@ class Robot(val number: Long) {
|
|||||||
}*/
|
}*/
|
||||||
this@Robot.onPacketReceived(ServerPacket.ofByteArray(bytes))
|
this@Robot.onPacketReceived(ServerPacket.ofByteArray(bytes))
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
MiraiServer.getLogger().catching(e)
|
MiraiLogger.catching(e)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -74,7 +75,7 @@ class Robot(val number: Long) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun exceptionCaught(ctx: ChannelHandlerContext, cause: Throwable) {
|
override fun exceptionCaught(ctx: ChannelHandlerContext, cause: Throwable) {
|
||||||
MiraiServer.getLogger().catching(cause)
|
MiraiLogger.catching(cause)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -102,10 +103,10 @@ class Robot(val number: Long) {
|
|||||||
*/
|
*/
|
||||||
fun read(bytes: ByteArray): ByteArray? {
|
fun read(bytes: ByteArray): ByteArray? {
|
||||||
checkNotNull(this.length)
|
checkNotNull(this.length)
|
||||||
val needSize = length!! - this.bytes.size;//How many bytes we need
|
val needSize = length!! - this.bytes.size//How many bytes we need
|
||||||
if (needSize == bytes.size || needSize > bytes.size) {
|
if (needSize == bytes.size || needSize > bytes.size) {
|
||||||
this.bytes += bytes
|
this.bytes += bytes
|
||||||
return null;
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
//We got more than we need
|
//We got more than we need
|
||||||
|
@ -0,0 +1,24 @@
|
|||||||
|
package net.mamoe.mirai.utils
|
||||||
|
|
||||||
|
import java.text.SimpleDateFormat
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
|
/**
|
||||||
|
* used to replace old logger
|
||||||
|
*/
|
||||||
|
object MiraiLogger{
|
||||||
|
fun info(o: Any) {
|
||||||
|
this.print(o.toString())
|
||||||
|
}
|
||||||
|
|
||||||
|
fun catching(e:Throwable){
|
||||||
|
this.print(e.message)
|
||||||
|
this.print(e.localizedMessage)
|
||||||
|
this.print(e.cause.toString())
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun print(value:String?){
|
||||||
|
val s = SimpleDateFormat("MM-dd HH:mm:ss").format(Date())
|
||||||
|
System.out.println(LoggerTextFormat.BLUE.toString() + "[Mirai] $s : $value")
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user