コード例 #1
0
        public string ProductionResponse(ProductionEventArgs e)
        {
            switch (e.listenerType)
            {
            case ListenerType.TCP:
                return(TcpProductionResponse(e));

            case ListenerType.EIP:
                return(EipProductionResponse(e));

            case ListenerType.PCCC:
                return(PcccProductionResponse(e));

            default:
                return("");
            }
        }
コード例 #2
0
        public void PcccProductionResponse(ProductionEventArgs e)
        {
            var retArr = new short[50];

            if (e.InTagName == "N197:0")
            {
                e.OutTagName = "N198:0";
            }
            else if (e.InTagName == "N207:0")
            {
                e.OutTagName = "N208:0";
            }
            else if (e.InTagName == "N217:0")
            {
                e.OutTagName = "N218:0";
            }
            else
            {
                e.OutTagName = e.InTagName;
            }

            var cellArr = Util.StringToAbIntArray(e.CellId);

            Array.Copy(cellArr, 0, retArr, 0, cellArr.Length);

            var itemArr = Util.StringToAbIntArray(e.ItemId);

            Array.Copy(itemArr, 0, retArr, 5, itemArr.Length);

            Array.Copy(e.ResponseArray, 18, retArr, 18, 32);

            var s = new PlcWriter();

            if (e.UsePlcFive)
            {
                s.PlcResponse(e.SenderIp, retArr, e.OutTagName);
            }
            else if (e.UsePlcMicrologix)
            {
                s.MicroLogixResponse(e.SenderIp, retArr, e.OutTagName);
            }
            else
            {
                s.SlcResponse(e.SenderIp, retArr, e.OutTagName);
            }
        }
コード例 #3
0
        public string TcpProductionResponse(ProductionEventArgs e)
        {
            string responseString;

            if (e.UseJson)
            {
                e.ProcessIndicator = e.ResponseArray[18];
                e.SuccessIndicator = e.ResponseArray[19];
                e.FaultCode        = e.ResponseArray[20];
                e.StatusCode       = e.ResponseArray[21];
                var tempList = new List <string>();
                for (var i = 22; i < e.ResponseArray.Length; i++)
                {
                    tempList.Add(e.ResponseArray[i].ToString());
                }
                e.ProcessHistoryValues = tempList.ToArray();

                responseString = Newtonsoft.Json.JsonConvert.SerializeObject(e);
            }
            else
            {
                var sb = new StringBuilder();
                sb.Append(e.CellId + ",");
                sb.Append(e.ItemId + ",");
                sb.Append(e.GeneratedBarcode);

                for (var i = 18; i < e.ResponseArray.Length; i++)
                {
                    sb.Append(",");
                    sb.Append(e.ResponseArray[i].ToString());
                }

                responseString = sb.ToString();
            }
            var stream  = e.Client.GetStream();
            var outData = Encoding.ASCII.GetBytes(responseString);

            if (Logger.Enabled)
            {
                Logger.Log(string.Format("Sending: {0}", responseString));
            }

            stream.Write(outData, 0, outData.Length);
            return("GOOD");
        }
コード例 #4
0
ファイル: Program.cs プロジェクト: jon511/PlcListener
        private static void L_ProductionReceived(object sender, OESListener.ProductionEventArgs e)
        {
            //if (Logger.LogToConsole)
            //{
            //    Logger.Log(e.CellId);
            //    Logger.Log(e.ItemId);
            //    Logger.Log(e.GeneratedBarcode);
            //    Logger.Log(e.StatusCode.ToString());
            //    Logger.Log(e.FaultCode.ToString());
            //}

            e.ResponseArray[18] = e.ProcessIndicator;
            e.ResponseArray[19] = e.SuccessIndicator;
            e.ResponseArray[20] = e.FaultCode;
            e.ResponseArray[21] = 1;

            e.ResponseArray[22] = e.P_Val_1;
            e.ResponseArray[23] = e.P_Val_2;
            e.ResponseArray[24] = e.P_Val_3;
            e.ResponseArray[25] = e.P_Val_4;
            e.ResponseArray[26] = e.P_Val_5;
            e.ResponseArray[27] = e.P_Val_6;
            e.ResponseArray[28] = e.P_Val_7;
            e.ResponseArray[29] = e.P_Val_8;
            e.ResponseArray[30] = e.P_Val_9;
            e.ResponseArray[31] = e.P_Val_10;
            e.ResponseArray[32] = e.P_Val_11;
            e.ResponseArray[33] = e.P_Val_12;
            e.ResponseArray[34] = e.P_Val_13;
            e.ResponseArray[35] = e.P_Val_14;
            e.ResponseArray[36] = e.P_Val_15;
            e.ResponseArray[37] = e.P_Val_16;
            e.ResponseArray[38] = e.P_Val_17;
            e.ResponseArray[39] = e.P_Val_18;
            e.ResponseArray[40] = e.P_Val_19;
            e.ResponseArray[41] = e.P_Val_20;
            e.ResponseArray[42] = e.P_Val_21;
            e.ResponseArray[43] = e.P_Val_22;

            var resp = new OESListener.ListenerResponse();

            resp.ProductionResponse(e);
        }
