// Convert XML Document to a IJPMessage public IJPMessage BuildMessage() { IJPMessage m = null; bool success = true; // Need a XML Document to continue if (xmlDoc == null) { return(m); } try { m = new IJPMessage(); XmlNode prnt = xmlDoc.SelectSingleNode("Label/Printer"); if (success && prnt != null) { success = LoadPrinterSettings(m, prnt); // Send printer wide settings } XmlNode msg = xmlDoc.SelectSingleNode("Label/Message"); if (success && msg != null) { m.Nickname = GetXmlAttr(msg, "Name"); success = AllocateRowsColumns(m, msg.ChildNodes); // Allocate rows and columns } // Send it to the printer (Maybe) if (ijp != null) { ijp.SetMessage(m); } } catch (Exception e1) { EventArgs e = new EventArgs(); Log(this, $"XML To Msg Failed == {e1}"); success = false; } finally { } return(m); }
public string RetrieveXML(IJPMessage m, IJP ijp = null, IJPMessageInfo mInfo = null) { string xml = string.Empty; ItemType itemType; int calBlockNumber = 0; int cntBlockNumber = 0; using (MemoryStream MemStream = new MemoryStream()) { using (XmlTextWriter writer = new XmlTextWriter(MemStream, Encoding.GetEncoding("UTF-8"))) { writer.Formatting = Formatting.Indented; writer.WriteStartDocument(); try { writer.WriteStartElement("Label"); // Start Label { writer.WriteAttributeString("Version", "1"); RetrievePrinterSettings(writer, m, ijp); writer.WriteStartElement("Message"); // Start Message { writer.WriteAttributeString("Layout", m.FormatSetup.ToString()); if (mInfo == null) { writer.WriteAttributeString("Name", m.Nickname); } else { writer.WriteAttributeString("Registration", mInfo.RegistrationNumber.ToString()); writer.WriteAttributeString("GroupNumber", mInfo.GroupNumber.ToString()); writer.WriteAttributeString("Name", mInfo.Nickname); } int item = 0; while (item < m.Items.Count) { writer.WriteStartElement("Column"); // Start Column { int colCount = m.Items[item].PrintLine; writer.WriteAttributeString("InterLineSpacing", m.Items[item].LineSpacing.ToString()); for (int i = item; i < item + colCount; i++) { string text = m.Items[i].Text; int calBlockCount = m.Items[i].CalendarBlockCount; int cntBlockCount = m.Items[i].CountBlockCount; int[] mask = new int[1 + Math.Max(calBlockCount, cntBlockCount)]; itemType = GetItemType(text, ref mask); writer.WriteStartElement("Item"); // Start Item { RetrieveFont(writer, (IJPMessageItem)m.Items[item]); switch (itemType) { case ItemType.Text: break; case ItemType.Date: RetrieveCalendarSettings(writer, calBlockNumber, calBlockCount, m.CalendarConditions, mask); RetrieveShiftSettings(writer, m.ShiftCodes, mask); RetrieveTimeCountSettings(writer, m.TimeCount, mask); calBlockNumber += calBlockCount; break; case ItemType.Counter: RetrieveCounterSettings(writer, cntBlockNumber, cntBlockCount, m.CountConditions); break; default: break; } writer.WriteElementString("Text", FormatText(m.Items[i].Text)); } writer.WriteEndElement(); // End Item } item += colCount; } writer.WriteEndElement(); // End Column } } writer.WriteEndElement(); // End Message } writer.WriteEndElement(); // End Label } catch (Exception e1) { MessageBox.Show($"IJP_XML: {e1.Message}\n{e1.StackTrace}", "EIP I/O Error", MessageBoxButtons.OK); } writer.WriteEndDocument(); writer.Flush(); MemStream.Position = 0; xml = new StreamReader(MemStream).ReadToEnd(); } } return(xml); }
private void RetrieveSubstitutions(XmlTextWriter writer, IJPMessage m, IJP ijp) { int maxSZ = -1; int[] sr = new int[100]; // They are assumed to be 0 for (int i = 0; i < m.CalendarConditions.Count; i++) { IJPCalendarCondition cc = m.CalendarConditions[i]; int n = cc.SubstitutionRuleNumber; maxSZ = Math.Max(maxSZ, n); if (cc.YearSubstitutionRule) { sr[n] |= (int)Ba.Year; } if (cc.MonthSubstitutionRule) { sr[n] |= (int)Ba.Month; } if (cc.DaySubstitutionRule) { sr[n] |= (int)Ba.Day; } if (cc.HourSubstitutionRule) { sr[n] |= (int)Ba.Hour; } if (cc.MinuteSubstitutionRule) { sr[n] |= (int)Ba.Minute; } if (cc.WeekNumberSubstitutionRule) { sr[n] |= (int)Ba.WeekNumber; } if (cc.WeekSubstitutionRule) { sr[n] |= (int)Ba.DayOfWeek; } } for (int i = 1; i <= maxSZ; i++) { if (sr[i] > 0) { IJPSubstitutionRule srs = (IJPSubstitutionRule)ijp.GetSubstitutionRule(i); writer.WriteStartElement("Substitution"); { writer.WriteAttributeString("Delimiter", "/"); writer.WriteAttributeString("StartYear", srs.StartYear.ToString()); writer.WriteAttributeString("RuleNumber", i.ToString()); writer.WriteAttributeString("RuleName", srs.Name); if ((sr[i] & (int)Ba.Year) > 0) { RetrieveSubstitution(writer, srs, Ba.Year, 0, 23); } if ((sr[i] & (int)Ba.Month) > 0) { RetrieveSubstitution(writer, srs, Ba.Month, 1, 12); } if ((sr[i] & (int)Ba.Day) > 0) { RetrieveSubstitution(writer, srs, Ba.Day, 1, 31); } if ((sr[i] & (int)Ba.Hour) > 0) { RetrieveSubstitution(writer, srs, Ba.Hour, 0, 23); } if ((sr[i] & (int)Ba.Minute) > 0) { RetrieveSubstitution(writer, srs, Ba.Minute, 0, 59); } if ((sr[i] & (int)Ba.WeekNumber) > 0) { RetrieveSubstitution(writer, srs, Ba.WeekNumber, 1, 53); } if ((sr[i] & (int)Ba.DayOfWeek) > 0) { RetrieveSubstitution(writer, srs, Ba.DayOfWeek, 1, 7); } } writer.WriteEndElement(); // Substitution } } }
private void RetrieveUserPatternSettings(XmlTextWriter writer, IJPMessage m, IJP ijp) { List <LogoSave> neededLogos = new List <LogoSave>(); for (int i = 0; i < m.Items.Count; i++) { string s = m.Items[i].Text; for (int n = 0; n < s.Length; n++) { char c = s[n]; if (c >= IJPLib_XML.FirstFixedUP && c <= IJPLib_XML.LastFixedUP) { neededLogos.Add(new LogoSave() { fixedStyle = true, dm = m.Items[i].DotMatrix, location = c - IJPLib_XML.FirstFixedUP }); } else if (c >= IJPLib_XML.FirstFreeUP && c <= IJPLib_XML.LastFreeUP) { neededLogos.Add(new LogoSave() { fixedStyle = false, dm = m.Items[i].DotMatrix, location = c - IJPLib_XML.FirstFreeUP }); } } } // Any referenced? if (neededLogos.Count > 0) { // Eliminate duplicates neededLogos = neededLogos.OrderBy(o => o.location).OrderBy(o => o.dm).OrderBy(o => o.fixedStyle).ToList(); for (int i = 0; i < neededLogos.Count - 1; i++) { if (neededLogos[i].Equals(neededLogos[i = 1])) { neededLogos.RemoveAt(i + 1); } } // Output the remainder writer.WriteStartElement("Logos"); // Start Logos { //writer.WriteAttributeString("Folder", Properties.Settings.Default.MessageFolder); // Now write the logos IIJPUserPattern up; for (int i = 0; i < neededLogos.Count; i++) { writer.WriteStartElement("Logo"); // Start Logo { if (neededLogos[i].fixedStyle) { writer.WriteAttributeString("Layout", "Fixed"); up = ijp.GetFixedUserPattern(neededLogos[i].location + 1, neededLogos[i].dm); } else { writer.WriteAttributeString("Layout", "Free"); up = ijp.GetFreeUserPattern(neededLogos[i].location + 1); } writer.WriteAttributeString("DotMatrix", neededLogos[i].dm.ToString()); writer.WriteAttributeString("Location", neededLogos[i].location.ToString()); writer.WriteAttributeString("FileName", ""); writer.WriteAttributeString("Width", up.Pattern.Width.ToString()); writer.WriteAttributeString("Height", up.Pattern.Height.ToString()); writer.WriteAttributeString("RawData", BitMapToRawData(up.Pattern)); } writer.WriteEndElement(); // End Logo } } writer.WriteEndElement(); // End Logos } }
private void RetrievePrinterSettings(XmlTextWriter writer, IJPMessage m, IJP ijp) { writer.WriteStartElement("Printer"); { { writer.WriteAttributeString("Make", "Hitachi"); //IJPUnitInformation ui = (IJPUnitInformation)ijp.GetUnitInformation(); //writer.WriteAttributeString("Model", ui.TypeName); } writer.WriteStartElement("PrintHead"); { writer.WriteAttributeString("Orientation", m.CharacterOrientation.ToString()); } writer.WriteEndElement(); // PrintHead writer.WriteStartElement("ContinuousPrinting"); { writer.WriteAttributeString("RepeatInterval", m.RepeatIntervals.ToString()); writer.WriteAttributeString("PrintsPerTrigger", m.RepeatCount == 0 ? "1" : m.RepeatCount.ToString()); } writer.WriteEndElement(); // ContinuousPrinting writer.WriteStartElement("TargetSensor"); { writer.WriteAttributeString("Filter", m.TargetSensorFilter.ToString()); writer.WriteAttributeString("SetupValue", m.TimeSetup.ToString()); writer.WriteAttributeString("Timer", m.TargetSensorTimer.ToString()); } writer.WriteEndElement(); // TargetSensor writer.WriteStartElement("CharacterSize"); { writer.WriteAttributeString("Width", m.CharacterWidth.ToString()); writer.WriteAttributeString("Height", m.CharacterHeight.ToString()); } writer.WriteEndElement(); // CharacterSize writer.WriteStartElement("PrintStartDelay"); { writer.WriteAttributeString("Forward", m.PrintStartDelayForward.ToString()); writer.WriteAttributeString("Reverse", m.PrintStartDelayReverse.ToString()); } writer.WriteEndElement(); // PrintStartDelay writer.WriteStartElement("EncoderSettings"); { writer.WriteAttributeString("HighSpeedPrinting", m.HiSpeedPrint.ToString()); writer.WriteAttributeString("Divisor", m.PulseRateDivisionFactor.ToString()); writer.WriteAttributeString("ExternalEncoder", m.ProductSpeedMatching.ToString()); } writer.WriteEndElement(); // EncoderSettings writer.WriteStartElement("InkStream"); { writer.WriteAttributeString("InkDropUse", m.InkDropUse.ToString()); writer.WriteAttributeString("ChargeRule", m.InkDropChargeRule.ToString()); } writer.WriteEndElement(); // InkStream if (ijp != null) { writer.WriteStartElement("ClockSystem"); { writer.WriteAttributeString("HourMode24", ijp.GetHourMode24().ToString()); } writer.WriteEndElement(); // ClockSystem RetrieveSubstitutions(writer, m, ijp); RetrieveUserPatternSettings(writer, m, ijp); } } writer.WriteEndElement(); // Printer }
// Main processing loop private void ProcessTasks() { while (true) { pkt = Tasks.Take(); if (pkt.Type == ReqType.Exit) { break; } parent.BeginInvoke(new EventHandler(delegate { Log(this, pkt.ToString() + " Starting!"); })); IX_EventArgs evArgs = new IX_EventArgs(pkt.Type); MsgToXml mtx = null; string indentedView = string.Empty; TreeNode treeNode = null; ObjectDumper od = null; try { switch (pkt.Type) { case ReqType.Connect: Connect(pkt); break; case ReqType.Disconnect: Disconnect(pkt); break; case ReqType.ClearMessage: message = null; break; case ReqType.NewMessage: message = new IJPMessage(); break; case ReqType.GetMessage: message = (IJPMessage)ijp.GetMessage(); break; case ReqType.GetXML: if (message != null) { mtx = new MsgToXml(); string xml = mtx.RetrieveXML(message, ijp, pkt.MessageInfo); ProcessLabel(xml, out string IndentedXML, out TreeNode tnXML); evArgs.Indented = IndentedXML; evArgs.TreeNode = tnXML; } break; case ReqType.GetXMLOnly: if (message != null) { mtx = new MsgToXml(); evArgs.Indented = mtx.RetrieveXML(message, ijp, pkt.MessageInfo); } break; case ReqType.GetObjectSettings: if (message != null) { od = new ObjectDumper(2); od.Dump(message, out indentedView, out treeNode); evArgs.Indented = indentedView; evArgs.TreeNode = treeNode; } break; case ReqType.GetDirectory: evArgs.Mi = ijp.ListMessage(pkt.Start, pkt.End); break; case ReqType.GetSettings: message = (IJPMessage)ijp.GetMessage(); break; case ReqType.SetXML: XmlToMsg xtm = new XmlToMsg(pkt.XML, ijp); message = xtm.BuildMessage(); break; case ReqType.SetComStatus: ijp.SetComPort(pkt.ComStatus); break; case ReqType.SetMessage: if (message != null) { ijp.SetMessage(message); } break; case ReqType.CallMessage: ijp.CallMessage(pkt.MessageNumber); break; case ReqType.SaveMessage: ijp.SaveMessage(pkt.MessageInfo); break; case ReqType.RenameMessage: ijp.RenameMessage(pkt.MessageNumber, pkt.MessageName); break; case ReqType.GetAlarms: evArgs.AlarmHistory = ijp.GetAlarmHistory(pkt.Start, pkt.End); break; case ReqType.GetMisc: object Misc = null; switch (pkt.SubType) { case ReqSubType.UnitInformation: Misc = ijp.GetUnitInformation(); break; case ReqSubType.OperationManagement: Misc = ijp.GetOperationManagement(); break; case ReqSubType.ServiceManagement: Misc = ijp.GetServiceManagement(); break; case ReqSubType.Status: Misc = ijp.GetStatus(); break; case ReqSubType.ComEnvironment: Misc = ijp.GetCommunicationEnvironmentSetup(); break; case ReqSubType.DispEnvironment: Misc = ijp.GetDisplayEnvironmentSetup(); break; case ReqSubType.CircControl: Misc = ijp.GetCirculationControl(); break; case ReqSubType.SoftwareVersion: Misc = ijp.GetSoftwareVersion(); break; default: break; } od = new ObjectDumper(2); od.Dump(Misc, out indentedView, out treeNode); evArgs.Indented = indentedView; evArgs.TreeNode = treeNode; evArgs.SubType = pkt.SubType; break; } } catch (Exception e) { parent.BeginInvoke(new EventHandler(delegate { Log(this, $"IJP_XML: {e.Message} \n{e.StackTrace}"); })); } parent.BeginInvoke(new EventHandler(delegate { Complete(this, evArgs); })); } }
// Load the Calendar and date objects from the XML private bool LoadDateCount(IJPMessage m) { bool success = true; int calBlockNumber = 0; int cntBlockNumber = 0; int[] calStart = new int[Items.Count]; int[] calCount = new int[Items.Count]; int[] countStart = new int[Items.Count]; int[] countCount = new int[Items.Count]; for (int i = 0; i < Items.Count; i++) { IJPMessageItem item = (IJPMessageItem)m.Items[i]; if (Items[i].SelectSingleNode("Date") != null) { calCount[i] = item.CalendarBlockCount; if (calCount[i] > 0) { calStart[i] = calBlockNumber; calBlockNumber += calCount[i]; } } if (Items[i].SelectSingleNode("Counter") != null) { countCount[i] = item.CountBlockCount; if (countCount[i] > 0) { countStart[i] = cntBlockNumber; cntBlockNumber += countCount[i]; } } } for (int i = 0; i < Items.Count; i++) { if (Items[i].SelectSingleNode("Date") != null) { LoadCalendar(m.CalendarConditions, Items[i], calCount[i], calStart[i]); } if (Items[i].SelectSingleNode("Counter") != null) { LoadCount(m.CountConditions, Items[i], countCount[i], countStart[i]); } // Time Count is not by item but are by message. if (Items[i].SelectSingleNode("TimeCount") != null) { m.TimeCount = LoadTimeCount(Items[i].SelectSingleNode("TimeCount")); } // Shift codes are not by item but are by message. if (Items[i].SelectSingleNode("Shifts") != null) { LoadShift(m.ShiftCodes, Items[i].SelectSingleNode("Shifts")); } } Items = null; return(success); }
// Build the structure and load Items private bool AllocateRowsColumns(IJPMessage m, XmlNodeList msg) { XmlNode n; Items = new List <XmlNode>(); bool success = true; int[] columns = new int[100]; int[] ILS = new int[100]; int maxCol = 0; // Count the rows and columns foreach (XmlNode col in msg) { if (col is XmlWhitespace) { continue; } switch (col.Name) { case "Column": columns[maxCol] = 0; int.TryParse(GetXmlAttr(col, "InterLineSpacing"), out ILS[maxCol]); foreach (XmlNode item in col) { if (item is XmlWhitespace) { continue; } switch (item.Name) { case "Item": Items.Add(item); columns[maxCol]++; break; } } maxCol++; break; } } // Allocate the rows and columns int i = 0; for (int col = 0; col < maxCol; col++) { if (columns[col] == 0) { return(false); } m.AddColumn(); m.SetRow(col, (byte)columns[col]); for (int row = 0; row < columns[col]; row++) { IJPMessageItem item = (IJPMessageItem)m.Items[i]; if ((n = Items[i].SelectSingleNode("Font")) != null) { item.DotMatrix = ParseEnum <IJPDotMatrix>(GetXmlAttr(n, "DotMatrix")); item.InterCharacterSpace = (byte)GetXmlAttrN(n, "InterCharacterSpace"); item.LineSpacing = (byte)ILS[col]; item.Bold = (byte)GetXmlAttrN(n, "IncreasedWidth"); item.Text = FormatText(GetXmlValue(Items[i].SelectSingleNode("Text"))); } i++; } } LoadDateCount(m); return(success); }
// Send the Printer Wide Settings private bool LoadPrinterSettings(IJPMessage m, XmlNode pr) { bool success = true; foreach (XmlNode c in pr.ChildNodes) { if (c is XmlWhitespace) { continue; } switch (c.Name) { case "PrintHead": m.CharacterOrientation = ParseEnum <IJPCharacterOrientation>(GetXmlAttr(c, "Orientation")); break; case "ContinuousPrinting": m.RepeatIntervals = (uint)GetXmlAttrN(c, "RepeatInterval"); m.RepeatCount = (ushort)GetXmlAttrN(c, "PrintsPerTrigger"); break; case "TargetSensor": m.TargetSensorFilter = ParseEnum <IJPSensorFilter>(GetXmlAttr(c, "Filter")); m.TimeSetup = (ushort)GetXmlAttrN(c, "SetupValue"); m.TargetSensorTimer = (ushort)GetXmlAttrN(c, "Timer"); break; case "CharacterSize": m.CharacterWidth = (ushort)GetXmlAttrN(c, "Width"); m.CharacterHeight = (byte)GetXmlAttrN(c, "Height"); break; case "PrintStartDelay": m.PrintStartDelayForward = (ushort)GetXmlAttrN(c, "Forward"); m.PrintStartDelayReverse = (ushort)GetXmlAttrN(c, "Reverse"); break; case "EncoderSettings": m.HiSpeedPrint = ParseEnum <IJPHiSpeedPrintType>(GetXmlAttr(c, "HighSpeedPrinting")); m.PulseRateDivisionFactor = (ushort)GetXmlAttrN(c, "Divisor"); m.ProductSpeedMatching = ParseEnum <IJPProductSpeedMatching>(GetXmlAttr(c, "ExternalEncoder")); break; case "InkStream": m.InkDropUse = (byte)GetXmlAttrN(c, "InkDropUse"); m.InkDropChargeRule = ParseEnum <IJPInkDropChargeRule>(GetXmlAttr(c, "ChargeRule")); break; case "Substitution": if (ijp != null) { LoadBuildSubstitution(c); } break; case "ClockSystem": if (ijp != null && bool.TryParse(GetXmlAttr(c, ""), out bool cs)) { ijp.SetHourMode24(cs); } break; case "TimeCount": m.TimeCount = LoadTimeCount(c); break; case "Shifts": LoadShift(m.ShiftCodes, c); break; case "Logos": if (ijp != null) { LoadLogos(c); } break; } } return(success); }