private string ReadKeyIfIncluded(Bitstream stream, List <string> keyHistory) { var has_key = stream.ReadBool(); if (!has_key) { return(null); } var is_substring = stream.ReadBool(); string key; if (!is_substring) { key = stream.ReadString(); } else { var fromIndex = (int)stream.ReadBits(5); var fromLength = (int)stream.ReadBits(5); key = keyHistory[fromIndex].Substring(0, fromLength); key += stream.ReadString(); } if (keyHistory.Count == KEY_HISTORY_SIZE) { keyHistory.RemoveAt(0); } keyHistory.Add(key); return(key); }
private string ReadKeyIfIncluded(Bitstream stream, List<string> keyHistory) { bool has_key = stream.ReadBool(); if (!has_key) { return null; } bool is_substring = stream.ReadBool(); string key; if (!is_substring) { key = stream.ReadString(); } else { int fromIndex = (int) stream.ReadBits(5); int fromLength = (int) stream.ReadBits(5); key = keyHistory[fromIndex].Substring(0, fromLength); key += stream.ReadString(); } Preconditions.CheckArgument(key.Length <= MAX_KEY_SIZE); if (keyHistory.Count == KEY_HISTORY_SIZE) { keyHistory.RemoveAt(0); } keyHistory.Add(key); return key; }
public override void Deserialize(Bitstream msg) { Name = msg.ReadString(); EntityId = msg.ReadVariableUInt32(); int count = msg.ReadInt32(); Parameters = new List<object>(count); for(int i=0; i < count; ++i) { var p = ReadParam(msg); Parameters.Add(p); } RPCManager._Call(Name, EntityId, Parameters); }
private string ReadKeyIfIncluded(Bitstream stream, List <string> keyHistory) { bool has_key = stream.ReadBool(); if (!has_key) { return(null); } bool is_substring = stream.ReadBool(); string key; if (!is_substring) { key = stream.ReadString(); } else { int fromIndex = (int)stream.ReadBits(5); int fromLength = (int)stream.ReadBits(5); key = keyHistory[fromIndex].Substring(0, fromLength); key += stream.ReadString(); } Preconditions.CheckArgument(key.Length <= MAX_KEY_SIZE); if (keyHistory.Count == KEY_HISTORY_SIZE) { keyHistory.RemoveAt(0); } keyHistory.Add(key); return(key); }
internal static void ReadNetObject(DataSerializationItem item, Bitstream msg, NetworkObject owner, NetworkObject baseline=null) { if (owner is DefinitionNetworkObject) { var d = msg.ReadBool(); if (d) { (owner as DefinitionNetworkObject).Destroy = true; return; } } foreach (var prop in item.Properties) { var useBaseline = msg.ReadBool(); if (useBaseline) { if (baseline != null) { ApplyBaseline(prop, owner, baseline); } else { throw new InvalidOperationException("Can't find baseline!"); } continue; } switch (prop.Type) { case DataTypes.BOOL: prop.Set(owner, msg.ReadBool()); break; case DataTypes.UBYTE: prop.Set(owner, msg.ReadByte()); break; case DataTypes.UINT: prop.Set(owner, msg.ReadVariableUInt32()); break; case DataTypes.BYTE: prop.Set(owner, msg.ReadSByte()); break; case DataTypes.INT: prop.Set(owner, msg.ReadVariableInt32()); break; case DataTypes.ULONG: prop.Set(owner, msg.ReadUInt64()); break; case DataTypes.LONG: prop.Set(owner, msg.ReadInt64()); break; case DataTypes.FLOAT: prop.Set(owner, msg.ReadFloat()); break; case DataTypes.DOUBLE: prop.Set(owner, msg.ReadDouble()); break; case DataTypes.STRING: prop.Set(owner, msg.ReadString()); break; case DataTypes.VECTOR2: prop.Set(owner, msg.ReadVector2()); break; case DataTypes.NETPROP: var childProp = prop.ChildProperty; if (childProp != null) { var o = (NetworkObject)prop.CreateChildProperty(); if (o != null) { var child = (NetworkObject)prop.Get<NetworkObject>(baseline); ReadNetObject(childProp, msg, o, child); prop.Set(owner, o); } } break; } } }
private object ReadParam(Bitstream msg) { var fullTypeName = msg.ReadString(); var type = LookupType(fullTypeName); var dsitem = new DataSerializationProperty(null, type); object o; switch (dsitem.Type) { case DataTypes.BOOL: o = msg.ReadBool(); break; case DataTypes.UBYTE: o = msg.ReadByte(); break; case DataTypes.UINT: o = msg.ReadVariableUInt32(); break; case DataTypes.BYTE: o = msg.ReadSByte(); break; case DataTypes.INT: o = msg.ReadVariableInt32(); break; case DataTypes.ULONG: o = msg.ReadUInt64(); break; case DataTypes.LONG: o = msg.ReadInt64(); break; case DataTypes.FLOAT: o = msg.ReadFloat(); break; case DataTypes.DOUBLE: o = msg.ReadDouble(); break; case DataTypes.STRING: o = msg.ReadString(); break; case DataTypes.VECTOR2: o = msg.ReadVector2(); break; default: throw new ArgumentException("Invalid RPC paramter type."); } return o; }