コード例 #5
0
        public string EipProductionResponse(ProductionEventArgs e)
        {
            var retArr = new short[50];

            if (e.InTagName == "N197[0]")
            {
                e.OutTagName = "N198[0]";
            }
            else if (e.InTagName == "N207[0]")
            {
                e.OutTagName = "N208[0]";
            }
            else if (e.InTagName == "N217[0]")
            {
                e.OutTagName = "N218[0]";
            }
            else
            {
                e.OutTagName = e.InTagName;
            }

            var cellArr = Util.StringToAbIntArray(e.CellId);

            Array.Copy(cellArr, 0, retArr, 0, cellArr.Length);

            var itemArr = Util.StringToAbIntArray(e.ItemId);

            Array.Copy(itemArr, 0, retArr, 5, itemArr.Length);

            Array.Copy(e.ResponseArray, 18, retArr, 18, 32);


            var s      = new PlcWriter();
            var status = s.LogixResponse(e.SenderIp, retArr, e.OutTagName);

            if (Logger.Enabled)
            {
                Logger.Log("listener complete");
            }

            return(status);
        }
コード例 #6
0
        public void ProductionResponse(ProductionEventArgs e)
        {
            switch (e.listenerType)
            {
            case ListenerType.TCP:
                TcpProductionResponse(e);
                break;

            case ListenerType.EIP:
                EipProductionResponse(e);
                break;

            case ListenerType.PCCC:
                PcccProductionResponse(e);
                break;

            default:
                break;
            }
        }
 protected virtual void OnProductionReceived(ProductionEventArgs e)
 {
     ProductionReceived?.Invoke(this, e);
 }
        protected void ParseProductionTransaction(string senderIp, short[] dataArray, string tagName, bool usePlcFive = false, bool useMicroLogix = false)
        {
            var e = new ProductionEventArgs(senderIp);

            e.InTagName = tagName;
            if (e.InTagName.Contains(":"))
            {
                e.listenerType = ListenerType.PCCC;
            }
            else
            {
                e.listenerType = ListenerType.EIP;
            }

            e.UsePlcFive       = usePlcFive;
            e.UsePlcMicrologix = useMicroLogix;

            var bytes = new List <byte>();

            for (int i = 0; i < 5; i++)
            {
                var b1 = (byte)((dataArray[i] & 0xff00) >> 8);
                var b2 = (byte)(dataArray[i] & 0x00ff);
                if (b1 != 0)
                {
                    bytes.Add(b1);
                }

                if (b2 != 0)
                {
                    bytes.Add(b2);
                }
            }

            e.CellId = Encoding.Default.GetString(bytes.ToArray());

            bytes = new List <byte>();
            for (var i = 5; i < 11; i++)
            {
                var b1 = (byte)((dataArray[i] & 0xff00) >> 8);
                var b2 = (byte)(dataArray[i] & 0x00ff);
                if (b1 != 0)
                {
                    bytes.Add(b1);
                }

                if (b2 != 0)
                {
                    bytes.Add(b2);
                }
            }

            e.ItemId = Encoding.Default.GetString(bytes.ToArray());

            bytes = new List <byte>();
            //{
            //    (byte)((dataArray[11] & 0xff00) >> 8),
            //    (byte)(dataArray[11] & 0x00ff)
            //};

            for (var i = 11; i < 12; i++)
            {
                var b1 = (byte)((dataArray[i] & 0xff00) >> 8);
                var b2 = (byte)(dataArray[i] & 0x00ff);
                if (b1 != 0)
                {
                    bytes.Add(b1);
                }

                if (b2 != 0)
                {
                    bytes.Add(b2);
                }
            }

            e.GeneratedBarcode = Encoding.Default.GetString(bytes.ToArray());

            e.In_Word_0  = dataArray[0];
            e.In_Word_1  = dataArray[1];
            e.In_Word_2  = dataArray[2];
            e.In_Word_3  = dataArray[3];
            e.In_Word_4  = dataArray[4];
            e.In_Word_5  = dataArray[5];
            e.In_Word_6  = dataArray[6];
            e.In_Word_7  = dataArray[7];
            e.In_Word_8  = dataArray[8];
            e.In_Word_9  = dataArray[9];
            e.In_Word_10 = dataArray[10];
            e.In_Word_11 = dataArray[11];


            e.ProcessIndicator = dataArray[18];
            e.SuccessIndicator = dataArray[19];
            e.FaultCode        = dataArray[20];

            e.P_Val_1  = dataArray[22];
            e.P_Val_2  = dataArray[23];
            e.P_Val_3  = dataArray[24];
            e.P_Val_4  = dataArray[25];
            e.P_Val_5  = dataArray[26];
            e.P_Val_6  = dataArray[27];
            e.P_Val_7  = dataArray[28];
            e.P_Val_8  = dataArray[29];
            e.P_Val_9  = dataArray[30];
            e.P_Val_10 = dataArray[31];
            e.P_Val_11 = dataArray[32];
            e.P_Val_12 = dataArray[33];
            e.P_Val_13 = dataArray[34];
            e.P_Val_14 = dataArray[35];
            e.P_Val_15 = dataArray[36];
            e.P_Val_16 = dataArray[37];
            e.P_Val_17 = dataArray[38];
            e.P_Val_18 = dataArray[39];
            e.P_Val_19 = dataArray[40];
            e.P_Val_20 = dataArray[41];
            e.P_Val_21 = dataArray[42];
            e.P_Val_22 = dataArray[43];
            e.P_Val_23 = dataArray[44];
            e.P_Val_24 = dataArray[45];
            e.P_Val_25 = dataArray[46];
            e.P_Val_26 = dataArray[47];
            e.P_Val_27 = dataArray[48];
            e.P_Val_28 = dataArray[49];

            OnProductionReceived(e);
        }
