TagSessionGroup新增过滤器参数

This commit is contained in:
远方夕阳 2021-09-08 21:46:51 +08:00
parent c9c317d6c8
commit bfa0b5b8ea
3 changed files with 10 additions and 4 deletions

View File

@ -8,10 +8,6 @@
</component>
<component name="ChangeListManager">
<list default="true" id="bed47126-03b3-4370-a6c1-08503492974f" name="Default Changelist" comment="">
<change beforePath="$PROJECT_DIR$/cim-boot-server.iml" beforeDir="false" afterPath="$PROJECT_DIR$/cim-boot-server.iml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/cim-boot-server.ipr" beforeDir="false" afterPath="$PROJECT_DIR$/cim-boot-server.ipr" afterDir="false" />
<change beforePath="$PROJECT_DIR$/cim-boot-server.iws" beforeDir="false" afterPath="$PROJECT_DIR$/cim-boot-server.iws" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/com/farsunset/cim/component/handler/ClosedHandler.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/farsunset/cim/component/handler/ClosedHandler.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/../cim-server-sdk/src/main/java/com/farsunset/cim/sdk/server/group/SessionGroup.java" beforeDir="false" afterPath="$PROJECT_DIR$/../cim-server-sdk/src/main/java/com/farsunset/cim/sdk/server/group/SessionGroup.java" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
@ -149,6 +145,7 @@
<workItem from="1621948445182" duration="764000" />
<workItem from="1621956423905" duration="116000" />
<workItem from="1622640308758" duration="60000" />
<workItem from="1623163801922" duration="23000" />
</task>
<servers />
</component>

View File

@ -10,6 +10,7 @@ import io.netty.channel.ChannelFutureListener;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.function.Predicate;
import java.util.stream.Collectors;
public class SessionGroup extends ConcurrentHashMap<String, Collection<Channel>> {
@ -71,6 +72,14 @@ public class SessionGroup extends ConcurrentHashMap<String, Collection<Channel>>
find(key).forEach(channel -> channel.writeAndFlush(message));
}
public void write(String key, Message message, Predicate<Channel> matcher){
find(key).stream().filter(matcher).forEach(channel -> channel.writeAndFlush(message));
}
public void write(Message message){
this.write(message.getReceiver(),message);
}
public Collection<Channel> find(String key){
return this.getOrDefault(key,EMPTY_LIST);
}