Merge remote-tracking branch 'origin/master'

This commit is contained in:
Him188moe 2019-08-17 15:44:37 +08:00
commit 45416ee4ae
5 changed files with 60 additions and 21 deletions

View File

@ -3,7 +3,7 @@
一个以<b>TIM QQ协议</b>驱动的JAVA(+Kotlin) <b>全开源</b> QQ机器人服务端核心<br>
不受由于<b>SMARTQQ</b>关停的影响<br>
项目处于快速开发阶段<br>
由于是学生, 无法每日更新<br>
由于是学生, 无法每日更新<del>(24岁 是学生</del><br>
一切开发旨在学习, 请勿用于非法用途<br>
<br>

View File

@ -9,6 +9,7 @@ import net.mamoe.mirai.network.Protocol;
import net.mamoe.mirai.network.Robot;
import net.mamoe.mirai.task.MiraiTaskManager;
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.MiraiMapSection;
import org.apache.logging.log4j.Logger;
@ -17,7 +18,6 @@ import java.io.File;
import java.io.IOException;
import java.util.Scanner;
@Log4j2
public class MiraiServer {
@Getter
private static MiraiServer instance;
@ -40,11 +40,11 @@ public class MiraiServer {
@Getter
MiraiTaskManager taskManager;
@Getter
MiraiLogger logger;
MiraiConfig setting;
public static Logger getLogger() {
return log;
}
protected MiraiServer(){
instance = this;
@ -60,6 +60,7 @@ public class MiraiServer {
this.getEventManager().boardcastEvent(new ServerDisableEvent());
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.unix = !System.getProperties().getProperty("os.name").toUpperCase().contains("WINDOWS");
this.logger = MiraiLogger.INSTANCE;
this.eventManager = MiraiEventManager.getInstance();
this.taskManager = MiraiTaskManager.getInstance();

View File

@ -25,49 +25,61 @@ public class MiraiEventManager {
Lock hooksLock = new ReentrantLock();
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();
hooks.putIfAbsent(hook.getEventClass(),new ArrayList<>());
hooks.get(hook.getEventClass()).add(hook.setValidUntil(toRemove));
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();
hooks.putIfAbsent(hook.getEventClass(),new ArrayList<>());
hooks.get(hook.getEventClass()).add(hook.setValidWhile(toKeep));
hooksLock.unlock();
}
public <D extends MiraiEvent> void registerOnce(MiraiEventHook<D> hook){
this.registerUntil(hook,(a) -> true);
public <D extends MiraiEvent> void hookOnce(MiraiEventHook<D> hook){
this.hookUntil(hook,(a) -> true);
}
public <D extends MiraiEvent> void register(MiraiEventHook<D> hook){
this.registerUntil(hook,(a) -> false);
public <D extends MiraiEvent> void registerHook(MiraiEventHook<D> hook){
this.hookUntil(hook,(a) -> false);
}
/**
* 不推荐onEvent
* 非线程安全
* 不能保证下一个 D event发生时handler就位
* @author NaturalHG Aug27
*/
@Deprecated
public <D extends MiraiEvent> MiraiEventHook<D> onEvent(Class<D> event){
MiraiEventHook<D> hook = new MiraiEventHook<>(event);
this.register(hook);
this.registerHook(hook);
return hook;
}
@Deprecated
public <D extends MiraiEvent> MiraiEventHook<D> onEventOnce(Class<D> event){
MiraiEventHook<D> hook = new MiraiEventHook<>(event);
this.registerOnce(hook);
this.hookOnce(hook);
return hook;
}
@Deprecated
public <D extends MiraiEvent> MiraiEventHook<D> onEventUntil(Class<D> event, Predicate<D> toRemove){
MiraiEventHook<D> hook = new MiraiEventHook<>(event);
this.registerUntil(hook,toRemove);
this.hookUntil(hook,toRemove);
return hook;
}
@Deprecated
public <D extends MiraiEvent> MiraiEventHook<D> onEventWhile(Class<D> event, Predicate<D> toKeep){
MiraiEventHook<D> hook = new MiraiEventHook<>(event);
this.registerWhile(hook,toKeep);
this.hookWhile(hook,toKeep);
return hook;
}

View File

@ -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.server.Server0825Packet
import net.mamoe.mirai.network.packet.server.ServerPacket
import net.mamoe.mirai.utils.MiraiLogger
import java.net.InetSocketAddress
/**
@ -22,7 +23,7 @@ import java.net.InetSocketAddress
* @author Him188moe @ Mirai Project
*/
class Robot(val number: Long) {
private lateinit var ctx: ChannelHandlerContext;
private lateinit var ctx: ChannelHandlerContext
internal fun onPacketReceived(packet: Packet) {
if (packet !is ServerPacket) {
@ -56,7 +57,7 @@ class Robot(val number: Long) {
ch.pipeline().addLast(object : SimpleChannelInboundHandler<ByteArray>() {
override fun channelRead0(ctx: ChannelHandlerContext, bytes: ByteArray) {
try {
this@Robot.ctx = ctx;
this@Robot.ctx = ctx
/*val remaining = Reader.read(bytes);
if (Reader.isPacketAvailable()) {
robot.onPacketReceived(Reader.toServerPacket())
@ -65,7 +66,7 @@ class Robot(val number: Long) {
}*/
this@Robot.onPacketReceived(ServerPacket.ofByteArray(bytes))
} 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) {
MiraiServer.getLogger().catching(cause)
MiraiLogger.catching(cause)
}
})
}
@ -102,10 +103,10 @@ class Robot(val number: Long) {
*/
fun read(bytes: ByteArray): ByteArray? {
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) {
this.bytes += bytes
return null;
return null
}
//We got more than we need

View File

@ -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")
}
}