EduNetworkBuilder/EduNetworkBuilder/NetworkComponent.cs

109 lines
2.5 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Drawing;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization;
using System.IO;
using System.Xml;
namespace EduNetworkBuilder
{
[Serializable]
public class NetworkComponent
{
public bool IsDirty = true; //If something has changed and it needs to be re-drawn. It starts as "true"
protected int UniqueIdentifier = NB.GetUniqueIdentifier();
public string hostname = "";
public virtual void Print(Image BaseImage, bool DrawTitle)
{
}
public virtual bool HasMac(string MAC)
{
return false;
}
public virtual void ProcessPacket(Packet tPacket)
{
}
public virtual void Destroy()
{
//This really does nothing. But the link will trigger some stuff needing to be done
}
public virtual List<string> arp(UInt32 IP)
{
List<string> arps = new List<string>();
return arps; //links have no MAC addresses
}
public virtual void Save(XmlWriter writer)
{
}
public virtual void Load(XmlNode theNode)
{
}
public virtual void UpdateFromComponent(NetworkComponent CopyFrom)
{
}
public virtual void DoProcessing(Packet tPacket)
{
}
public virtual void DoMoving(Packet tPacket)
{
}
public virtual void DoInput(Packet tPacket)
{
}
public virtual void DoOutput(Packet tPacket)
{
}
public int GetUniqueIdentifier
{
get { return UniqueIdentifier; }
}
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);
}
}
}
}