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; }