Read() 공개 메소드

public Read ( ) : int
리턴 int
예제 #1
0
        public override int Read(byte[] buffer, int offset, int count)
        {
            int read = 0;

            while (read < count)
            {
                // Ensure a buffer is available
                if (TakeBuffer())
                {
                    // Get as much as we can from the current buffer
                    read += _current.Read(buffer, offset + read, count - read);
                    if (_current.Count == 0)
                    {
                        // Used up this buffer, return to the pool if it's a pool buffer
                        if (_current.FromPool)
                        {
                            _pool.Add(_current);
                        }
                        _current = null;
                    }
                }
                else
                {
                    break;
                }
            }
            return(read);
        }
예제 #2
0
        internal override ReadWithCommentResult <dynamic> TryReadInner(bool returnComments, bool checkRow, ref dynamic row)
        {
            TryAllocateAndTrack(this, ColumnNames, ref NotifyOnDisposeHead, checkRow, ref row);

            var madeProgress = true;

            while (true)
            {
                PreparingToWriteToBuffer();
                var available = Buffer.Read(Inner, madeProgress);
                if (available == 0)
                {
                    var endRes = EndOfData();

                    return(HandleAdvanceResult(endRes, returnComments, ending: true));
                }

                if (!RowBuilder.RowStarted)
                {
                    StartRow();
                }

                var res            = AdvanceWork(available, out madeProgress);
                var possibleReturn = HandleAdvanceResult(res, returnComments, ending: false);
                if (possibleReturn.ResultType != ReadWithCommentResultType.NoValue)
                {
                    return(possibleReturn);
                }
            }
        }
예제 #3
0
 void NextCh()
 {
     if (oldEols > 0)
     {
         ch = EOL; oldEols--;
     }
     else
     {
         pos = buffer.Pos;
         ch  = buffer.Read(); col++;
         // replace isolated '\r' by '\n' in order to make
         // eol handling uniform across Windows, Unix and Mac
         if (ch == '\r' && buffer.Peek() != '\n')
         {
             ch = EOL;
         }
         if (ch == EOL)
         {
             line++; col = 0;
         }
     }
     valCh = (char)ch;
     if (ch != Buffer.EOF)
     {
         ch = char.ToLower((char)ch);
     }
 }
예제 #4
0
        public override bool OnDataReceived(MainForm form, bool isTcp, Peer peer, int dataType, byte[] data)
        {
            if (!isTcp || peer.Pending)
            {
                return(false);
            }

            string hash = null;

            Buffer.Read(data, br =>
            {
                hash = br.ReadString();
            });

            form.RemoveWorldObject(hash);

            var buf = Buffer.Write(br =>
            {
                br.Write(peer.SessionID);
                br.Write(hash);
            });

            form.Server.SendTcp(DataType.ResponseObjectPicked, buf);

            return(true);
        }
예제 #5
0
 void NextCh()
 {
     if (oldEols > 0)
     {
         ch = EOL; oldEols--;
     }
     else
     {
         pos = buffer.Pos;
         // buffer reads unicode chars, if UTF8 has been detected
         ch = buffer.Read();
         col++;
         charPos++;
         // replace isolated '\r' by '\n' in order to make
         // eol handling uniform across Windows, Unix and Mac
         if (ch == '\r' && buffer.Peek() != '\n')
         {
             ch = EOL;
         }
         if (ch == EOL)
         {
             line++;
             col = 0;
         }
     }
 }
예제 #6
0
        internal override ReadWithCommentResult <T> TryReadInner(bool returnComments, bool checkRecord, ref T record)
        {
            TryPreAllocateRow(checkRecord, ref record);

            var madeProgress = true;

            while (true)
            {
                PreparingToWriteToBuffer();
                var available = Buffer.Read(Inner, madeProgress);
                if (available == 0)
                {
                    var endRes = EndOfData();

                    return(HandleAdvanceResult(endRes, returnComments, ending: true));
                }

                if (!RowBuilder.RowStarted)
                {
                    StartRow();
                }

                var res            = AdvanceWork(available, out madeProgress);
                var possibleReturn = HandleAdvanceResult(res, returnComments, ending: false);
                if (possibleReturn.ResultType != ReadWithCommentResultType.NoValue)
                {
                    return(possibleReturn);
                }
            }
        }
예제 #7
0
 private string ReadStringBody(int size)
 {
     CheckReadLength(size);
     byte[] buf = new byte[size];
     Buffer.Read(buf, 0, size);
     return(Encoding.UTF8.GetString(buf, 0, buf.Length));
 }
