protected BMSByte ReadBuffer(NetworkStream stream) { int count = 0; while (stream.DataAvailable) { previousSize = backBuffer.Size; backBuffer.SetSize(backBuffer.Size + 1024); count += stream.Read(backBuffer.byteArr, previousSize, 1024); backBuffer.SetSize(previousSize + count); } int size = BitConverter.ToInt32(backBuffer.byteArr, backBuffer.StartIndex()); readBuffer.Clear(); if (count == 0) { return(readBuffer); } readBuffer.BlockCopy(backBuffer.byteArr, backBuffer.StartIndex(4), size); if (readBuffer.Size + 4 < backBuffer.Size) { backBuffer.RemoveStart(size + 4); } else { backBuffer.Clear(); } return(readBuffer); }
public BMSByte Receive(ref IPEndPoint remoteEP, ref string endpoint) { CheckDisposed(); recBuffer.Clear(); if (endPoint == null) { endPoint = new IPEndPoint(IPAddress.Any, 0); } int dataRead = socket.ReceiveFrom(recBuffer.byteArr, ref endPoint); if (!connections.ContainsKey(endPoint)) { connections.Add(endPoint, (((IPEndPoint)endPoint).Address.ToString() + HOST_PORT_CHARACTER_SEPARATOR + ((IPEndPoint)endPoint).Port.ToString())); } endpoint = connections[endPoint]; //if (dataRead < recBuffer.Size) // recBuffer = CutArray(recBuffer, dataRead); recBuffer.SetSize(dataRead); remoteEP = (IPEndPoint)endPoint; return(recBuffer); }
/// <summary> /// Constructor for the NetworkingStream with a passed in stream /// </summary> /// <param name="stream">The stream passed in to be used</param> public NetworkingStreamRPC(NetworkingStream stream, bool skipCall = false) { FailedExecution = false; // TODO: Check for null NetworkedBehavior or if it is the base class if (!skipCall && ReferenceEquals(stream.NetworkedBehavior, null)) { return; } #if NETFX_CORE var properties = stream.GetType().GetRuntimeProperties(); #else var properties = stream.GetType().GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); #endif foreach (PropertyInfo property in properties) { //if (property.PropertyType == typeof(BMSByte)) // continue; if (property.CanRead && property.CanWrite) { property.SetValue(this, property.GetValue(stream, null), null); } } if (!skipCall) { FailedExecution = !NetworkedBehavior.InvokeRPC(this); } else { Bytes = new BMSByte().Clone(stream.Bytes.byteArr, stream.Bytes.byteArr.Length - 1); Bytes.MoveStartIndex(stream.Bytes.StartIndex()); Bytes.SetSize(stream.Bytes.Size); } }