消息处理

ConnectionHandler

ConnectionHandler.messageReceived()
public void messageReceived(IoSession session, Object message) throws Exception {
	// Get the stanza handler for this session
	StanzaHandler handler = (StanzaHandler) session.getAttribute(HANDLER);
	// Get the parser to use to process stanza. For optimization there is going
	// to be a parser for each running thread. Each Filter will be executed
	// by the Executor placed as the first Filter. So we can have a parser associated
	// to each Thread
	final XMPPPacketReader parser = PARSER_CACHE.get();
	// Update counter of read btyes
	updateReadBytesCounter(session);
	//System.out.println("RCVD: " + message);
	// Let the stanza handler process the received stanza
	try {
		// 处理消息
		handler.process((String) message, parser);
	} catch (Exception e) {
		Log.error("Closing connection due to error while processing message: " + message, e);
		final Connection connection = (Connection) session.getAttribute(CONNECTION);
		if ( connection != null ) {
			connection.close();
		}

	}
}

StanzaHandler

StanzaHandler. processMessage() => PacketRouterImpl.route() => MessageRouter.route() => LocalSession.process => LocalClientSession.deliver() => NIOConnection.deliver()

NIOConnection

Last updated