예제 #8
0
        public bool Execute(Server server, int dataType, byte[] data, bool isTcp)
        {
            if (isTcp)
            {
                return(false);
            }

            var ids   = new List <int>();
            var poses = new List <Vector3f>();
            var rots  = new List <Vector3f>();

            Buffer.Read(data, br =>
            {
                while (br.BaseStream.Position < data.Length)
                {
                    ids.Add(br.ReadInt32());
                    poses.Add(new Vector3f(br.ReadSingle(), br.ReadSingle(), br.ReadSingle()));
                    rots.Add(new Vector3f(br.ReadSingle(), br.ReadSingle(), br.ReadSingle()));
                }
            });

            for (var i = 0; i < ids.Count; i++)
            {
                var player = worldData.Players.Find(p => p.SessionID == ids[i]);
                if (player == null)
                {
                    continue;
                }

                player.Position = poses[i];
                player.Rotation = rots[i];
            }

            return(true);
        }
예제 #9
0
        public Byte[] ReadByteArray()
        {
            var len  = ReadInt32();
            var data = new Byte[len];

            Buffer.Read(data, 0, len);
            return(data);
        }
예제 #10
0
        /// <summary>
        /// Remove the contents of the buffer from the cursor to the end of the
        /// buffer, and place them in the paste buffer.
        /// </summary>
        public void CutToEnd()
        {
            var charsToCut = Buffer.Length - Buffer.CursorIndex;

            PasteBuffer = new string(Buffer.Read(charsToCut));
            SyncBufferToConsole(0, 0, charsToCut);
            Buffer.Truncate();
        }
예제 #11
0
        public override byte[] ReadBinary()
        {
            int size = ReadI32();

            CheckReadLength(size);
            byte[] buf = new byte[size];
            Buffer.Read(buf, 0, size);
            return(buf);
        }
예제 #12
0
        public String ReadString()
        {
            var len = ReadInt32();

            Buffer.Read(_readBuffer, 0, len);
            var data = System.Text.Encoding.UTF8.GetString(_readBuffer, 0, len);

            return(data);
        }
예제 #13
0
        public bool Execute(Server server, int dataType, byte[] data, bool isTcp)
        {
            Buffer.Read(data, br =>
            {
                var player = br.ReadInt32();
                var hash   = br.ReadString();
                //script.ReceivedObjectPicked((Player)Array.Find(server.Players, p => p.SessionID == player), hash);
            });

            return(true);
        }
예제 #14
0
        public void ReadFromBuffer()
        {
            var sut     = new Buffer <string>();
            var fixture = new Fixture();
            var value   = fixture.Create <string>();

            sut.Write(value);
            var result = sut.Read();

            result.Should().Be(value);
        }
예제 #15
0
        /**
         * Read a byte[] of a known length from the wire.
         */
        private byte[] ReadBinary(int length)
        {
            if (length == 0)
            {
                return(new byte[0]);
            }

            byte[] buf = new byte[length];
            Buffer.Read(buf, 0, length);
            return(buf);
        }
예제 #16
0
        public void Wrapped_Empty_Message_ShouldBe_Unwrapped()
        {
            MockSocketProxy mockSocket   = new MockSocketProxy();
            NormalPerson    normalPerson = new NormalPerson(new Person(mockSocket));
            Buffer          buffer       = new Buffer();

            mockSocket.internalReceiveBuffer.Add(new Message("").WrapData());
            byte[] res    = buffer.Read(mockSocket);
            string result = Encoding.ASCII.GetString(res);

            Assert.Equal("", result);
        }
예제 #17
0
        public void Wrapped_Invalid_BiggerLength_Message_ShouldBe_Unwrapped()
        {
            MockSocketProxy mockSocket   = new MockSocketProxy();
            NormalPerson    normalPerson = new NormalPerson(new Person(mockSocket));
            Buffer          buffer       = new Buffer();

            mockSocket.internalReceiveBuffer.Add(mockSocket.WrapData(new Message("test").ToByteArray(), 10));
            var exception = Record.Exception(() => buffer.Read(mockSocket));

            Assert.IsType(typeof(System.Exception), exception);
            Assert.True(exception.Message.Contains("You've received zero bytes. Please, check your connection."));
        }
예제 #18
0
        public bool TryReadWithReuse(ref T record)
        {
            AssertNotDisposed();

            if (RowEndings == null)
            {
                HandleLineEndings();
            }

            if (ReadHeaders == null)
            {
                HandleHeaders();
            }

            while (true)
            {
                PreparingToWriteToBuffer();
                var available = Buffer.Read(Inner);
                if (available == 0)
                {
                    EndOfData();

                    if (HasValueToReturn)
                    {
                        record = GetValueForReturn();
                        return(true);
                    }

                    // intentionally _not_ modifying record here
                    return(false);
                }

                if (!HasValueToReturn)
                {
                    if (record == null)
                    {
                        if (!Configuration.NewCons(out record))
                        {
                            Throw.InvalidOperationException($"Failed to construct new instance of {typeof(T)}");
                        }
                    }
                    SetValueToPopulate(record);
                }

                var res = AdvanceWork(available);
                if (res)
                {
                    record = GetValueForReturn();
                    return(true);
                }
            }
        }
