package test;

import java.io.IOException;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.UnknownHostException;
import java.util.Calendar;

import org.apache.mina.core.future.CloseFuture;
import org.apache.mina.core.future.IoFuture;
import org.apache.mina.core.future.IoFutureListener;
import org.apache.mina.core.service.IoAcceptor;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;

import server.MinaDecoder;
import server.MinaEncoder;
import server.ServerNetwork;
import tools.Debug;

public class Server111 extends IoHandlerAdapter {
//	public static Server111 instance = new Server111();

	private InetSocketAddress inetSocketAddress;
	private IoAcceptor acceptor;
	
	public static void main(String args[]) {
		new Server111();
	}
	
	public Server111(){
		// 显示IP地址
				InetAddress addr;
				try {
					addr = InetAddress.getLocalHost();
					Debug.log("IP address:" + addr.getHostAddress().toString());
					Debug.log("Host Name:" + addr.getHostName().toString());
					// logger.debug("IP地址:"+addr.getHostAddress().toString());
					// logger.debug("本机名称:"+ addr.getHostName().toString());

				} catch (UnknownHostException e1) {
					e1.printStackTrace();
				}
				Debug.log("Port Number:8081");
				// logger.debug("端口号:8081");

				acceptor = new NioSocketAcceptor();
				// 指定编码解码器
				acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new MinaEncoder(), new MinaDecoder()));
				acceptor.setHandler(this);
				try {
					acceptor.bind(new InetSocketAddress(8081));
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
	}

	@Override
	public void messageReceived(IoSession session, Object message) throws Exception {
		
	}

	@Override
	public void sessionCreated(IoSession session) throws Exception {
		System.out.println("fucking");
		CloseFuture future = session.close(false);
		future.addListener(new IoFutureListener<IoFuture>() {
			@Override
			public void operationComplete(IoFuture future) {
//				Calendar calendar = Calendar.getInstance();
//				System.out.println(calendar.get(Calendar.MINUTE) + ":" + calendar.get(Calendar.SECOND));
//				System.out.println(future.isDone());
			}
		});
	}

	public void sessionOpened(IoSession session) throws Exception {
		System.out.println(session.isClosing());
	}

	@Override
	public void sessionClosed(IoSession session) throws Exception {
		System.out.println(session.isConnected());
		System.out.println(acceptor.getStatistics());
	}
	
	@Override
	public void messageSent(IoSession session, Object message) throws Exception {
		// TODO Auto-generated method stub

//		super.messageSent(session, message);
		
//		System.out.println(message);
//		printStackTrace(Server111.class);
	}

	@Override
	public void exceptionCaught(IoSession session, Throwable cause) {
		Debug.log("throws exception");
		Debug.log("session.toString()", session.toString());
		Debug.log("cause.toString()", cause.toString());
		Debug.log("Report Error Over!!");
	}

}