コード例 #9
0
        public void EipProductionResponse(ProductionEventArgs e)
        {
            var retArr = new short[50];

            if (e.InTagName == "N197[0]")
            {
                e.OutTagName = "N198[0]";
            }
            else if (e.InTagName == "N207[0]")
            {
                e.OutTagName = "N208[0]";
            }
            else if (e.InTagName == "N217[0]")
            {
                e.OutTagName = "N218[0]";
            }
            else
            {
                e.OutTagName = e.InTagName;
            }

            var cellArr = Util.StringToAbIntArray(e.CellId);

            Array.Copy(cellArr, 0, retArr, 0, cellArr.Length);

            var itemArr = Util.StringToAbIntArray(e.ItemId);

            Array.Copy(itemArr, 0, retArr, 5, itemArr.Length);

            Array.Copy(e.ResponseArray, 18, retArr, 18, 32);

            //retArr[18] = Convert.ToInt16(e.ProcessIndicator);
            //retArr[19] = Convert.ToInt16(e.SuccessIndicator);
            //retArr[20] = 0;
            //retArr[21] = Convert.ToInt16(e.FaultCode);
            //retArr[22] = e.P_Val_1;
            //retArr[23] = e.P_Val_2;
            //retArr[24] = e.P_Val_3;
            //retArr[25] = e.P_Val_4;
            //retArr[26] = e.P_Val_5;
            //retArr[27] = e.P_Val_6;
            //retArr[28] = e.P_Val_7;
            //retArr[29] = e.P_Val_8;
            //retArr[30] = e.P_Val_9;
            //retArr[31] = e.P_Val_10;
            //retArr[32] = e.P_Val_11;
            //retArr[33] = e.P_Val_12;
            //retArr[34] = e.P_Val_13;
            //retArr[35] = e.P_Val_14;
            //retArr[36] = e.P_Val_15;
            //retArr[37] = e.P_Val_16;
            //retArr[38] = e.P_Val_17;
            //retArr[39] = e.P_Val_18;
            //retArr[40] = e.P_Val_19;
            //retArr[41] = e.P_Val_20;
            //retArr[42] = e.P_Val_21;
            //retArr[43] = e.P_Val_22;
            //retArr[44] = e.P_Val_23;
            //retArr[45] = e.P_Val_24;
            //retArr[46] = e.P_Val_25;
            //retArr[47] = e.P_Val_26;
            //retArr[48] = e.P_Val_27;
            //retArr[49] = e.P_Val_28;

            var s = new PlcWriter();

            s.LogixResponse(e.SenderIp, retArr, e.OutTagName);
            if (Logger.Enabled)
            {
                Logger.Log("listener complete");
            }
        }
