Esempio n. 1
0
        /// <summary>
        /// 创建一个rtp能力可以识别的消息
        /// </summary>
        /// <param name="eventName"></param>
        /// <param name="header"></param>
        /// <param name="content"></param>
        /// <returns></returns>
        private Message CreateResponseMessage(string eventName, DTObject header, byte[] content, string error, bool isCompleted)
        {
            var rtpData = new RtpData(this.Data.Participant, header, content);
            var data    = RtpDataAnalyzer.Serialize(rtpData);
            var msg     = RtpCapability.CreateCallMessage(this.Name, eventName, data, this.RequestId, (mh) =>
            {
                if (!string.IsNullOrEmpty(this.Destination))
                {
                    mh.SetValue(MessageField.Destination, this.Destination);
                }
                else if (this.Destinations != null)
                {
                    mh.SetValue(MessageField.Destinations, this.Destinations);
                }

                if (!string.IsNullOrEmpty(error))
                {
                    mh.SetValue(RtpCapability.FieldRtpCallErrorMessage, error);
                }
                mh.SetValue(RtpCapability.FieldRtpCallIsCompleted, isCompleted);
            });

            msg.Origin = this.Data.Participant.Orgin;
            return(msg);
        }
Esempio n. 2
0
        private Future <bool> RaiseEvent(string eventName,
                                         DTObject header,
                                         byte[] body,
                                         Action <DTObject> setMessageHeader)
        {
            var rtpData = new RtpData(this.Channel.Participant, header, body);
            var data    = RtpDataAnalyzer.Serialize(rtpData);

            Message msg = CreateMessage(eventName, data, setMessageHeader);

            return(this.Channel.Context.Client.Send(msg));
        }
Esempio n. 3
0
        /// <summary>
        /// 远程调用,该调用非常强大,不仅可以同步或异步执行并且获取结果,更可以获取服务器端多次推送的结果
        /// </summary>
        /// <param name="header"></param>
        /// <param name="body"></param>
        /// <param name="future"></param>
        private Future <bool> Call(string eventName, DTObject header, byte[] body, Action <RtpData, bool> process, Action <DTObject> setMessageHeader)
        {
            var identity = RtpCallManager.BorrowIdentity();

            identity.Process = process;

            var rtpData = new RtpData(this.Channel.Participant, header, body);
            var data    = RtpDataAnalyzer.Serialize(rtpData);

            identity.Future.Start();
            Message msg = CreateCallMessage(this.Name, eventName, data, identity.RequestId, setMessageHeader);

            this.Channel.Context.Client.Send(msg);
            return(identity.Future);
        }
Esempio n. 4
0
        ///// <summary>
        ///// 获得所在组播的信息
        ///// </summary>
        ///// <returns></returns>
        //public Multicast GetMulticast()
        //{
        //    return this.Channel.Context.Client.GetMulticast(this.Channel.HostAddress);
        //}

        internal static void Process(AnycastClient client, ClientEvents.MessageReceivedEventArgs ea)
        {
            var data = RtpDataAnalyzer.Deserialize(ea.Message.Origin, ea.Message.Body);

            if (TryProcessCall(ea.Message, data))
            {
                return;
            }

            var header    = ea.Message.Header;
            var origin    = ea.Message.Origin;
            var eventName = header.GetValue <string>(FieldRtpEventName);

            RaiseLocalEvent(client, origin, eventName, data);
        }
Esempio n. 5
0
        public RtpCapabilityCallProxy(Message msg)
        {
            this.Name      = msg.Header.GetValue <string>(RtpCapability.FieldRtpCapabilityName, string.Empty);
            this.EventName = msg.Header.GetValue <string>(RtpCapability.FieldRtpEventName, string.Empty);
            if (!string.IsNullOrEmpty(this.Name))
            {
                this.Data = RtpDataAnalyzer.Deserialize(msg.Origin, msg.Body);

                var destination = msg.Header.GetValue <string>(MessageField.Destination, string.Empty);
                if (!string.IsNullOrEmpty(destination))
                {
                    this.Destination = destination;
                }

                var destinations = msg.Header.GetList(MessageField.Destinations, false)?.ToArray <string>();
                if (destinations != null)
                {
                    this.Destinations = destinations;
                }

                this.RequestId = msg.Header.GetValue <Guid>(RtpCapability.FieldRtpCallRequestId, Guid.Empty);
            }
        }
Esempio n. 6
0
 public static RtpData GetData(string origin, byte[] data)
 {
     return(RtpDataAnalyzer.Deserialize(origin, data));
 }
Esempio n. 7
0
 public byte[] ToArray()
 {
     return(RtpDataAnalyzer.Serialize(this));
 }