openfire 包路由 PacketRouter

處理所有的傳入的數據包

@Override
public void route(IQ packet) {
    iqRouter.route(packet);
}

@Override
public void route(Message packet) {
    messageRouter.route(packet);
}

@Override
public void route(Presence packet) {
    presenceRouter.route(packet);
}

 

實際根據 packet 的類型不同,路由到具體 Router:

IQRouter
MessageRouter
PresenceRouter

每次 route(),都會在之前和之後調用攔截器:

// Invoke the interceptors before we process the read packet
InterceptorManager.getInstance().invokeInterceptors(packet, session, true, false);
// Invoke the interceptors after we have processed the read packet
InterceptorManager.getInstance().invokeInterceptors(packet, session, true, true);

 

 

在 PacketRouterImpl 中也提供了一種處理任何 Packet 的方法:

@Override
public void route(Packet packet) {
    if (packet instanceof Message) {
        route((Message)packet);
    }
    else if (packet instanceof Presence) {
        route((Presence)packet);
    }
    else if (packet instanceof IQ) {
        route((IQ)packet);
    }
    else {
        throw new IllegalArgumentException();
    }
}

但可以看到,其實只處理了 

IQ
Message
Presence

三種包。

 

 

另一個實現包 SessionPacketRouter  也是類似,都是轉發到具體了 Router:

@Override
public void route(Packet packet) {
    // Security: Don't allow users to send packets on behalf of other users
    packet.setFrom(session.getAddress());
    if(packet instanceof IQ) {
        route((IQ)packet);
    }
    else if(packet instanceof Message) {
        route((Message)packet);
    }
    else if(packet instanceof Presence) {
        route((Presence)packet);
    }
}

@Override
public void route(IQ packet) {
    packet.setFrom(session.getAddress());
    router.route(packet);
    session.incrementClientPacketCount();
}

@Override
public void route(Message packet) {
    packet.setFrom(session.getAddress());
    router.route(packet);
    session.incrementClientPacketCount();
}

@Override
public void route(Presence packet) {
    packet.setFrom(session.getAddress());
    router.route(packet);
    session.incrementClientPacketCount();
}

判斷 Packet 的類型,然後轉發到相應的 Router。

 

原文地址:https://www.zhblog.net/go/java/openfire/openfire-packet-router?t=585

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章