コード例 #10
0
        public void TcpProductionResponse(ProductionEventArgs e)
        {
            string responseString;

            if (e.UseJson)
            {
                e.ProcessIndicator = e.ResponseArray[18];
                e.SuccessIndicator = e.ResponseArray[19];
                e.FaultCode        = e.ResponseArray[20];
                e.StatusCode       = e.ResponseArray[21];
                var tempList = new List <string>();
                for (var i = 22; i < e.ResponseArray.Length; i++)
                {
                    tempList.Add(e.ResponseArray[i].ToString());
                }
                e.ProcessHistoryValues = tempList.ToArray();

                responseString = Newtonsoft.Json.JsonConvert.SerializeObject(e);
            }
            else
            {
                var sb = new StringBuilder();
                sb.Append(e.CellId);
                sb.Append(",");
                sb.Append(e.ItemId);
                sb.Append(",");
                sb.Append(e.GeneratedBarcode);
                sb.Append(",");
                //sb.Append(e.ProcessIndicator);
                //sb.Append(e.ResponseArray[18].ToString());
                //sb.Append(",");
                ////sb.Append(e.SuccessIndicator);
                //sb.Append(e.ResponseArray[19].ToString());
                //sb.Append(",");
                ////sb.Append(e.FaultCode);
                //sb.Append(e.ResponseArray[20].ToString());
                //sb.Append(",");
                ////sb.Append(e.StatusCode);
                //sb.Append(e.ResponseArray[21].ToString());

                for (var i = 18; i < e.ResponseArray.Length; i++)
                {
                    sb.Append(",");
                    sb.Append(e.ResponseArray[i].ToString());
                }

                //foreach (var item in e.ProcessHistoryValues)
                //{
                //    sb.Append(",");
                //    sb.Append(item);
                //}

                //sb.Append(",");
                //sb.Append(string.Format("{0}", (e.ResponseArray[24] + (e.ResponseArray[25] * .01))));
                //sb.Append(",");
                //sb.Append(string.Format("{0}", (e.ResponseArray[26] + (e.ResponseArray[27] * .01))));
                //sb.Append(",");
                //sb.Append(string.Format("{0}", (e.ResponseArray[28] + (e.ResponseArray[29] * .01))));
                //sb.Append(",");
                //sb.Append(string.Format("{0}", (e.ResponseArray[30] + (e.ResponseArray[31] * .01))));
                //sb.Append(",");
                //sb.Append(string.Format("{0}", (e.ResponseArray[32] + (e.ResponseArray[33] * .01))));
                //sb.Append(",");
                //sb.Append(string.Format("{0}", (e.ResponseArray[34] + (e.ResponseArray[35] * .01))));
                //sb.Append(",");
                //sb.Append(string.Format("{0}", (e.ResponseArray[36] + (e.ResponseArray[37] * .01))));
                //sb.Append(",");
                //sb.Append(string.Format("{0}", (e.ResponseArray[38] + (e.ResponseArray[39] * .01))));
                //sb.Append(",");
                //sb.Append(string.Format("{0}", (e.ResponseArray[40] + (e.ResponseArray[41] * .01))));
                //sb.Append(",");
                //sb.Append(string.Format("{0}", (e.ResponseArray[42] + (e.ResponseArray[43] * .01))));
                //sb.Append(",");
                //sb.Append(string.Format("{0}", (e.ResponseArray[44] + (e.ResponseArray[45] * .01))));
                //sb.Append(",");
                //sb.Append(string.Format("{0}", (e.ResponseArray[46] + (e.ResponseArray[47] * .01))));
                //sb.Append(",");
                //sb.Append(string.Format("{0}", (e.ResponseArray[48] + (e.ResponseArray[49] * .01))));
                responseString = sb.ToString();
            }
            var stream  = e.Client.GetStream();
            var outData = Encoding.ASCII.GetBytes(responseString);

            stream.Write(outData, 0, outData.Length);
        }
コード例 #11
0
ファイル: Listener.cs プロジェクト: jon511/PlcListener
 private void TcpListener_ProductionReceived(object sender, ProductionEventArgs e)
 {
     OnProductionReceived(e);
 }
