Example #1
0
    private void GetContentHandleCallback(RPCContext context)
    {
        ResourcesAPIPendingState state = null;

        if (!this.m_pendingLookups.TryGetValue(context.Header.Token, out state))
        {
            base.ApiLog.LogWarning("Received unmatched lookup response");
        }
        else
        {
            this.m_pendingLookups.Remove(context.Header.Token);
            bnet.protocol.ContentHandle contentHandle = bnet.protocol.ContentHandle.ParseFrom(context.Payload);
            if ((contentHandle == null) || !contentHandle.IsInitialized)
            {
                base.ApiLog.LogWarning("Received invalid response");
                state.Callback(null, state.UserContext);
            }
            else
            {
                BattleNetErrors status = (BattleNetErrors)context.Header.Status;
                if (status != BattleNetErrors.ERROR_OK)
                {
                    object[] args = new object[] { status };
                    base.ApiLog.LogWarning("Battle.net Resources API C#: Failed lookup. Error={0}", args);
                    state.Callback(null, state.UserContext);
                }
                else
                {
                    ContentHandle handle2 = ContentHandle.FromProtocol(contentHandle);
                    state.Callback(handle2, state.UserContext);
                }
            }
        }
    }
Example #2
0
    public void LookupResource(FourCC programId, FourCC streamId, FourCC locale, ResourceLookupCallback cb, object userContext)
    {
        ContentHandleRequest message = new ContentHandleRequest();

        message.SetProgramId(programId.GetValue());
        message.SetStreamId(streamId.GetValue());
        message.SetLocale(locale.GetValue());
        if ((message == null) || !message.IsInitialized)
        {
            base.ApiLog.LogWarning("Unable to create request for RPC call.");
        }
        else
        {
            RPCContext context             = base.m_rpcConnection.QueueRequest(this.m_resourcesService.Id, 1, message, new RPCContextDelegate(this.GetContentHandleCallback), 0);
            ResourcesAPIPendingState state = new ResourcesAPIPendingState {
                Callback    = cb,
                UserContext = userContext
            };
            this.m_pendingLookups.Add(context.Header.Token, state);
            object[] args = new object[] { programId, streamId, locale };
            base.ApiLog.LogDebug("Lookup request sent. PID={0} StreamID={1} Locale={2}", args);
        }
    }