Esempio n. 1
0
        //public override ValueTask WriteAsync(ReadOnlyMemory<byte> buffer, CancellationToken cancellationToken = default)
        //{
        //	return base.WriteAsync(buffer, cancellationToken);
        //}

        public override void Write(byte[] buffer, int offset, int count)
        {
            if (_closed)
            {
                throw (new Exception("stream closed"));
            }

            //Console.WriteLine("UDPBaseStream write " + count);

            while (count > UDPMeta.BestUDPSize)
            {
                Write(buffer, offset, UDPMeta.BestUDPSize);
                offset += UDPMeta.BestUDPSize;
                count  -= UDPMeta.BestUDPSize;
            }


            DataItem item = new DataItem();

            item.DataIndex = ++nextdataindex;

            item.UDPData = UDPMeta.CreateDataPost(SessionId, _readminindex, item.DataIndex, buffer, offset, count);

            lock (_postmap)
            {
                _postmap[item.DataIndex] = item;
            }

            item.SendTime = DateTime.Now;
            SendToPeer(item.UDPData);

            _timerlastitem = item;
            if (_timer == null)
            {
                _timer = new Timer(OnTimer, null, 100, 100);
            }
        }