mirror of
https://github.com/mamoe/mirai.git
synced 2025-02-08 00:12:26 +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>SMARTQQ</b>关停的影响<br>
|
||||
项目处于快速开发阶段<br>
|
||||
由于是学生, 无法每日更新<br>
|
||||
由于是学生, 无法每日更新<del>(24岁 是学生</del><br>
|
||||
一切开发旨在学习, 请勿用于非法用途<br>
|
||||
|
||||
<br>
|
||||
|
@ -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();
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
@ -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