// 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);
        }
Example #2
0
        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);
        }
Example #3
0
        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
                }
            }
        }
Example #4
0
        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
            }
        }
Example #5
0
        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);
        }