private void Stream_DataCall(object sender, byte[] data, HostAndPort host) { if (dataNotify != null) { dataNotify.Invoke(sender, data, host); } }
private void ReceiveData(object sender, byte[] data, HostAndPort host) { if (DataReceiveSucess != null) { DataReceiveSucess.Invoke(sender, data, host); } }
/// <summary> /// 加入数据包 /// </summary> /// <param name="package"></param> public void Add(BasePackage package) { ReceiveQueue receiveQueue = null; if (receiveTime.ContainsKey(package.PackID)) { //发送一次完成,触发发送端移除 SendSucess(package.PackID, package.DestHost, package.DestPort); return; } if (!queue.ContainsKey(package.PackID)) { //接收队列计算一个真实的量用于请求发送 int len = (int)(package.Length / package.PackSize); len = package.Length % package.PackSize > 0 ? len + 1 : len; receiveQueue = new ReceiveQueue(len) { Stream = senderSession.SocketStream, DestHost = this.Host.Host, DestPort = this.Host.Port }; queue[package.PackID] = receiveQueue; } if (queue.TryGetValue(package.PackID, out receiveQueue)) { if (package is DATAPackage) { if (receiveQueue.Add((DATAPackage)package)) { //接收完成 ReceiveSucess(package.PackID); if (dataNotify != null) { dataNotify.Invoke(this, receiveQueue.GetData(), Host); } receiveQueue.Stop(); } } else if (package is ShutDownPackage) { ShutDownPackage pack = package as ShutDownPackage; if (0 == pack.direction) { senderSession.Add(pack); } else { receiveQueue.Add(pack); } } else if (package is LostPackage) { //说明是回执信息,转给发送队列 LostPackage pack = package as LostPackage; if (0 == pack.direction) { senderSession.Add(package); } else { receiveQueue.Add(pack); } } else if (package is ACKPackage) { senderSession.Add(package); } else if (package is FINPackage) { senderSession.Add(package); } } }