Skip to main content

t-io给群组成员内置排序

实现比较器Comparator

package xxx;

import java.util.Comparator;
import java.util.Objects;
import java.util.Set;
import java.util.TreeSet;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.tio.core.ChannelContext;


import cn.hutool.core.util.StrUtil;

/**
* @author tanyaowu
*
*/
public class ChannelContextComparator implements Comparator<ChannelContext> {
@SuppressWarnings("unused")
private static Logger log = LoggerFactory.getLogger(ChannelContextComparator.class);

public static final ChannelContextComparator me = new ChannelContextComparator();

/**
*
*/
private ChannelContextComparator() {
}

/**
* o2在前面请返回1
* o1在前面请返回-1
*/
@Override
public int compare(ChannelContext o1, ChannelContext o2) {
return compareWhenEqual(o1, o2);
}

/**
* 当都为游客或为同一个用户时
* o2在前面请返回1
* o1在前面请返回-1
*/
private int compareWhenEqual(ChannelContext o1, ChannelContext o2) {
if (o2.stat.timeCreated > o1.stat.timeCreated) {//后进的在前面(2在前面 )
return 1;
} else if (o2.stat.timeCreated < o1.stat.timeCreated) {//后进的在前面(1在前面 )
return -1;
} else {
String cid1 = o1.getId();
String cid2 = o2.getId();
int ret = StrUtil.compare(cid1, cid2, false);//cid1.compareTo(cid2);
return ret;
}
}


}

初始化时,设置一下上面实现的比较器

serverTioConfig.groups.setChannelContextComparator(ChannelContextComparator.me);

收功

这样做了后,群组里的元素就是有序放置的,这个对于IM中的群聊非常有用,牛吧云播上帝视角的观众在线列表,其排序就是用t-io内置的,性能非常好,更重要的是只要你的排序算法没问题,就不会出现资源释放不了的情况!