ContextHub: ContextHubClientManager

* A class that manages registration/unregistration of clients and manages messages to/from clients.

registerClient

     * Registers a new client with the service.
     *
     * @param clientCallback the callback interface of the client to register
     * @param contextHubId   the ID of the hub this client is attached to
     *
     * @return the client interface

   IContextHubClient registerClient(
            IContextHubClientCallback clientCallback, int contextHubId) {
        ContextHubClientBroker broker = createNewClientBroker(clientCallback, contextHubId);
        return IContextHubClient.Stub.asInterface(broker);
    }

createNewClientBroker

    /**
     * Creates a new ContextHubClientBroker object for a client and registers it with the client
     * manager.
     */
    private synchronized ContextHubClientBroker createNewClientBroker(
            IContextHubClientCallback clientCallback, int contextHubId) {

        ContextHubClientBroker broker = null;
        int id = mNextHostEndpointId;
        for (int i = 0; i <= MAX_CLIENT_ID; i++) {
            if (!mHostEndPointIdToClientMap.containsKey((short)id)) {
                broker = new ContextHubClientBroker(
                        mContext, mContextHubProxy, this, contextHubId, (short)id, clientCallback);
                mHostEndPointIdToClientMap.put((short)id, broker);
                mNextHostEndpointId = (id == MAX_CLIENT_ID) ? 0 : id + 1;
                break;
            }
            id = (id == MAX_CLIENT_ID) ? 0 : id + 1;
        }

        return broker;
    }

封装IContextHubClientCallback发送到每个注册的client

onMessageFromNanoApp

    /* package */ void onMessageFromNanoApp(int contextHubId, ContextHubMsg message) {
        NanoAppMessage clientMessage = ContextHubServiceUtil.createNanoAppMessage(message);

        if (clientMessage.isBroadcastMessage()) {
            broadcastMessage(contextHubId, clientMessage);
        } else {
            ContextHubClientBroker proxy = mHostEndPointIdToClientMap.get(message.hostEndPoint);
            if (proxy != null) {
                proxy.sendMessageToClient(clientMessage);
            }
        }
    }

    private void broadcastMessage(int contextHubId, NanoAppMessage message) {
        forEachClientOfHub(contextHubId, client -> client.sendMessageToClient(message));
    }

    /**
     * Runs a command for each client that is attached to a hub with the given ID.
     */
    private void forEachClientOfHub(int contextHubId, Consumer<ContextHubClientBroker> callback) {
        for (ContextHubClientBroker broker : mHostEndPointIdToClientMap.values()) {
            if (broker.getAttachedContextHubId() == contextHubId) {
                callback.accept(broker);
            }
        }
    }

onNanoAppLoaded ...

void onNanoAppLoaded(int contextHubId, long nanoAppId) {
        forEachClientOfHub(contextHubId, client -> client.onNanoAppLoaded(nanoAppId));
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值