예제 #19
0
        public void StartUdp()
        {
            if (udp != null)
            {
                try
                {
                    udp.Close();
                }
                catch { }
                udp = null;
            }

            Task.Factory.StartNew(() =>
            {
                try
                {
                    udp = new UdpClient(LocalUdpPort, AddressFamily.InterNetwork);
                    udp.JoinMulticastGroup(MulticastAddress, 50);

                    while (true)
                    {
                        IPEndPoint ep = null;
                        var data      = udp.Receive(ref ep);

                        if (!DataType.Magic.SequenceEqual(data.Take(4)))
                        {
                            continue;
                        }
                        Buffer.Read(data, (ms, br) =>
                        {
                            br.ReadBytes(4);
                            while (ms.Position < data.Length)
                            {
                                var type = br.ReadInt32();
                                var l    = br.ReadInt32();
                                var buf  = br.ReadBytes(l);
                                UdpDataReceived(this, new DataEventArgs()
                                {
                                    Data     = buf,
                                    DataType = type,
                                    IsTcp    = false,
                                });
                            }
                        });
                    }
                }
                catch (Exception ex)
                {
                    Debug.WriteLine(ex);
                }
            });
        }
예제 #20
0
        /**
         * Read a byte[] from the wire.
         */
        public override byte[] ReadBinary()
        {
            int length = (int)ReadVarint32();

            if (length == 0)
            {
                return(new byte[0]);
            }

            byte[] buf = new byte[length];
            Buffer.Read(buf, 0, length);
            return(buf);
        }
예제 #21
0
파일: Scanner.cs 프로젝트: julthep/sdkjs
    /* AW 2003-03-10 moved this from ParserGen.cs */
    public static string GetString(int beg, int end)
    {
        StringBuilder s      = new StringBuilder(64);
        int           oldPos = Buffer.Pos;

        Buffer.Pos = beg;
        while (beg < end)
        {
            s.Append((char)Buffer.Read()); beg++;
        }
        Buffer.Pos = oldPos;
        return(s.ToString());
    }
예제 #22
0
        public override bool OnDataReceived(MainForm form, bool isTcp, Peer peer, int dataType, byte[] data)
        {
            if (peer.Pending || isTcp)
            {
                return(false);
            }

            Buffer.Read(data, br =>
            {
                peer.Player.Position = new Vector3f(br.ReadSingle(), br.ReadSingle(), br.ReadSingle());
                peer.Player.Rotation = new Vector3f(br.ReadSingle(), br.ReadSingle(), br.ReadSingle());
            });

            return(true);
        }
        public override void OnTcpReceived(int dataType, byte[] data)
        {
            Buffer.Read(data, br =>
            {
                var str = br.ReadString();
                if (str != GameObject.Hash)
                {
                    return;
                }
                var name = br.ReadString();
                if (name != Script.ScriptHash)
                {
                    return;
                }

                var length = br.ReadInt32();
                Status     = br.ReadBytes(length);
            });
        }
예제 #24
0
        /**
         * Reading methods.
         */

        ///<summary>
        /// Read in a JSON string, unescaping as appropriate.. Skip Reading from the
        /// context if skipContext is true.
        ///</summary>
        private byte[] ReadJSONString(bool skipContext)
        {
            MemoryStream buffer = new MemoryStream();


            if (!skipContext)
            {
                context.Read();
            }
            ReadJSONSyntaxChar(QUOTE);
            while (true)
            {
                byte ch = reader.Read();
                if (ch == QUOTE[0])
                {
                    break;
                }
                if (ch == ESCSEQ[0])
                {
                    ch = reader.Read();
                    if (ch == ESCSEQ[1])
                    {
                        ReadJSONSyntaxChar(ZERO);
                        ReadJSONSyntaxChar(ZERO);
                        Buffer.Read(tempBuffer, 0, 2);
                        ch = (byte)((HexVal((byte)tempBuffer[0]) << 4) + HexVal(tempBuffer[1]));
                    }
                    else
                    {
                        int off = Array.IndexOf(ESCAPE_CHARS, (char)ch);
                        if (off == -1)
                        {
                            throw new SerializerException(SerializerException.INVALID_DATA,
                                                          "Expected control char");
                        }
                        ch = ESCAPE_CHAR_VALS[off];
                    }
                }
                buffer.Write(new byte[] { (byte)ch }, 0, 1);
            }
            return(buffer.ToArray());
        }
