/// <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))); } }
/// <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()); }