예제 #1
0
        private void SendUIData(object state)
        {
            try
            {
                var userData = state as byte[];
                var dest     = this.GetDest();

                for (int n = 0; n < _sendTimes; n++)
                {
                    var outPkg = new OutgoingPackage(dest, userData);
                    _nodeComm.Send(outPkg);

                    // 发送间隔
                    if (_sendExitEvent.WaitOne(_sendInterval, false))
                    {
                        break;
                    }
                }
            }
            catch (System.Exception /*ex*/)
            {
            }
            finally
            {
                _sendThread = null;
            }
        }
예제 #2
0
        public override void SendUserData(OutgoingPackage package)
        {
            // 更新发送序号
            var seq = (ushort)this.Context.SeqNoManager.GetAndUpdateSendSeq();

            // 计算用户数据在发送队列中的排队时延。
            package.QueuingDelay = (UInt32)((DateTime.Now - package.CreationTime).TotalMilliseconds / 10);

            // 计算发送方时间戳
            var currentTime     = TripleTimestamp.CurrentTimestamp;
            var senderTimeStamp = currentTime;

            if (currentTime > (package.ExtraDelay + package.QueuingDelay))
            {
                senderTimeStamp = currentTime - package.ExtraDelay - package.QueuingDelay;
            }

            var dtFrame = new SaiTtsFrameAppData(seq,
                                                 senderTimeStamp,
                                                 this.TTS.RemoteLastSendTimestamp,
                                                 this.TTS.LocalLastRecvTimeStamp,
                                                 package.UserData);

            this.Context.NextLayer.SendUserData(dtFrame.GetBytes());
        }
예제 #3
0
        public override void SendUserData(OutgoingPackage package)
        {
            var ecValue = this.DefenseStrategy.GetLocalEcValue();
            var seqNo   = (ushort)this.Context.SeqNoManager.GetAndUpdateSendSeq();
            var frame   = new SaiEcFrameApplication(seqNo, ecValue, package.UserData);

            var bytes = frame.GetBytes();

            this.Context.NextLayer.SendUserData(bytes);
        }
예제 #4
0
 /// <summary>
 /// 构造函数。
 /// </summary>
 /// <param name="pkg">收到的Package。</param>
 public UserDataOutgoingEventArgs(OutgoingPackage pkg)
 {
     this.Package = pkg;
 }
예제 #5
0
 public override void SendUserData(OutgoingPackage package)
 {
     // Do nothing.
 }
예제 #6
0
        private void SendCustomFile()
        {
            FileStream   fs = null;
            BinaryReader br = null;

            Byte[] userData = null;
            var    dest     = this.GetDest();

            try
            {
                // Create the reader for data.
                fs = new FileStream(_fileNameToSend, FileMode.Open, FileAccess.Read);
                br = new BinaryReader(fs);

                for (int n = 0; n < _sendTimes; n++)
                {
                    try
                    {
                        // 发送文件起始标志与扩展名
                        if (_fileBeginFlagEnabled)
                        {
                            userData = RsspEncoding.ToNetString(CustomFile.StartFlag + Path.GetExtension(_fileNameToSend));

                            var outPkg = new OutgoingPackage(dest, userData);
                            _nodeComm.Send(outPkg);
                        }

                        // Read and send data
                        fs.Position = 0;
                        do
                        {
                            userData = br.ReadBytes(_packetSize);

                            var outPkg = new OutgoingPackage(dest, userData);
                            _nodeComm.Send(outPkg);

                            // 如果文件发送完成,则立即结束
                            if (userData.Length < _packetSize)
                            {
                                break;
                            }

                            // 发送间隔
                            if (_sendExitEvent.WaitOne(_sendInterval, false))
                            {
                                break;
                            }
                        } while (fs.Length != fs.Position);
                    }
                    finally
                    {
                        userData = RsspEncoding.ToNetString(CustomFile.EndFlag);

                        // 发送文件传送结束标志
                        if (_fileBeginFlagEnabled)
                        {
                            var outPkg = new OutgoingPackage(dest, userData);
                            _nodeComm.Send(outPkg);
                        }
                    }
                }
            }
            catch (Exception /*ex*/)
            {
            }
            finally
            {
                if (fs != null)
                {
                    fs.Close();
                }

                _sendThread = null;
            }
        }
예제 #7
0
 public override void SendUserData(OutgoingPackage package)
 {
 }
예제 #8
0
 public abstract void SendUserData(OutgoingPackage package);
예제 #9
0
파일: EcState.cs 프로젝트: ldw880212/RsspII
 public override void SendUserData(OutgoingPackage package)
 {
     LogUtility.Error(string.Format("{0}: {1}.{2} not implement!",
                                    this.Context.RsspEP.ID, this.GetType().Name,
                                    new StackFrame(0).GetMethod().Name.Split('.').Last()));
 }
예제 #10
0
 public void SendUserData(OutgoingPackage package)
 {
     _currentState.SendUserData(package);
 }