public RoomsEvent(byte[] body, TcpClient tcpClient) { this.tcpClient = tcpClient; int pos = 0; int roomCount = Convert.ToInt32(body[pos++]); for (int i = 0; i < roomCount; i++) { int roomId = Convert.ToInt32(body[pos++]); int memberCount = Convert.ToInt32(body[pos++]); List <Player> members = new List <Player>(); for (int memberIndex = 0; memberIndex < memberCount; memberIndex++) { byte userNameLen = body[pos++]; string userName = BinUtil.BytesToString(body, pos, userNameLen); pos += userNameLen; var options = new byte[] { body[pos], body[pos + 1], body[pos + 2] }; pos += 3; members.Add(new Player(userName, options)); } byte battleType = body[pos++]; byte num = body[pos++]; rooms.Add(new GameRoom(roomId, members, battleType, num)); } }
public void crc32Test() { // Use the Assert class to test conditions Crc32 crc32 = new Crc32(); string hash = ""; var str = BinUtil.StringToBytes("The quick brown fox jumps over the lazy dog"); var b = crc32.ComputeHash(str); Console.WriteLine("CRC-32 is {0}", hash); Assert.AreEqual("414FA339", BinUtil.BytesToHexString(b)); }
byte[] CreateHeader(string dataStr, int bodyLen) { byte[] data = new byte[12]; magicNumber.CopyTo(data, 0); BinUtil.StringToBytes(dataStr).CopyTo(data, 2); var bodyLenByte = BitConverter.GetBytes(bodyLen); if (!BitConverter.IsLittleEndian) { Array.Reverse(bodyLenByte); } bodyLenByte.CopyTo(data, 8); return(data); }
public List <byte> GetBytes() { List <byte> body = new List <byte>(); BinUtil.AddBytes(body, startFrame); body.Add(Convert.ToByte(bufferSize)); body.Add(0); foreach (var action in actions) { body.Add(action); } return(body); }
/// <summary> /// Gets the raw IL instructions for this method. /// </summary> /// <returns>raw IL instructions</returns> public byte[] GetBody() { var fs = file.RawFile; fs.BaseStream.Seek(Offset, System.IO.SeekOrigin.Begin); byte format = fs.ReadByte(); int CodeSize = 0; var verytinyheader = format.ConvertByteToBoolArray(); var header = BinUtil.ConvertBoolArrayToByte(new bool[] { verytinyheader[6], verytinyheader[7] }); var sizer = BinUtil.ConvertBoolArrayToByte(new bool[] { verytinyheader[0], verytinyheader[1], verytinyheader[2], verytinyheader[3], verytinyheader[4], verytinyheader[5], }); fs.BaseStream.Seek(Offset + 1, System.IO.SeekOrigin.Begin); byte form2 = fs.ReadByte(); fs.BaseStream.Seek(Offset + 1, System.IO.SeekOrigin.Begin); if (header == 3) //Fat format { byte info2 = fs.ReadByte(); //some info on header ushort MaxStack = fs.ReadUInt16(); CodeSize = (int)fs.ReadUInt32(); uint LocalVarSigTok = fs.ReadUInt32(); } else //Tiny format { CodeSize = sizer; } List <byte> code = new List <byte>(); for (uint i = Offset + 1; i < Offset + 1 + CodeSize; i++) { byte opcode = fs.ReadByte(); code.Add(opcode); } return(code.ToArray()); }
public IServerEvent ReadAndParse(TcpClient client) { TcpConnector connector = client.Connector; byte[] header = new byte[16]; int receiveSize = connector.Receive(header); if (receiveSize <= 0) { return(new ConnectionCloseEvent(connector)); } // magicの照合 bool isMagicCorrect = header.Take(2).SequenceEqual(magicNumber); if (!isMagicCorrect) { return(new UnknownEvent("Invalid magic.")); } // bodyの取得 var bodyLen = BitConverter.ToUInt32(header, 8); byte[] body = new byte[bodyLen]; connector.Receive(body); // hash magicの照合 var hashMagicBytes = hashAlgorithm.ComputeHash(body.Concat(header).ToArray()); var hashMagic = BitConverter.ToUInt32(hashMagicBytes.Reverse().ToArray(), 0); var isHashMagicCorrect = hashMagic == this.hashMagic; if (!isHashMagicCorrect) { return(new UnknownEvent("Invalid hash algorithm magic.")); } // event名の取得 var eventName = BinUtil.BytesToString(header.Skip(2).Take(6).ToArray()); IServerEvent serverEvent; switch (eventName) { case "WELCOM": serverEvent = new WelcomeEvent(); break; case "ROOMS ": serverEvent = new RoomsEvent(body, client); break; case "1ROOM ": serverEvent = new Room1Event(body); break; case "ROOMDL": serverEvent = new RoomDeleteEvent(); break; case "PING ": serverEvent = new PingEvent(body); break; case "START ": serverEvent = new StartEvent(body); break; case "READY ": serverEvent = new ReadyEvent(body); break; case "OKAY ": serverEvent = new OkEvent(body); break; case "PLAY ": serverEvent = new PlayEvent(body); break; case "ACTION": serverEvent = new ActionEvent(body); break; case "FINISH": serverEvent = new FinishEvent(); break; case "ERROR!": serverEvent = new ErrorEvent(); break; default: serverEvent = new UnknownEvent("Unknown event received"); break; } return(serverEvent); }