Exemple #1
0
        public void MessageReceived(AriesClient client, object message)
        {
            PendingDataRequest pendingRequest = null;

            lock (PendingCallbacks)
            {
                var dataPacket = message as DataServiceWrapperPDU;
                if (dataPacket == null)
                {
                    return;
                }

                if (dataPacket.Body is cTSOTopicUpdateMessage)
                {
                    this.ApplyUpdate((cTSOTopicUpdateMessage)dataPacket.Body, NullSecurityContext.INSTANCE);
                }

                if (PendingCallbacks.ContainsKey(dataPacket.SendingAvatarID))
                {
                    pendingRequest = PendingCallbacks[dataPacket.SendingAvatarID];
                    PendingCallbacks.Remove(dataPacket.SendingAvatarID);
                }
            }

            if (pendingRequest != null)
            {
                pendingRequest.Resolve();
            }
        }
Exemple #2
0
        public Task <object> Request(MaskedStruct mask, uint id)
        {
            var messageId = NextMessageId();
            var request   = new DataServiceWrapperPDU()
            {
                RequestTypeID   = mask.GetID(),
                SendingAvatarID = messageId, //Reusing this field for easier callbacks rather than scoping them
                Body            = new cTSONetMessageStandard()
                {
                    DataServiceType = mask.GetID(),
                    Parameter       = id
                }
            };

            CityClient.Write(request);

            //TODO: Add timeouts
            var result = new PendingDataRequest(messageId, this, Get(mask, id));

            lock (PendingCallbacks) PendingCallbacks.Add(messageId, result);
            return(result.Task);
        }