119 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			119 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.Collections.Generic;
 | |
| using System.Linq;
 | |
| using System.Text;
 | |
| using System.Threading.Tasks;
 | |
| using System.Runtime.Serialization.Formatters.Binary;
 | |
| using System.Runtime.Serialization;
 | |
| using System.IO;
 | |
| 
 | |
| namespace EduNetworkBuilder
 | |
| {
 | |
|     /// <summary>
 | |
|     /// This tracks everything that happened to a packet in transit
 | |
|     /// </summary>
 | |
|     /// 
 | |
|     [Serializable]
 | |
|     public struct DebugMessage
 | |
|     {
 | |
|         public DebugLevel WhatLevel;
 | |
|         public string HostName;
 | |
|         public string Message;
 | |
|         public DebugMessage(DebugLevel tLevel, string tHost, string tMessage)
 | |
|         {
 | |
|             WhatLevel = tLevel;
 | |
|             HostName = tHost;
 | |
|             Message = tMessage;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     [Serializable]
 | |
|     public class PacketMessage
 | |
|     {
 | |
|         public List<DebugMessage> Messages = new List<DebugMessage>();
 | |
|         public string _Status = ""; //Usually "success" or "failed"
 | |
|         public bool Finished = false;
 | |
|         public TimeSpan duration;
 | |
|         public string Status
 | |
|         {
 | |
|              get { return _Status; }
 | |
|              set { if (!Finished) _Status = value; }
 | |
|         }
 | |
| 
 | |
|         public PacketMessage() { }
 | |
|         public PacketMessage(string Host, string OneMessage)
 | |
|         {
 | |
|             DebugMessage DM = new DebugMessage(DebugLevel.info, Host, OneMessage);
 | |
|             Status = OneMessage;
 | |
|             Messages.Add(DM);
 | |
|         }
 | |
| 
 | |
|         public static T Clone<T>(T source)
 | |
|         {
 | |
|             if (!typeof(T).IsSerializable)
 | |
|             {
 | |
|                 throw new ArgumentException(NB.Translate("NC_CloneSerialzable"), NB.Translate("_source"));
 | |
|             }
 | |
| 
 | |
|             // Don't serialize a null object, simply return the default for that object
 | |
|             if (Object.ReferenceEquals(source, null))
 | |
|             {
 | |
|                 return default(T);
 | |
|             }
 | |
| 
 | |
|             IFormatter formatter = new BinaryFormatter();
 | |
|             Stream stream = new MemoryStream();
 | |
|             using (stream)
 | |
|             {
 | |
|                 formatter.Serialize(stream, source);
 | |
|                 stream.Seek(0, SeekOrigin.Begin);
 | |
|                 return (T)formatter.Deserialize(stream);
 | |
|             }
 | |
|         }
 | |
| 
 | |
| 
 | |
| 
 | |
|         public void AddMessage(DebugLevel tLevel, string tHost, string tMessage)
 | |
|         {
 | |
|             if(!Finished)
 | |
|                 Messages.Add(new DebugMessage(tLevel, tHost, tMessage));
 | |
|         }
 | |
| 
 | |
|         public void AddMessage(DebugLevel tLevel, NetworkComponent tHost, string tMessage)
 | |
|         {
 | |
|             string host = NB.Translate("PM_UnknownHost");
 | |
|             if (tHost != null)
 | |
|                 host = tHost.hostname;
 | |
|             if(! Finished)
 | |
|                 Messages.Add(new DebugMessage(tLevel, host, tMessage));
 | |
|         }
 | |
| 
 | |
|         public List<string> GetMessagesLike(DebugLevel tLevel)
 | |
|         {
 | |
|             List<string> answer = new List<string>();
 | |
|             string tString;
 | |
|             foreach( DebugMessage tmessage in Messages)
 | |
|             {
 | |
|                 if((tmessage.WhatLevel | tLevel) == tLevel)
 | |
|                 {
 | |
|                     tString = NB.LeftPad(tmessage.HostName) + " " + NB.LeftPad(tmessage.WhatLevel.ToString()) + " " + tmessage.Message;
 | |
|                     answer.Add(tString);
 | |
|                 }
 | |
|             }
 | |
|             return answer;
 | |
|         }
 | |
| 
 | |
|         public List<string> GetMessagesSummary()
 | |
|         {
 | |
|             List<string> answer = new List<string>();
 | |
|             string tString;
 | |
|             int time = duration.Seconds * 1000 + duration.Milliseconds;
 | |
|             tString = NB.LeftPad(time.ToString() + "ms ", 10) + Status;
 | |
|             answer.Add(tString);
 | |
|             return answer;
 | |
|         }
 | |
| 
 | |
| 
 | |
|     }
 | |
| }
 |