[704] | 1 | using System;
|
---|
| 2 | using System.Collections.Generic;
|
---|
| 3 | using System.Text;
|
---|
| 4 | using System.Xml;
|
---|
| 5 | using HeuristicLab.Core;
|
---|
| 6 | using HeuristicLab.Data;
|
---|
| 7 |
|
---|
| 8 | namespace HeuristicLab.Communication.Data {
|
---|
| 9 | public class Message : ItemBase {
|
---|
| 10 | public string Protocol;
|
---|
| 11 | public string Source;
|
---|
| 12 | public string Destination;
|
---|
| 13 | public DateTime Timestamp;
|
---|
| 14 | public IList<IVariable> Give;
|
---|
| 15 | public IList<IVariable> Expect;
|
---|
| 16 |
|
---|
| 17 | public Message()
|
---|
| 18 | : base() {
|
---|
| 19 | Protocol = "unknown";
|
---|
| 20 | Source = "unknown";
|
---|
| 21 | Destination = "unknown";
|
---|
| 22 | Timestamp = DateTime.Now;
|
---|
| 23 | Give = new List<IVariable>();
|
---|
| 24 | Expect = new List<IVariable>();
|
---|
| 25 | }
|
---|
| 26 |
|
---|
| 27 | #region clone & persistence
|
---|
| 28 | public override object Clone(IDictionary<Guid, object> clonedObjects) {
|
---|
| 29 | Message clone = new Message();
|
---|
| 30 | clonedObjects.Add(Guid, clone);
|
---|
| 31 | clone.Protocol = (string)Protocol.Clone();
|
---|
| 32 | clone.Source = (string)Source.Clone();
|
---|
| 33 | clone.Destination = (string)Destination.Clone();
|
---|
| 34 | clone.Timestamp = new DateTime(Timestamp.Ticks);
|
---|
| 35 | foreach (IVariable var in Give)
|
---|
| 36 | clone.Give.Add((IVariable)var.Clone(clonedObjects));
|
---|
| 37 | foreach (IVariable var in Expect)
|
---|
| 38 | clone.Expect.Add((IVariable)var.Clone(clonedObjects));
|
---|
| 39 | return clone;
|
---|
| 40 | }
|
---|
| 41 |
|
---|
| 42 | public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
|
---|
| 43 | XmlNode node = base.GetXmlNode(name, document, persistedObjects);
|
---|
| 44 | XmlAttribute protoAttrib = document.CreateAttribute("Protocol");
|
---|
| 45 | protoAttrib.Value = (string)Protocol.Clone();
|
---|
| 46 | XmlAttribute sourceAttrib = document.CreateAttribute("Source");
|
---|
| 47 | sourceAttrib.Value = (string)Source.Clone();
|
---|
| 48 | XmlAttribute destinationAttrib = document.CreateAttribute("Destination");
|
---|
| 49 | destinationAttrib.Value = (string)Destination.Clone();
|
---|
| 50 | XmlAttribute timeStampAttrib = document.CreateAttribute("Timestamp");
|
---|
| 51 | StringBuilder tsBuilder = new StringBuilder();
|
---|
| 52 | tsBuilder.Append(Timestamp.Year);tsBuilder.Append("/");
|
---|
| 53 | tsBuilder.Append(Timestamp.Month);tsBuilder.Append("/");
|
---|
| 54 | tsBuilder.Append(Timestamp.Day);tsBuilder.Append(" ");
|
---|
| 55 | tsBuilder.Append(Timestamp.Hour);tsBuilder.Append(":");
|
---|
| 56 | tsBuilder.Append(Timestamp.Minute);tsBuilder.Append(":");
|
---|
| 57 | tsBuilder.Append(Timestamp.Second);tsBuilder.Append(":");
|
---|
| 58 | tsBuilder.Append(Timestamp.Millisecond);
|
---|
| 59 | timeStampAttrib.Value = tsBuilder.ToString();
|
---|
| 60 |
|
---|
| 61 | node.Attributes.Append(protoAttrib);
|
---|
| 62 | node.Attributes.Append(sourceAttrib);
|
---|
| 63 | node.Attributes.Append(destinationAttrib);
|
---|
| 64 | node.Attributes.Append(timeStampAttrib);
|
---|
| 65 |
|
---|
| 66 | XmlNode dataNode = document.CreateNode(XmlNodeType.Element, "Data", null);
|
---|
| 67 | XmlNode giveNode = document.CreateNode(XmlNodeType.Element, "Give", null);
|
---|
| 68 | foreach (IVariable var in Give) {
|
---|
| 69 | XmlNode varNode = document.CreateNode(XmlNodeType.Element, "Parameter", null);
|
---|
| 70 | XmlAttribute varNameAttrib = document.CreateAttribute("Name");
|
---|
| 71 | varNameAttrib.Value = (string)var.Name.Clone();
|
---|
| 72 | varNode.Attributes.Append(varNameAttrib);
|
---|
| 73 | varNode.AppendChild(var.Value.GetXmlNode("Value", document, persistedObjects));
|
---|
| 74 | giveNode.AppendChild(varNode);
|
---|
| 75 | }
|
---|
| 76 | dataNode.AppendChild(giveNode);
|
---|
| 77 | XmlNode expectNode = document.CreateNode(XmlNodeType.Element, "Expect", null);
|
---|
| 78 | foreach (IVariable var in Expect) {
|
---|
| 79 | XmlNode varNode = document.CreateNode(XmlNodeType.Element, "Parameter", null);
|
---|
| 80 | XmlAttribute varNameAttrib = document.CreateAttribute("Name");
|
---|
| 81 | varNameAttrib.Value = (string)var.Name.Clone();
|
---|
| 82 | varNode.Attributes.Append(varNameAttrib);
|
---|
| 83 | varNode.AppendChild(var.Value.GetXmlNode("Value", document, persistedObjects));
|
---|
| 84 | expectNode.AppendChild(varNode);
|
---|
| 85 | }
|
---|
| 86 | dataNode.AppendChild(expectNode);
|
---|
| 87 | node.AppendChild(dataNode);
|
---|
| 88 | return node;
|
---|
| 89 | }
|
---|
| 90 |
|
---|
| 91 | public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
|
---|
| 92 | base.Populate(node, restoredObjects);
|
---|
| 93 | Protocol = node.Attributes.GetNamedItem("Protocol").Value;
|
---|
| 94 | Source = node.Attributes.GetNamedItem("Source").Value;
|
---|
| 95 | Destination = node.Attributes.GetNamedItem("Destination").Value;
|
---|
| 96 | string ts = node.Attributes.GetNamedItem("Timestamp").Value;
|
---|
| 97 | string[] tsTokens = ts.Split(new string[] { "/", " ", ":" }, StringSplitOptions.RemoveEmptyEntries);
|
---|
| 98 | int year = int.Parse(tsTokens[0]);
|
---|
| 99 | int month = int.Parse(tsTokens[1]);
|
---|
| 100 | int day = int.Parse(tsTokens[2]);
|
---|
| 101 | int hour = int.Parse(tsTokens[3]);
|
---|
| 102 | int minute = int.Parse(tsTokens[4]);
|
---|
| 103 | int seconds = int.Parse(tsTokens[5]);
|
---|
| 104 | int milliseconds = int.Parse(tsTokens[6]);
|
---|
| 105 | Timestamp = new DateTime(year, month, day, hour, minute, seconds, milliseconds);
|
---|
| 106 | XmlNode dataNode = node.SelectSingleNode("Data");
|
---|
| 107 | XmlNode giveNode = dataNode.SelectSingleNode("Give");
|
---|
| 108 | XmlNodeList giveParams = giveNode.SelectNodes("Parameter");
|
---|
| 109 | Give = new List<IVariable>();
|
---|
| 110 | foreach (XmlNode n in giveParams) {
|
---|
| 111 | Give.Add(new Variable(n.Attributes.GetNamedItem("Name").Value, (IItem)PersistenceManager.Restore(n.SelectSingleNode("Value"), restoredObjects)));
|
---|
| 112 | }
|
---|
| 113 | XmlNode expectNode = dataNode.SelectSingleNode("Expect");
|
---|
| 114 | XmlNodeList expectParams = expectNode.SelectNodes("Parameter");
|
---|
| 115 | Expect = new List<IVariable>();
|
---|
| 116 | foreach (XmlNode n in expectParams) {
|
---|
| 117 | Expect.Add(new Variable(n.Attributes.GetNamedItem("Name").Value, (IItem)PersistenceManager.Restore(n.SelectSingleNode("Value"), restoredObjects)));
|
---|
| 118 | }
|
---|
| 119 | }
|
---|
| 120 | #endregion
|
---|
| 121 | }
|
---|
| 122 | }
|
---|