Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
M
Mirai
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
MyCard
Mirai
Commits
7ecfee0a
Commit
7ecfee0a
authored
Aug 17, 2019
by
Him188moe
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/master'
parents
cb56add8
8df21a74
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
54 additions
and
14 deletions
+54
-14
mirai-core/src/main/java/net/mamoe/mirai/event/MiraiEventHook.java
...e/src/main/java/net/mamoe/mirai/event/MiraiEventHook.java
+35
-2
mirai-core/src/main/java/net/mamoe/mirai/event/MiraiEventManager.java
...rc/main/java/net/mamoe/mirai/event/MiraiEventManager.java
+15
-10
mirai-core/src/main/java/net/mamoe/mirai/task/MiraiTaskManager.java
.../src/main/java/net/mamoe/mirai/task/MiraiTaskManager.java
+4
-2
No files found.
mirai-core/src/main/java/net/mamoe/mirai/event/MiraiEventHook.java
View file @
7ecfee0a
package
net.mamoe.mirai.event
;
import
lombok.Getter
;
import
lombok.Setter
;
import
net.mamoe.mirai.event.events.Cancellable
;
import
net.mamoe.mirai.event.events.MiraiEvent
;
import
net.mamoe.mirai.event.events.server.ServerDisableEvent
;
import
java.io.Closeable
;
import
java.io.IOException
;
import
java.util.function.Consumer
;
import
java.util.function.Predicate
;
public
class
MiraiEventHook
<
T
extends
MiraiEvent
>
{
public
class
MiraiEventHook
<
T
extends
MiraiEvent
>
implements
Closeable
{
@Getter
Class
<
T
>
eventClass
;
...
...
@@ -21,6 +25,10 @@ public class MiraiEventHook<T extends MiraiEvent> {
@Getter
private
volatile
boolean
ignoreCancelled
=
true
;
@Getter
@Setter
private
volatile
boolean
mount
=
false
;
/**
* return true -> this hook need to be removed
*/
...
...
@@ -28,7 +36,7 @@ public class MiraiEventHook<T extends MiraiEvent> {
private
Predicate
<
T
>
valid
;
public
MiraiEventHook
(
Class
<
T
>
eventClass
)
{
this
(
eventClass
,
a
->
{}
);
this
(
eventClass
,
null
);
}
public
MiraiEventHook
(
Class
<
T
>
eventClass
,
Consumer
<
T
>
handler
){
...
...
@@ -74,4 +82,29 @@ public class MiraiEventHook<T extends MiraiEvent> {
return
this
.
valid
.
test
((
T
)
event
);
}
/**
* 更加安全高效的方式
* Remember to use {@link this.mount()} at last
* */
public
static
<
D
extends
MiraiEvent
>
MiraiEventHook
<
D
>
onEvent
(
Class
<
D
>
event
){
return
new
MiraiEventHook
<>(
event
);
}
public
void
mount
(){
if
(
this
.
handler
==
null
)
this
.
handler
=
a
->
{};
MiraiEventManager
.
getInstance
().
registerHook
(
this
);
}
public
void
mountOnce
(){
if
(
this
.
handler
==
null
)
this
.
handler
=
a
->
{};
MiraiEventManager
.
getInstance
().
hookOnce
(
this
);
}
@Override
public
void
close
(){
this
.
handler
=
null
;
this
.
valid
=
null
;
}
}
mirai-core/src/main/java/net/mamoe/mirai/event/MiraiEventManager.java
View file @
7ecfee0a
...
...
@@ -26,17 +26,11 @@ public class MiraiEventManager {
private
Map
<
Class
<?
extends
MiraiEvent
>,
List
<
MiraiEventHook
<?
extends
MiraiEvent
>>>
hooks
=
new
HashMap
<>();
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
();
this
.
mountHook
(
hook
.
setValidUntil
(
toRemove
));
}
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
();
this
.
mountHook
(
hook
.
setValidWhile
(
toKeep
));
}
public
<
D
extends
MiraiEvent
>
void
hookOnce
(
MiraiEventHook
<
D
>
hook
){
...
...
@@ -44,15 +38,25 @@ public class MiraiEventManager {
}
public
<
D
extends
MiraiEvent
>
void
registerHook
(
MiraiEventHook
<
D
>
hook
){
this
.
hookUntil
(
hook
,(
a
)
->
false
);
this
.
mountHook
(
hook
);
}
private
<
D
extends
MiraiEvent
>
void
mountHook
(
MiraiEventHook
<
D
>
hook
){
if
(!
hook
.
isMount
())
{
hook
.
setMount
(
true
);
hooksLock
.
lock
();
hooks
.
putIfAbsent
(
hook
.
getEventClass
(),
new
ArrayList
<>());
hooks
.
get
(
hook
.
getEventClass
()).
add
(
hook
);
hooksLock
.
unlock
();
}
}
/**
* 不推荐onEvent
* 非线程安全
*
由于不能保证Hook的原子性
非线程安全
* 不能保证下一个 D event发生时handler就位
* @author NaturalHG Aug27
* use {@link MiraiEventHook::onEvent()} to replace
*/
@Deprecated
...
...
@@ -85,6 +89,7 @@ public class MiraiEventManager {
public
void
boardcastEvent
(
MiraiEvent
event
){
hooksLock
.
lock
();
if
(
hooks
.
containsKey
(
event
.
getClass
())){
...
...
mirai-core/src/main/java/net/mamoe/mirai/task/MiraiTaskManager.java
View file @
7ecfee0a
...
...
@@ -2,6 +2,7 @@ package net.mamoe.mirai.task;
import
net.mamoe.mirai.MiraiServer
;
import
net.mamoe.mirai.event.MiraiEventHook
;
import
net.mamoe.mirai.event.events.server.ServerDisableEvent
;
import
java.util.concurrent.Callable
;
...
...
@@ -26,9 +27,10 @@ public class MiraiTaskManager {
private
MiraiTaskManager
()
{
this
.
pool
=
new
MiraiThreadPool
();
Mirai
Server
.
getInstance
().
getEventManager
()
Mirai
EventHook
.
onEvent
(
ServerDisableEvent
.
class
)
.
setHandler
(
a
->
this
.
pool
.
close
());
.
setHandler
(
a
->
this
.
pool
.
close
())
.
mount
();
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment