/// <summary> /// Handles an incoming entity component message /// </summary> /// <param name="message">Raw network message</param> /// <returns>An IncomingEntityComponentMessage object</returns> public IncomingEntityComponentMessage HandleEntityComponentNetworkMessage(NetIncomingMessage message) { var componentFamily = (ComponentFamily) message.ReadByte(); var messageParams = new List<object>(); while (message.Position < message.LengthBits) { switch ((NetworkDataType) message.ReadByte()) { case NetworkDataType.d_enum: messageParams.Add(message.ReadInt32()); break; case NetworkDataType.d_bool: messageParams.Add(message.ReadBoolean()); break; case NetworkDataType.d_byte: messageParams.Add(message.ReadByte()); break; case NetworkDataType.d_sbyte: messageParams.Add(message.ReadSByte()); break; case NetworkDataType.d_ushort: messageParams.Add(message.ReadUInt16()); break; case NetworkDataType.d_short: messageParams.Add(message.ReadInt16()); break; case NetworkDataType.d_int: messageParams.Add(message.ReadInt32()); break; case NetworkDataType.d_uint: messageParams.Add(message.ReadUInt32()); break; case NetworkDataType.d_ulong: messageParams.Add(message.ReadUInt64()); break; case NetworkDataType.d_long: messageParams.Add(message.ReadInt64()); break; case NetworkDataType.d_float: messageParams.Add(message.ReadFloat()); break; case NetworkDataType.d_double: messageParams.Add(message.ReadDouble()); break; case NetworkDataType.d_string: messageParams.Add(message.ReadString()); break; case NetworkDataType.d_byteArray: int length = message.ReadInt32(); messageParams.Add(message.ReadBytes(length)); break; } } return new IncomingEntityComponentMessage(componentFamily, messageParams); }
private List<object> UnPackParams(NetIncomingMessage message) { var messageParams = new List<object>(); while (message.Position < message.LengthBits) { switch ((NetworkDataType) message.ReadByte()) { case NetworkDataType.d_enum: messageParams.Add(message.ReadInt32()); //Cast from int, because enums are ints. break; case NetworkDataType.d_bool: messageParams.Add(message.ReadBoolean()); break; case NetworkDataType.d_byte: messageParams.Add(message.ReadByte()); break; case NetworkDataType.d_sbyte: messageParams.Add(message.ReadSByte()); break; case NetworkDataType.d_ushort: messageParams.Add(message.ReadUInt16()); break; case NetworkDataType.d_short: messageParams.Add(message.ReadInt16()); break; case NetworkDataType.d_int: messageParams.Add(message.ReadInt32()); break; case NetworkDataType.d_uint: messageParams.Add(message.ReadUInt32()); break; case NetworkDataType.d_ulong: messageParams.Add(message.ReadUInt64()); break; case NetworkDataType.d_long: messageParams.Add(message.ReadInt64()); break; case NetworkDataType.d_float: messageParams.Add(message.ReadFloat()); break; case NetworkDataType.d_double: messageParams.Add(message.ReadDouble()); break; case NetworkDataType.d_string: messageParams.Add(message.ReadString()); break; case NetworkDataType.d_byteArray: int length = message.ReadInt32(); messageParams.Add(message.ReadBytes(length)); break; } } return messageParams; }
private static Object ReadValue(NetIncomingMessage packet, TypeCode typeCode) { Object value; switch (typeCode) { case TypeCode.Empty: throw new NotSupportedException("Empty is not a supported type for variables"); case TypeCode.Object: throw new NotSupportedException("Object is not a supported type for variables"); case TypeCode.DBNull: throw new NotSupportedException("DBNull is not a supported type for variables"); case TypeCode.Boolean: value = packet.ReadBoolean(); break; case TypeCode.Char: throw new NotSupportedException("Char is not a supported type for variables"); case TypeCode.SByte: value = packet.ReadSByte(); break; case TypeCode.Byte: value = packet.ReadByte(); break; case TypeCode.Int16: value = packet.ReadInt16(); break; case TypeCode.UInt16: value = packet.ReadUInt16(); break; case TypeCode.Int32: value = packet.ReadInt32(); break; case TypeCode.UInt32: value = packet.ReadUInt32(); break; case TypeCode.Int64: value = packet.ReadInt64(); break; case TypeCode.UInt64: value = packet.ReadUInt64(); break; case TypeCode.Single: value = packet.ReadSingle(); break; case TypeCode.Double: value = packet.ReadDouble(); break; case TypeCode.Decimal: throw new NotSupportedException("Decimal is not a supported type for variables"); case TypeCode.DateTime: throw new NotSupportedException("DateTime is not a supported type for variables"); case TypeCode.String: value = packet.ReadString(); break; default: throw new NotSupportedException(String.Format("Unknown type {0} is not a supported type for variables", typeCode)); } return value; }