Esempio n. 1
0
        /// <summary>
        /// Reads packet with known type
        /// </summary>
        /// <param name="reader">NetDataReader with packet</param>
        /// <returns>Returns packet if packet in reader is matched type</returns>
        public T ReadKnownPacket <T>(NetDataReader reader) where T : class, new()
        {
            ulong name     = _hasher.ReadHash(reader);
            var   info     = _cache[name];
            ulong typeHash = _hasher.GetHash(typeof(T).Name);

            if (typeHash != name)
            {
                return(null);
            }
            info.Reference = info.CreatorFunc != null?info.CreatorFunc() : Activator.CreateInstance <T>();

            for (int i = 0; i < info.ReadDelegate.Length; i++)
            {
                info.ReadDelegate[i](reader);
            }
            return((T)info.Reference);
        }
Esempio n. 2
0
        private StructInfo ReadInfo(NetDataReader reader)
        {
            ulong      hash = _hasher.ReadHash(reader);
            StructInfo info;

            if (!_cache.TryGetValue(hash, out info))
            {
                throw new Exception("Undefined packet received");
            }
            return(info);
        }