コード例 #12
0
        private void HandleMessage(TcpClient client)
        {
            //var senderIP = ((IPEndPoint)client.Client.RemoteEndPoint).Address.ToString();
            var bytes = new byte[1024];

            var stream = client.GetStream();
            int i;

            try
            {
                while ((i = stream.Read(bytes, 0, bytes.Length)) != 0 && client != null)
                {
                    var receivedBytes = new byte[i];
                    Buffer.BlockCopy(bytes, 0, receivedBytes, 0, i);
                    var inString = Encoding.Default.GetString(receivedBytes).Trim();

                    //check if incoming string is valid json
                    if (inString.StartsWith("{") && inString.EndsWith("}"))
                    {
                        if (Logger.Enabled)
                        {
                            Logger.Log(string.Format("json data received from : {0}", ((IPEndPoint)client.Client.RemoteEndPoint).Address.ToString()));
                        }

                        ReceiveData jsonData;
                        try
                        {
                            jsonData = Newtonsoft.Json.JsonConvert.DeserializeObject <ReceiveData>(inString);
                            switch (jsonData.Command)
                            {
                            case "PROD":
                                var p = new ProductionEventArgs(client);
                                p.SenderIp         = ((IPEndPoint)client.Client.RemoteEndPoint).Address.ToString();
                                p.CellId           = jsonData.CellId;
                                p.ItemId           = jsonData.ItemId;
                                p.ProcessIndicator = jsonData.RequestCode;
                                p.SuccessIndicator = jsonData.Status;
                                p.FaultCode        = jsonData.FailureCode;
                                p.StatusCode       = jsonData.Status;
                                p.GeneratedBarcode = (string.IsNullOrEmpty(jsonData.GeneratedBarcode)) ? "" : (jsonData.GeneratedBarcode.Length == 2) ? jsonData.GeneratedBarcode : "";


                                var cellIdArray           = Util.StringToAbIntArray(p.CellId);
                                var itemIdArray           = Util.StringToAbIntArray(p.ItemId);
                                var generatedBarcodeArray = Util.StringToAbIntArray(p.GeneratedBarcode);

                                //Array.Copy(cellIdArray, 0, p.ResponseArray, 0, cellIdArray.Length);
                                //Array.Copy(itemIdArray, 0, p.ResponseArray, 5, itemIdArray.Length);
                                //Array.Copy(generatedBarcodeArray, 0, p.ResponseArray, 11, generatedBarcodeArray.Length);

                                short[] sArr    = new short[28];
                                var     pointer = 0;

                                for (var di = 0; di < jsonData.ProcessHistoryValues.Length; di++)
                                {
                                    var s1 = jsonData.ProcessHistoryValues[di];
                                    if (s1.Contains("."))
                                    {
                                        double.TryParse(s1, out double dResult);
                                        var temp1 = Math.Truncate(dResult);
                                        var temp2 = dResult - temp1;
                                        var temp3 = temp2 * 100;
                                        var myArr = s1.Split('.');
                                        //short.TryParse(myArr[0], out short prodShort);
                                        sArr[pointer] = Convert.ToInt16(temp1);
                                        pointer++;
                                        //short.TryParse(myArr[1], out short prodShort1);
                                        sArr[pointer] = Convert.ToInt16(temp3);
                                        pointer++;
                                    }
                                    else
                                    {
                                        short.TryParse(s1, out short prodShort);
                                        sArr[pointer] = prodShort;
                                        pointer++;
                                        sArr[pointer] = 0;
                                        pointer++;
                                    }
                                }

                                p.P_Val_1  = sArr[0];
                                p.P_Val_2  = sArr[1];
                                p.P_Val_3  = sArr[2];
                                p.P_Val_4  = sArr[3];
                                p.P_Val_5  = sArr[4];
                                p.P_Val_6  = sArr[5];
                                p.P_Val_7  = sArr[6];
                                p.P_Val_8  = sArr[7];
                                p.P_Val_9  = sArr[8];
                                p.P_Val_10 = sArr[9];
                                p.P_Val_11 = sArr[10];
                                p.P_Val_12 = sArr[11];
                                p.P_Val_13 = sArr[12];
                                p.P_Val_14 = sArr[13];
                                p.P_Val_15 = sArr[14];
                                p.P_Val_16 = sArr[15];
                                p.P_Val_17 = sArr[16];
                                p.P_Val_18 = sArr[17];
                                p.P_Val_19 = sArr[18];
                                p.P_Val_20 = sArr[19];
                                p.P_Val_21 = sArr[20];
                                p.P_Val_22 = sArr[21];
                                p.P_Val_23 = sArr[22];
                                p.P_Val_24 = sArr[23];
                                p.P_Val_25 = sArr[24];
                                p.P_Val_26 = sArr[25];
                                p.P_Val_27 = sArr[26];
                                p.P_Val_28 = sArr[27];

                                p.In_Word_0  = (cellIdArray.Length > 0) ? cellIdArray[0] : Convert.ToInt16(0);
                                p.In_Word_1  = (cellIdArray.Length > 1) ? cellIdArray[1] : Convert.ToInt16(0);
                                p.In_Word_2  = (cellIdArray.Length > 2) ? cellIdArray[2] : Convert.ToInt16(0);
                                p.In_Word_3  = (cellIdArray.Length > 3) ? cellIdArray[3] : Convert.ToInt16(0);
                                p.In_Word_4  = (cellIdArray.Length > 4) ? cellIdArray[4] : Convert.ToInt16(0);
                                p.In_Word_5  = (itemIdArray.Length > 0) ? itemIdArray[0] : Convert.ToInt16(0);
                                p.In_Word_6  = (itemIdArray.Length > 1) ? itemIdArray[1] : Convert.ToInt16(0);
                                p.In_Word_7  = (itemIdArray.Length > 2) ? itemIdArray[2] : Convert.ToInt16(0);
                                p.In_Word_8  = (itemIdArray.Length > 3) ? itemIdArray[3] : Convert.ToInt16(0);
                                p.In_Word_9  = (itemIdArray.Length > 4) ? itemIdArray[4] : Convert.ToInt16(0);
                                p.In_Word_10 = (itemIdArray.Length > 5) ? itemIdArray[5] : Convert.ToInt16(0);
                                p.In_Word_11 = (generatedBarcodeArray.Length > 0) ? generatedBarcodeArray[0] : Convert.ToInt16(0);

                                p.UseJson      = true;
                                p.listenerType = ListenerType.TCP;
                                OnProductionReceived(p);

                                break;

                            case "SETUP":
                                if (jsonData.RequestCode == 4 || jsonData.RequestCode == 16)
                                {
                                    var s = new SetupEventArgs(client);
                                    s.SenderIp         = client.Client.RemoteEndPoint.ToString();
                                    s.CellId           = jsonData.CellId;
                                    s.ProcessIndicator = jsonData.RequestCode;
                                    s.ModelNumber      = jsonData.ModelNumber;
                                    s.OpNumber         = jsonData.OpNumber;
                                    s.UseJson          = true;
                                    s.SenderIp         = ((IPEndPoint)client.Client.RemoteEndPoint).Address.ToString();

                                    OnSetupReceived(s);
                                }
                                if (jsonData.RequestCode == 5 || jsonData.RequestCode == 17 || jsonData.RequestCode == 6 || jsonData.RequestCode == 18)
                                {
                                    var s = new SetupEventArgs(client);
                                    s.CellId           = jsonData.CellId;
                                    s.Component        = jsonData.Component;
                                    s.AccessId         = jsonData.AccessId;
                                    s.ProcessIndicator = jsonData.RequestCode;
                                    s.ModelNumber      = jsonData.ModelNumber;
                                    s.OpNumber         = jsonData.OpNumber;
                                    s.UseJson          = true;
                                    s.SenderIp         = ((IPEndPoint)client.Client.RemoteEndPoint).Address.ToString();

                                    OnSetupReceived(s);
                                }
                                break;

                            case "LOGIN":
                                LoginEventArgs l;
                                switch (jsonData.RequestCode)
                                {
                                case 2:
                                case 3:
                                    l                  = new LoginEventArgs(client);
                                    l.CellId           = jsonData.CellId;
                                    l.OperatorID       = jsonData.OperatorID;
                                    l.ProcessIndicator = jsonData.RequestCode;
                                    l.UseJson          = true;
                                    l.SenderIp         = ((IPEndPoint)client.Client.RemoteEndPoint).Address.ToString();

                                    OnLoginReceived(l);
                                    break;

                                case 17:
                                    l                  = new LoginEventArgs(client);
                                    l.CellId           = jsonData.CellId;
                                    l.ProcessIndicator = jsonData.RequestCode;
                                    l.UseJson          = true;
                                    l.SenderIp         = ((IPEndPoint)client.Client.RemoteEndPoint).Address.ToString();

                                    OnLoginReceived(l);
                                    break;

                                default:
                                    //handle wrong data size
                                    if (Logger.Enabled)
                                    {
                                        Logger.Log("invalid data size");
                                    }

                                    break;
                                }
                                break;

                            case "SERIAL":
                                var sr = new SerialRequestEventArgs(client);
                                sr.CellId           = jsonData.CellId;
                                sr.ProcessIndicator = jsonData.RequestCode;
                                sr.SenderIp         = ((IPEndPoint)client.Client.RemoteEndPoint).Address.ToString();

                                OnSerialRequestReceived(sr);

                                break;

                            case "FINALPRINT":
                                var lp = new LabelPrintEventArgs(client);
                                lp.CellId           = jsonData.CellId;
                                lp.ItemId           = jsonData.ItemId;
                                lp.AlphaCode        = lp.ItemId.Substring(0, 2);
                                lp.Weight           = jsonData.Weight;
                                lp.RevLevel         = jsonData.RevLevel;
                                lp.PrinterIpAddress = jsonData.PrinterIpAddress;

                                lp.SenderIp = ((IPEndPoint)client.Client.RemoteEndPoint).Address.ToString();

                                OnFinalLabelPrintReceived(lp);
                                break;

                            case "INTERIMPRINT":

                                break;

                            default:
                                break;
                            }
                        }
                        catch (Exception)
                        {
                            if (Logger.Enabled)
                            {
                                Logger.Log("could not parse json data");
                            }
                        }
                    }
                    else
                    {
                        if (Logger.Enabled)
                        {
                            Logger.Log("string received");
                        }

                        try
                        {
                            //expected format
                            //command,cell id, item id, en id, process ind, success ind, faultCode,
                            var data = Encoding.Default.GetString(receivedBytes).Trim().Split(',');
                            switch (data[0])
                            {
                            case "PROD":
                                var dArr = new string[14];
                                if (data.Length > 7)
                                {
                                    var copLen = (data.Length > 20) ? 14 : data.Length - 7;
                                    dArr = new string[copLen];
                                    Array.Copy(data, 7, dArr, 0, copLen);
                                }
                                short result = 0;
                                var   p      = new ProductionEventArgs(client);
                                p.CellId           = data[1];
                                p.ItemId           = data[2];
                                p.GeneratedBarcode = (data[3].Length == 2) ? data[3] : "";
                                short.TryParse(data[4], out result);
                                p.ProcessIndicator = result;
                                short.TryParse(data[5], out result);
                                p.SuccessIndicator = result;
                                short.TryParse(data[6], out result);
                                p.FaultCode  = result;
                                p.StatusCode = 0;

                                p.SenderIp = ((IPEndPoint)client.Client.RemoteEndPoint).Address.ToString();

                                var cellIdArray           = Util.StringToAbIntArray(p.CellId);
                                var itemIdArray           = Util.StringToAbIntArray(p.ItemId);
                                var generatedBarcodeArray = Util.StringToAbIntArray(p.GeneratedBarcode);

                                //Array.Copy(cellIdArray, 0, p.ResponseArray, 0, cellIdArray.Length);
                                //Array.Copy(itemIdArray, 0, p.ResponseArray, 5, itemIdArray.Length);
                                //Array.Copy(generatedBarcodeArray, 0, p.ResponseArray, 11, generatedBarcodeArray.Length);

                                short[] sArr    = new short[28];
                                var     pointer = 0;
                                for (var di = 0; di < dArr.Length; di++)
                                {
                                    var s1 = dArr[di];
                                    if (s1.Contains("."))
                                    {
                                        double.TryParse(s1, out double dResult);
                                        var temp1 = Math.Truncate(dResult);
                                        var temp2 = dResult - temp1;
                                        var temp3 = temp2 * 100;
                                        var myArr = s1.Split('.');
                                        //short.TryParse(myArr[0], out short prodShort);
                                        sArr[pointer] = Convert.ToInt16(temp1);
                                        pointer++;
                                        //short.TryParse(myArr[1], out short prodShort1);
                                        sArr[pointer] = Convert.ToInt16(temp3);
                                        pointer++;
                                    }
                                    else
                                    {
                                        short.TryParse(s1, out short prodShort);
                                        sArr[pointer] = prodShort;
                                        pointer++;
                                        sArr[pointer] = 0;
                                        pointer++;
                                    }
                                }

                                p.P_Val_1  = sArr[0];
                                p.P_Val_2  = sArr[1];
                                p.P_Val_3  = sArr[2];
                                p.P_Val_4  = sArr[3];
                                p.P_Val_5  = sArr[4];
                                p.P_Val_6  = sArr[5];
                                p.P_Val_7  = sArr[6];
                                p.P_Val_8  = sArr[7];
                                p.P_Val_9  = sArr[8];
                                p.P_Val_10 = sArr[9];
                                p.P_Val_11 = sArr[10];
                                p.P_Val_12 = sArr[11];
                                p.P_Val_13 = sArr[12];
                                p.P_Val_14 = sArr[13];
                                p.P_Val_15 = sArr[14];
                                p.P_Val_16 = sArr[15];
                                p.P_Val_17 = sArr[16];
                                p.P_Val_18 = sArr[17];
                                p.P_Val_19 = sArr[18];
                                p.P_Val_20 = sArr[19];
                                p.P_Val_21 = sArr[20];
                                p.P_Val_22 = sArr[21];
                                p.P_Val_23 = sArr[22];
                                p.P_Val_24 = sArr[23];
                                p.P_Val_25 = sArr[24];
                                p.P_Val_26 = sArr[25];
                                p.P_Val_27 = sArr[26];
                                p.P_Val_28 = sArr[27];

                                p.In_Word_0  = (cellIdArray.Length > 0) ? cellIdArray[0] : Convert.ToInt16(0);
                                p.In_Word_1  = (cellIdArray.Length > 1) ? cellIdArray[1] : Convert.ToInt16(0);
                                p.In_Word_2  = (cellIdArray.Length > 2) ? cellIdArray[2] : Convert.ToInt16(0);
                                p.In_Word_3  = (cellIdArray.Length > 3) ? cellIdArray[3] : Convert.ToInt16(0);
                                p.In_Word_4  = (cellIdArray.Length > 4) ? cellIdArray[4] : Convert.ToInt16(0);
                                p.In_Word_5  = (itemIdArray.Length > 0) ? itemIdArray[0] : Convert.ToInt16(0);
                                p.In_Word_6  = (itemIdArray.Length > 1) ? itemIdArray[1] : Convert.ToInt16(0);
                                p.In_Word_7  = (itemIdArray.Length > 2) ? itemIdArray[2] : Convert.ToInt16(0);
                                p.In_Word_8  = (itemIdArray.Length > 3) ? itemIdArray[3] : Convert.ToInt16(0);
                                p.In_Word_9  = (itemIdArray.Length > 4) ? itemIdArray[4] : Convert.ToInt16(0);
                                p.In_Word_10 = (itemIdArray.Length > 5) ? itemIdArray[5] : Convert.ToInt16(0);
                                p.In_Word_11 = (generatedBarcodeArray.Length > 0) ? generatedBarcodeArray[0] : Convert.ToInt16(0);

                                p.UseJson = false;
                                OnProductionReceived(p);
                                break;

                            case "SETUP":
                                if (data.Length == 5)
                                {
                                    var s = new SetupEventArgs(client);
                                    s.CellId = data[1];
                                    short.TryParse(data[2], out short setupShort);
                                    s.ProcessIndicator = setupShort;
                                    s.ModelNumber      = data[3];
                                    s.OpNumber         = data[4];
                                    s.SenderIp         = ((IPEndPoint)client.Client.RemoteEndPoint).Address.ToString();

                                    OnSetupReceived(s);
                                }
                                if (data.Length == 7)
                                {
                                    var s = new SetupEventArgs(client);
                                    s.SenderIp  = ((IPEndPoint)client.Client.RemoteEndPoint).Address.ToString();
                                    s.CellId    = data[1];
                                    s.Component = data[2];
                                    short.TryParse(data[3], out short setupShort);
                                    s.AccessId = setupShort;
                                    short.TryParse(data[4], out short setupShort1);
                                    s.ProcessIndicator = setupShort1;
                                    s.ModelNumber      = data[5];
                                    s.OpNumber         = data[6];

                                    OnSetupReceived(s);
                                }
                                // get error for wrong length
                                break;

                            case "LOGIN":
                                LoginEventArgs l;
                                switch (data.Length)
                                {
                                case 4:
                                    l            = new LoginEventArgs(client);
                                    l.CellId     = data[1];
                                    l.OperatorID = data[2];
                                    short.TryParse(data[3], out short loginResult);
                                    l.ProcessIndicator = loginResult;
                                    l.SenderIp         = ((IPEndPoint)client.Client.RemoteEndPoint).Address.ToString();

                                    OnLoginReceived(l);
                                    break;

                                case 3:
                                    l        = new LoginEventArgs(client);
                                    l.CellId = data[1];
                                    short.TryParse(data[2], out short loginResult1);
                                    l.ProcessIndicator = loginResult1;
                                    l.SenderIp         = ((IPEndPoint)client.Client.RemoteEndPoint).Address.ToString();

                                    OnLoginReceived(l);
                                    break;

                                default:
                                    if (Logger.Enabled)
                                    {
                                        Logger.Log("invalid data size");
                                    }

                                    break;
                                }
                                break;

                            case "SERIAL":
                                var sr = new SerialRequestEventArgs(client);
                                sr.CellId = data[1];
                                short.TryParse(data[2], out short res1);
                                sr.ProcessIndicator = res1;
                                sr.SenderIp         = ((IPEndPoint)client.Client.RemoteEndPoint).Address.ToString();

                                OnSerialRequestReceived(sr);
                                break;

                            default:
                                if (Logger.Enabled)
                                {
                                    Logger.Log("invalid format");
                                }
                                break;
                            }
                        }
                        catch (Exception)
                        {
                            throw;
                        }
                    }
                }
            }
            catch
            {
                if (Logger.Enabled)
                {
                    Logger.Log("connection error");
                }
            }
            if (client.Connected)
            {
                client.GetStream().Close();
            }

            client.Close();
            stream.Flush();
        }
        private void ParseProductionTransaction(TcpClient client, short[] dataArray, string tagName)
        {
            var e = new ProductionEventArgs(client);

            e.InTagName = tagName;

            var bytes = new List <byte>();

            for (int i = 0; i < 5; i++)
            {
                var b1 = (byte)((dataArray[i] & 0xff00) >> 8);
                var b2 = (byte)(dataArray[i] & 0x00ff);
                if (b1 != 0)
                {
                    bytes.Add(b1);
                }

                if (b2 != 0)
                {
                    bytes.Add(b2);
                }
            }

            e.CellId = Encoding.Default.GetString(bytes.ToArray());

            bytes = new List <byte>();
            for (var i = 5; i < 11; i++)
            {
                var b1 = (byte)((dataArray[i] & 0xff00) >> 8);
                var b2 = (byte)(dataArray[i] & 0x00ff);
                if (b1 != 0)
                {
                    bytes.Add(b1);
                }

                if (b2 != 0)
                {
                    bytes.Add(b2);
                }
            }

            e.ItemId = Encoding.Default.GetString(bytes.ToArray());

            bytes = new List <byte>
            {
                (byte)((dataArray[11] & 0xff00) >> 8),
                (byte)(dataArray[11] & 0x00ff)
            };

            e.GeneratedBarcode = Encoding.Default.GetString(bytes.ToArray());

            e.Request     = dataArray[18].ToString();
            e.Status      = dataArray[19].ToString();
            e.FailureCode = dataArray[20].ToString();

            for (var i = 22; i < dataArray.Length; i++)
            {
                if (i % 2 == 0)
                {
                    e.ProcessHistoryValues.Add((dataArray[i] + (dataArray[i + 1] * .01)).ToString());
                }
            }

            if (e.InTagName.Contains(":"))
            {
                e.listenerType = ListenerType.PCCC;
            }
            else
            {
                e.listenerType = ListenerType.EIP;
            }

            OnProductionReceived(e);
        }