实现用户广播的功能:
MyHttpServer.java:
import java.io.IOException;
import java.net.InetAddress;import java.net.InetSocketAddress;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MyHttpServer {
private static int port = 8001;
private static NioSocketAcceptor nioSocketAcceptor = null;
private static Logger LOGGER = null;
public static void init() {
nioSocketAcceptor = new NioSocketAcceptor();
LOGGER = LoggerFactory.getLogger(MyHttpServer.class);
}
public static void connection() {
try {
nioSocketAcceptor.bind(new InetSocketAddress(port));
System.out.println("服务器已经启动!");
} catch (IOException e) {
e.printStackTrace();
}
}
public static void addLoggingFiter(){
nioSocketAcceptor.getFilterChain().addLast("logging",new LoggingFilter());
}
public static void addTextFilter() {
nioSocketAcceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory()));
}
public void addSSLFilter() {
}
public static void addMyHandler() {
nioSocketAcceptor.setHandler(new myHandler());
}
public static void main(String[] args) {
init();
addLoggingFiter();
addTextFilter();
addMyHandler();
connection();
}
}
myHandler.java:
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class myHandler extends IoHandlerAdapter {
private static Logger LOGGING = null;
private static String ID = "id + ";
private static int id = 0;
private Set<IoSession> sessions = Collections
.synchronizedSet(new HashSet<IoSession>());
private Set<String> users = Collections
.synchronizedSet(new HashSet<String>());
public myHandler() {
LOGGING = LoggerFactory.getLogger(myHandler.class);
}
public void exceptionCaught(IoSession session, Throwable cause) {
LOGGING.warn(cause.getMessage(), cause);
}
public void sessionOpened(IoSession session) {
}
public void messageReceived(IoSession session, Object message) {
String msg = (String) message;
if (msg.equals("login in")) {
if (sessions.contains(session) == false) {
if (users.contains(ID + id)) {
session.write("The ID is used!");
} else {
session.write("Logging is successful!");
users.add(ID + id);
session.setAttribute("user", ID + id);
sessions.add(session);
session.write("You are successful loggin!Thank you^-^");
id++;
}
}
else{
session.write("you are longging!");
}
session.write("当前存在的用户ID有:");
for(String s:users){
session.write(s);
}
}
else if (msg.equals(commuciateStatu.nowStatu("quit"))) {
sessions.remove(session);
users.remove(ID + id);
session.close();
}
else {
for (IoSession i : sessions) {
if (i.isClosing() == false) {
i.write(message);
}
}
}
}
}