public static List <byte> encodeDataAsList(DataType[] schema, object[] data, List <byte> output = null) { var converter = new MiscUtil.Conversion.BigEndianBitConverter(); int dataLength = 0; if (output == null) { output = new List <byte>(); } for (var i = 0; i < schema.Length; i++) { if (schema[i] is DataVarying) { var scheme = (DataVarying)schema[i]; var schemeLength = scheme.encodeAsList(data[i], converter, output); dataLength += schemeLength; } else { dataLength += schema[i].length; schema[i].encodeAsList(data[i], converter, output); } } return(output); }
private static Matrix4x4 GetTransform(byte[] buffer) { Matrix4x4 t = new Matrix4x4(); MiscUtil.Conversion.BigEndianBitConverter bc = new MiscUtil.Conversion.BigEndianBitConverter(); // Surely i've missed something and there's a way to loop through this? Please? int i = 0; t.M11 = bc.ToSingle(buffer, i); i += 4; t.M12 = bc.ToSingle(buffer, i); i += 4; t.M13 = bc.ToSingle(buffer, i); i += 4; t.M14 = bc.ToSingle(buffer, i); i += 4; t.M21 = bc.ToSingle(buffer, i); i += 4; t.M22 = bc.ToSingle(buffer, i); i += 4; t.M23 = bc.ToSingle(buffer, i); i += 4; t.M24 = bc.ToSingle(buffer, i); i += 4; t.M31 = bc.ToSingle(buffer, i); i += 4; t.M32 = bc.ToSingle(buffer, i); i += 4; t.M33 = bc.ToSingle(buffer, i); i += 4; t.M34 = bc.ToSingle(buffer, i); i += 4; t.M41 = bc.ToSingle(buffer, i); i += 4; t.M42 = bc.ToSingle(buffer, i); i += 4; t.M43 = bc.ToSingle(buffer, i); i += 4; t.M44 = bc.ToSingle(buffer, i); i += 4; return(t); }
public static byte[] encodeData(DataType[] schema, object[] data) { var converter = new MiscUtil.Conversion.BigEndianBitConverter(); int dataLength = 0; byte[][] dataParts = new byte[schema.Length][]; for (var i = 0; i < schema.Length; i++) { if (schema[i] is DataVarying) { var scheme = (DataVarying)schema[i]; var schemeData = scheme.encode(data[i], converter); dataLength += schemeData.Length; dataParts[i] = schemeData; } else { dataLength += schema[i].length; dataParts[i] = schema[i].encode(data[i], converter); } } var output = new byte[dataLength]; var offset = 0; for (var i = 0; i < schema.Length; i++) { System.Buffer.BlockCopy(dataParts[i], 0, output, offset, dataParts[i].Length); offset += dataParts[i].Length; } return(output); }
private RenderDataSource createRenderDataSourceFromNodes(CNode rdsNode, CNode dbNode) { MiscUtil.Conversion.BigEndianBitConverter bc = new MiscUtil.Conversion.BigEndianBitConverter(); CustomVertex.PositionNormalColored[] vertices = new CustomVertex.PositionNormalColored[(int)dbNode.attributes["elementCount"].data]; Vector3 pos = new Vector3(); int color; Vector3 normal = new Vector3(); int vertexCount = 0; for (int i = 0; i < (int)dbNode.attributes["size"].data; i += 28) { pos.X = bc.ToSingle(dbNode.subNodes[3].data, i); pos.Y = bc.ToSingle(dbNode.subNodes[3].data, i + 4); pos.Z = bc.ToSingle(dbNode.subNodes[3].data, i + 8); color = bc.ToInt32(dbNode.subNodes[3].data, i + 12); normal.X = bc.ToSingle(dbNode.subNodes[3].data, i + 16); normal.Y = bc.ToSingle(dbNode.subNodes[3].data, i + 20); normal.Z = bc.ToSingle(dbNode.subNodes[3].data, i + 24); vertices[vertexCount] = new CustomVertex.PositionNormalColored(pos, normal, color); vertexCount++; } int indexCount = (int)rdsNode.subNodes[0].attributes["count"].data; ushort[] indices = new ushort[indexCount]; for (int i = 0; i < indexCount; i++) { indices[i] = bc.ToUInt16(rdsNode.subNodes[0].subNodes[0].data, i * 2); } return(new RenderDataSource(rdsNode.attributes["id"].value, vertices, indices)); }
public virtual int encodeAsList(object data, MiscUtil.Conversion.BigEndianBitConverter converter, List <byte> output) { // Only a few types arae actually going to be encoded as lists // For convenience sake we can get away with just using the byte arrays and // Add them to the list byte[] outputArray = encode(data, converter); foreach (byte b in outputArray) { output.Add(b); } return(outputArray.Length); }
public static object[] decodeData(DataType[] schema, byte[] data) { var converter = new MiscUtil.Conversion.BigEndianBitConverter(); var output = new object[schema.Length]; var offset = 0; for (var i = 0; i < schema.Length; i++) { if (schema[i] is DataVarying) { var scheme = (DataVarying)schema[i]; output[i] = scheme.decode(data, converter, offset); offset += scheme.getLength(data, converter, offset); } else { output[i] = schema[i].decode(data, converter, offset); offset += schema[i].length; } } return(output); }
private Matrix getTransform(byte[] buffer) { Matrix t = new Matrix(); MiscUtil.Conversion.BigEndianBitConverter bc = new MiscUtil.Conversion.BigEndianBitConverter(); // Surely i've missed something and there's a way to loop through this? Please? int i = 0; t.M11 = bc.ToSingle(buffer, i); i += 4; t.M12 = bc.ToSingle(buffer, i); i += 4; t.M13 = bc.ToSingle(buffer, i); i += 4; t.M14 = bc.ToSingle(buffer, i); i += 4; t.M21 = bc.ToSingle(buffer, i); i += 4; t.M22 = bc.ToSingle(buffer, i); i += 4; t.M23 = bc.ToSingle(buffer, i); i += 4; t.M24 = bc.ToSingle(buffer, i); i += 4; t.M31 = bc.ToSingle(buffer, i); i += 4; t.M32 = bc.ToSingle(buffer, i); i += 4; t.M33 = bc.ToSingle(buffer, i); i += 4; t.M34 = bc.ToSingle(buffer, i); i += 4; t.M41 = bc.ToSingle(buffer, i); i += 4; t.M42 = bc.ToSingle(buffer, i); i += 4; t.M43 = bc.ToSingle(buffer, i); i += 4; t.M44 = bc.ToSingle(buffer, i); i += 4; return t; }
private RenderDataSource createRenderDataSourceFromNodes(CNode rdsNode, CNode dbNode) { MiscUtil.Conversion.BigEndianBitConverter bc = new MiscUtil.Conversion.BigEndianBitConverter(); CustomVertex.PositionNormalColored[] vertices = new CustomVertex.PositionNormalColored[(int)dbNode.attributes["elementCount"].data]; Vector3 pos = new Vector3(); int color; Vector3 normal = new Vector3(); int vertexCount = 0; for (int i = 0; i < (int)dbNode.attributes["size"].data; i += 28) { pos.X = bc.ToSingle(dbNode.subNodes[3].data, i); pos.Y = bc.ToSingle(dbNode.subNodes[3].data, i + 4); pos.Z = bc.ToSingle(dbNode.subNodes[3].data, i + 8); color = bc.ToInt32(dbNode.subNodes[3].data, i + 12); normal.X = bc.ToSingle(dbNode.subNodes[3].data, i + 16); normal.Y = bc.ToSingle(dbNode.subNodes[3].data, i + 20); normal.Z = bc.ToSingle(dbNode.subNodes[3].data, i + 24); vertices[vertexCount] = new CustomVertex.PositionNormalColored(pos, normal, color); vertexCount++; } int indexCount = (int)rdsNode.subNodes[0].attributes["count"].data; ushort[] indices = new ushort[indexCount]; for (int i = 0; i < indexCount; i++) { indices[i] = bc.ToUInt16(rdsNode.subNodes[0].subNodes[0].data, i * 2); } return new RenderDataSource(rdsNode.attributes["id"].value, vertices, indices); }
public void Check() { System.IO.Stream reader = Console.OpenStandardInput(); MiscUtil.Conversion.BigEndianBitConverter bebc = new MiscUtil.Conversion.BigEndianBitConverter(); EndianBinaryWriter writer = new MiscUtil.IO.EndianBinaryWriter(bebc, Console.OpenStandardOutput()); byte[] input = new byte[2]; // is there a better way to check for data on the stream? while (reader.Read(input, 0, 2) > -1) { ushort len = bebc.ToUInt16(input, 0); byte[] incomingBytes = new byte[len]; reader.Read(incomingBytes, 0, len); string incomingData = System.Text.Encoding.ASCII.GetString(incomingBytes); using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\\output.log", true)) { file.WriteLine(incomingData + "\r\n---------------------------------------\r\n"); } string[] parse = System.Text.RegularExpressions.Regex.Split(incomingData, ":"); string command = parse[0]; string username = parse[1]; string domain = parse[2]; short aa = 2; writer.Write(aa); short bbtrue = 1; short bbfalse = 0; switch (command) { case "auth": if (domain == "web.chat") { writer.Write(bbtrue); } else { string password = parse[3]; WeavverMembershipProvider wup = new WeavverMembershipProvider(); if (wup.ValidateUser(username, password)) { writer.Write(bbtrue); } else { writer.Write(bbfalse); } } break; case "isuser": writer.Write(bbtrue); break; case "setpass": writer.Write(bbfalse); break; } } System.Threading.Thread.Sleep(100); }
public abstract byte[] encode(object data, MiscUtil.Conversion.BigEndianBitConverter converter);
public abstract object decode(byte[] data, MiscUtil.Conversion.BigEndianBitConverter converter, int offset = 0);
public abstract int getLength(byte[] data, MiscUtil.Conversion.BigEndianBitConverter converter, int offset = 0);