private void ParseIntoTree(DemoFile.DemoMessage msg) { var node = new TreeNode(String.Format("{0}, tick {1}, {2} bytes", msg.Type, msg.Tick, msg.Data.Length)); node.Expand(); node.BackColor = DemoMessageItem.GetTypeColor(msg.Type); switch (msg.Type) { case DemoFile.MessageType.ConsoleCmd: node.Nodes.Add(Encoding.ASCII.GetString(msg.Data)); break; case DemoFile.MessageType.UserCmd: UserCmd.ParseIntoTreeNode(msg.Data, node); break; case DemoFile.MessageType.Signon: case DemoFile.MessageType.Packet: Packet.Parse(msg.Data, node); break; case DemoFile.MessageType.DataTables: DataTables.Parse(msg.Data, node); break; default: node.Nodes.Add("Unhandled demo message type."); break; } messageTree.Nodes.Add(node); }
private void openToolStripMenuItem_Click(object sender, EventArgs e) { var ofd = new OpenFileDialog { Filter = "Demo files|*.dem", RestoreDirectory = true }; if (ofd.ShowDialog() == DialogResult.OK) { messageList.Items.Clear(); Stream f = ofd.OpenFile(); _currentFile = new DemoFile(f); f.Close(); foreach (var msg in _currentFile.Messages) { messageList.Items.Add(new DemoMessageItem(msg)); } } propertiesToolStripMenuItem.Enabled = true; }
public static Color GetTypeColor(DemoFile.MessageType type) { switch(type) { case DemoFile.MessageType.Signon: case DemoFile.MessageType.Packet: return Color.LightBlue; case DemoFile.MessageType.UserCmd: return Color.LightGreen; case DemoFile.MessageType.ConsoleCmd: return Color.LightPink; default: return Color.White; } }
public DemoMessageItem(DemoFile.DemoMessage msg) { Msg = msg; BackColor = GetTypeColor(msg.Type); Text = Msg.Tick.ToString(); SubItems.Add(Msg.Type.ToString()); SubItems.Add(Msg.Data.Length.ToString()); }
private TreeNode ParseIntoTree(DemoFile.DemoMessage msg) { var node = new TreeNode(String.Format("{0}, tick {1}, {2} bytes", msg.Type, msg.Tick, msg.Data.Length)); node.Expand(); node.BackColor = DemoMessageItem.GetTypeColor(msg.Type); Packet packet = new Packet(); packet.StringTable = _stringTable; packet.List = eventsList; if (_currentFile.GameEvents.Count != 0) packet.GameEvents = _currentFile.GameEvents; switch (msg.Type) { case DemoFile.MessageType.ConsoleCmd: node.Nodes.Add(new TreeNode(Encoding.ASCII.GetString(msg.Data))); break; case DemoFile.MessageType.UserCmd: UserCmd.ParseIntoTreeNode(msg.Data, node); break; case DemoFile.MessageType.Signon: case DemoFile.MessageType.Packet: try { packet.Parse(msg.Data, node); } catch (IndexOutOfRangeException ex) { // There was some error reading the buffers node.Nodes.Add(new TreeNode("Error reading message.")); MessageBox.Show("Error reading message: " + msg.Tick); break; } if (packet.GameEvents.Count > 0 && _currentFile.GameEvents.Count == 0) _currentFile.GameEvents = packet.GameEvents; break; case DemoFile.MessageType.DataTables: DataTables.Parse(msg.Data, node); break; default: node.Nodes.Add(new TreeNode("Unhandled demo message type.")); break; } return node; }