public void FlatBuffersDecoderTest_LengthComeSlowly() { FlatBuffersDecoder decoder = new FlatBuffersDecoder(); Assert.AreEqual(decoder.getState(), FlatBuffersDecoder.ReadState.INITIAL); byte[] b = new byte[1]; b[0] = 0; decoder.Fetch(b, 1); Assert.AreEqual(decoder.getState(), FlatBuffersDecoder.ReadState.READING_LENGTH); byte[] b1 = new byte[1]; b1 [0] = 3; decoder.Fetch(b1, 1); Assert.AreEqual(decoder.getState(), FlatBuffersDecoder.ReadState.READING_DATA); byte[] b2 = new byte[3]; b2[0] = 1; b2[1] = 2; b2[2] = 3; decoder.Fetch(b2, 3); Assert.AreEqual(decoder.getState(), FlatBuffersDecoder.ReadState.DONE); byte[] res = decoder.getData(); Assert.AreEqual(res.Length, 3); Assert.AreEqual(res [0], 1); Assert.AreEqual(res [1], 2); Assert.AreEqual(res [2], 3); }
private void ReceiveCallback(IAsyncResult ar) { try { // Retrieve the state object and the client socket // from the asynchronous state object. StateObject state = (StateObject)ar.AsyncState; this.client = state.workSocket; // Read data from the remote device. int bytesRead = client.EndReceive(ar); if (bytesRead > 0) { Debug.Log("Decoder state buffer size:" + state.buffer.Length); this.decoder.Fetch(state.buffer, bytesRead); Debug.Log("Decoder state:" + decoder.getState()); if (decoder.getState() != FlatBuffersDecoder.ReadState.DONE) { // Get the rest of the data. client.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReceiveCallback), state); } else { if (this.receiveCallback != null) { ByteBuffer bb = new ByteBuffer(this.decoder.getData()); Message m = Message.GetRootAsMessage(bb); this.receiveCallback(m); } //Listening to server again. if (this.receiveCallback != null) { this.Receive(this.receiveCallback); } } } else { //Listening to server again. if (this.receiveCallback != null) { this.Receive(this.receiveCallback); } } } catch (Exception e) { Console.WriteLine(e.ToString()); } }
public void FlatBuffersDecoderTest_AllIn() { byte[] b = new byte[6]; b [0] = 0; b [1] = 4; b [2] = 1; b [3] = 2; b [4] = 3; b [5] = 4; FlatBuffersDecoder decoder = new FlatBuffersDecoder(); decoder.Fetch(b, 6); Assert.AreEqual(decoder.getState(), FlatBuffersDecoder.ReadState.DONE); byte[] res = decoder.getData(); Assert.AreEqual(res.Length, 4); Assert.AreEqual(res [0], 1); Assert.AreEqual(res [1], 2); Assert.AreEqual(res [2], 3); Assert.AreEqual(res [3], 4); }