Exemple #1
0
        /// <summary>发送消息。如果有响应,可在消息到达事件<see cref="OnReceived"/>中获得。这里会实现大消息分包。</summary>
        /// <param name="message"></param>
        public virtual void Send(Message message)
        {
            var ms = message.GetStream();

            WriteLog("发送消息 [{0}] {1}", ms.Length, message);
            if (MaxMessageSize <= 0 || ms.Length < MaxMessageSize)
            {
                OnSend(ms);
            }
            else
            {
                var mg = new MessageGroup();
                //mg.Split(ms, MaxMessageSize, message.Header);
                var count = 0;
                foreach (var item in mg)
                {
                    if (item.Index == 1)
                    {
                        count = item.Count;
                    }
                    ms = item.GetStream();
                    WriteLog("发送分组 Identity={0} {1}/{2} [{3}] [{4}]", item.Identity, item.Index, count, item.Data == null ? 0 : item.Data.Length, ms.Length);
                    Debug.Assert(item.Index == count || ms.Length == MaxMessageSize, "分拆的组消息大小不合适!");
                    OnSend(ms);
                }
            }
        }
 /// <summary>发送消息。如果有响应,可在消息到达事件中获得。</summary>
 /// <param name="message"></param>
 public override void Send(Message message)
 {
     var client = Client;
     if (!_hasSetAsync)
     {
         client.UploadDataCompleted += new UploadDataCompletedEventHandler(client_UploadDataCompleted);
         client.DownloadDataCompleted += new DownloadDataCompletedEventHandler(client_DownloadDataCompleted);
     }
     var data = message.GetStream().ReadBytes();
     if (data.Length < 128)
         client.DownloadDataAsync(new Uri(Uri.ToString() + "?" + DataHelper.ToHex(data)));
     else
         client.UploadDataAsync(Uri, data);
 }
        /// <summary>发送并接收消息。主要用于应答式的请求和响应。</summary>
        /// <param name="message"></param>
        /// <param name="millisecondsTimeout">等待的毫秒数,或为 <see cref="F:System.Threading.Timeout.Infinite" /> (-1),表示无限期等待。默认0表示不等待</param>
        /// <returns></returns>
        public override Message SendAndReceive(Message message, int millisecondsTimeout = 0)
        {
            lock (this)
            {
                Byte[] rs = null;
                var data = message.GetStream().ReadBytes();
                if (data.Length < 128)
                    rs = Client.DownloadData(new Uri(Uri.ToString() + "?" + DataHelper.ToHex(data)));
                else
                    rs = Client.UploadData(Uri, data);
                if (rs == null || rs.Length < 1) return null;

                return Message.Read(new MemoryStream(rs));
            }
        }
        /// <summary>发送并接收消息。主要用于应答式的请求和响应。</summary>
        /// <param name="message"></param>
        /// <param name="millisecondsTimeout">等待的毫秒数,或为 <see cref="F:System.Threading.Timeout.Infinite" /> (-1),表示无限期等待。默认0表示不等待</param>
        /// <returns></returns>
        public override Message SendAndReceive(Message message, int millisecondsTimeout = 0)
        {
            lock (this)
            {
                Byte[] rs   = null;
                var    data = message.GetStream().ReadBytes();
                if (data.Length < 128)
                {
                    rs = Client.DownloadData(new Uri(Uri.ToString() + "?" + data.ToHex()));
                }
                else
                {
                    rs = Client.UploadData(Uri, data);
                }
                if (rs == null || rs.Length < 1)
                {
                    return(null);
                }

                return(Message.Read(new MemoryStream(rs)));
            }
        }
Exemple #5
0
 /// <summary>发送消息。如果有响应,可在消息到达事件<see cref="OnReceived"/>中获得。这里会实现大消息分包。</summary>
 /// <param name="message"></param>
 public virtual void Send(Message message)
 {
     var ms = message.GetStream();
     WriteLog("发送消息 [{0}] {1}", ms.Length, message);
     if (MaxMessageSize <= 0 || ms.Length < MaxMessageSize)
         OnSend(ms);
     else
     {
         var mg = new MessageGroup();
         mg.Split(ms, MaxMessageSize, message.Header);
         var count = 0;
         foreach (var item in mg)
         {
             if (item.Index == 1) count = item.Count;
             ms = item.GetStream();
             WriteLog("发送分组 Identity={0} {1}/{2} [{3}] [{4}]", item.Identity, item.Index, count, item.Data == null ? 0 : item.Data.Length, ms.Length);
             Debug.Assert(item.Index == count || ms.Length == MaxMessageSize, "分拆的组消息大小不合适!");
             OnSend(ms);
         }
     }
 }
 /// <summary>发送消息。如果有响应,可在消息到达事件中获得。</summary>
 /// <param name="message"></param>
 public override void Send(Message message)
 {
     var rs = Context.Response;
     rs.BinaryWrite(message.GetStream().ReadBytes());
 }