Пример #1
0
        public static Packet Read(Connection c)
        {
            byte[] abHead = new byte[6];
            int len = 0;
            while (len < 6)
                len += c.RetreiveBytes(ref abHead, len);
               			//if (c.RetreiveBytes(ref abHead) != 6)
            //	throw new Exception("ouch: malformed head");

            int id = readShortFrom(ref abHead, 0);
            len = readIntFrom(ref abHead, 2);
            if (len < 0) {
                Console.WriteLine("Something went wrong: got negative Packet length");
                return null;
            }

            byte[] abData = new byte[len];
            len = c.RetreiveBytes(ref abData);

            Packet oRet = null;
            if (types.ContainsKey(id)) {
                oRet = (Packet)Assembly.GetExecutingAssembly().CreateInstance(types[id].FullName);
                oRet.createFromData(ref abData);
            } else {
                oRet = new PackUnknown();

            }
            return oRet;
        }