!B (Sandbox) (CE-21795) Importing models with multisubmaterials via fbx switches...
[CRYENGINE.git] / Code / Tools / Statoscope / Statoscope / SocketLogProcessor.cs
blobab4a26107bcb9487bfb4e153b6e4fc3f75a3310d
1 // Copyright 2001-2019 Crytek GmbH / Crytek Group. All rights reserved.
3 using System;
4 using System.IO;
5 using System.Collections.Generic;
6 using System.Linq;
7 using System.Text;
8 using System.Net.Sockets;
9 using System.Windows.Forms;
10 using System.Threading;
12 namespace Statoscope
14 class SocketLogProcessor
16 public LogData ProcessLog(StatoscopeForm ssForm)
18 TcpClient client = null;
19 bool bShouldLogToFile = false;
20 string connectionName = "";
22 using (ConnectMessageBox connectMsgBox = new ConnectMessageBox())
24 bool successful = false;
25 while (!successful)
27 if (connectMsgBox.ShowDialog() == DialogResult.OK)
29 try
31 client = new TcpClient(connectMsgBox.IpAddress, connectMsgBox.Port);
32 bShouldLogToFile = connectMsgBox.logToFileCheckBox.Checked;
33 connectionName = connectMsgBox.ConnectionName;
34 successful = true;
36 catch (Exception ex)
38 ex.ToString();
39 ConnectionErrorDialog ced = new ConnectionErrorDialog();
40 ced.errorLabel.Text += connectMsgBox.IpAddress + ":" + connectMsgBox.Port;
41 ced.ShowDialog();
44 else
46 return null;
51 string logWriteFilename = "";
53 if (bShouldLogToFile)
55 SaveFileDialog fd = new SaveFileDialog();
56 fd.CheckFileExists = false;
57 fd.FileName = "log.bin";
58 fd.Filter = "Binary log files (*.bin)|*.bin|All files (*.*)|*.*";
59 fd.FilterIndex = 0;
61 if (fd.ShowDialog() == DialogResult.OK)
63 logWriteFilename = fd.FileName;
67 SocketSessionInfo sessionInfo = new SocketSessionInfo(connectionName, logWriteFilename);
68 SocketLogData logData = new SocketLogData(sessionInfo);
69 logData.ProcessRecords();
71 List<LogRange> logRanges = new List<LogRange>();
72 LogRange logRange = new LogRange(logData, null);
74 logRanges.Add(logRange);
75 ssForm.AddToLogRangeList(logRange);
77 ssForm.CreateLogControlTabPage(logRanges, connectionName, null);
79 ThreadPool.QueueUserWorkItem(new WaitCallback(ProcessSocketDataStreamCB), new SSocketParseArgs(logData, logWriteFilename, client));
81 return logData;
84 struct SSocketParseArgs
86 public SocketLogData m_logData;
87 public TcpClient m_client;
89 public SSocketParseArgs(SocketLogData logData, string logWriteFilename, TcpClient client)
91 m_logData = logData;
92 m_logData.m_logWriteFilename = logWriteFilename;
93 m_client = client;
97 static void ProcessSocketDataStreamCB(object state)
99 SSocketParseArgs args = (SSocketParseArgs)state;
100 NetworkStream netStream = args.m_client.GetStream();
102 if (args.m_logData.m_logWriteFilename == "")
104 args.m_logData.m_logWriteFilename = Path.GetTempFileName();
105 args.m_logData.m_bTempFile = true;
108 using (SocketLogBinaryDataStream logDataStream = new SocketLogBinaryDataStream(netStream, args.m_logData.m_logWriteFilename))
112 args.m_logData.DataStream = logDataStream;
113 BinaryLogParser logParser = new BinaryLogParser(logDataStream, args.m_logData, "");
114 logParser.ProcessDataStream();
116 catch (Exception)
121 netStream.Close();
122 args.m_client.Close();