예제 #25
0
        public override bool OnDataReceived(MainForm form, bool isTcp, Peer peer, int dataType, byte[] data)
        {
            if (!isTcp || peer.Pending)
            {
                return(true);
            }

            Buffer.Read(data, br =>
            {
                var objHash = br.ReadString();
                var scrHash = br.ReadString();
                var length  = br.ReadInt32();
                var buf     = br.ReadBytes(length);
                form.UpdateWorldObjectStatus(objHash, scrHash, buf);
            });

            form.Server.SendTcp(DataType.ResponseScriptUpdate, data);

            return(true);
        }
예제 #26
0
파일: Scanner.cs 프로젝트: julthep/sdkjs
 static void NextCh()
 {
     if (oldEols > 0)
     {
         ch = EOL; oldEols--;
     }
     else
     {
         ch = (char)Buffer.Read(); pos++;
         // replace isolated '\r' by '\n' in order to make
         // eol handling uniform across Windows, Unix and Mac
         if (ch == '\r' && Buffer.Peek() != '\n')
         {
             ch = EOL;
         }
         if (ch == EOL)
         {
             line++; lineStart = pos + 1;
         }
     }
 }
예제 #27
0
        public bool Execute(Server server, int dataType, byte[] data, bool isTcp)
        {
            if (!isTcp)
            {
                return(false);
            }

            Buffer.Read(data, br =>
            {
                var res = br.ReadInt32();
                if (res >= 0)
                {
                    server.SessionID = res;
                }

                MMW.BroadcastMessage("login result", res >= 0);
                //server.EventLoginResultReceived(res >= 0);
            });

            return(true);
        }
예제 #28
0
        public override void OnTcpReceived(int dataType, byte[] data)
        {
            if (dataType == Walker.DataType.ResponseObjectDestroy)
            {
                string hash = null;
                Buffer.Read(data, br => hash = br.ReadString());
                RemoveGameObject(SyncWorldObjects.Find(go => go.Hash == hash));
            }
            else if (dataType == Walker.DataType.ResponseItemUsed)
            {
                var obj = Util.DeserializeJsonBinary <NwWalkerGameObject>(data);
                ItemUse(obj, worldData.Players.Find(p => p.UserID == obj.UserID), true);
            }
            else if (dataType == Walker.DataType.ResponseObjectPut)
            {
                var obj = Util.DeserializeJsonBinary <NwWalkerGameObject>(data);
                PutGameObject(obj, true);
            }
            else if (dataType == Walker.DataType.ResponsePlayerJoin)
            {
                var player = Util.DeserializeJsonBinary <WalkerPlayer>(data);

                if (worldData.Players.Exists(p => p.SessionID == player.SessionID))
                {
                    return;
                }
                JoinPlayer(player);
            }
            else if (dataType == Walker.DataType.ResponseWorldStatus)
            {
                var status = Util.DeserializeJsonBinary <NwWorldStatus>(data);
                ResolveReceiveWorldStatus(status);
            }
            else if (dataType == Walker.DataType.ResponseLeaveWorld)
            {
                server.Disconnected -= Server_Disconnected;
                OnUnload();
            }
        }
예제 #29
0
        /// <summary>
        /// Transforms the current word by passing it through the provided
        /// function.  Does not move the cursor.
        /// </summary>
        /// <param name="transformation">Function to apply.</param>
        /// <exception cref="ArgumentNullException">Thrown when <paramref name="transformation" />
        /// is null.</exception>
        public void TransformCurrentWord(Func <string, string> transformation)
        {
            if (transformation == null)
            {
                throw new ArgumentNullException(nameof(transformation));
            }

            var word            = new string(Buffer.Read(FindIndexOfNextWord() - Buffer.CursorIndex));
            var transformedWord = transformation(word);

            Buffer.Remove(word.Length);
            Buffer.Insert(transformedWord);

            var extraSpaces = 0;

            if (transformedWord.Length < word.Length)
            {
                extraSpaces = word.Length - transformedWord.Length;
            }

            SyncBufferToConsole(Buffer.CursorIndex, Buffer.Length - Buffer.CursorIndex, extraSpaces);
        }
예제 #30
0
    public void Start()
    {
        //Thread.Sleep(delay);
        this.colour = Color.White;
        for (int k = 1; k <= 12; k++)
        {
            semaphore.Signal();
            this.zeroPlane();

            buffer.Read(ref this.colour);

            for (int i = 1; i <= 20; i++)
            {
                panel.Invalidate();
                this.movePlane(xDelta, yDelta);
                Thread.Sleep(delay);
            }
            this.colour = Color.White;
            panel.Invalidate();
        }
        this.colour = Color.Gray;
        panel.Invalidate();
    }