Esempio n. 1
0
        static void Uninit()
        {
            Log.Warning("Shutting down backend");

            Helper.KillProcess("sbmon");

            Talk.Stop();

            LogService.Stop();

            Edi.KillEdi();

            RequestBridge.Shutdown();

            RequestQueue.Shutdown();

            RequestDispatcher.Shutdown();

            DataCacheInstance.Instance.Shutdown();
        }
Esempio n. 2
0
        static void Init()
        {
            bool watchdog = !System.Diagnostics.Debugger.IsAttached;

            Log.Warning("Initializing backend. (watchdog? = {0})", watchdog);

            RequestDispatcher.CreateDispatchers(4);
            RequestBridge.CreatePipeServers(4);

            Edi.StartEdi();

            //start health monitor.
            System.Diagnostics.Process.Start(
                Config.Get().SbmonPath,
                string.Format("-backend {0} -memcached {1} -mport {2} -watchdog {3}",
                              System.Diagnostics.Process.GetCurrentProcess().Id,
                              DataCacheInstance.ProcessId, Config.Get().MemcachedPort, watchdog));

            LogService.Start();
            Talk         = new InternalTalk(true);
            Talk.OnTalk += Talk_OnTalk;
        }
Esempio n. 3
0
 private async void SynchronizationContext_UnhandledException(object sender, Edi.UWP.Helpers.UnhandledExceptionEventArgs e)
 {
     e.Handled = true;
     await new MessageDialog("Synchronization Context Unhandled Exception:\r\n" + GetExceptionDetailMessage(e.Exception), "爆了 :(")
         .ShowAsync();
 }
        public string EdiEncode(InvoiceModel invoice)
        {
            List <string> segments = new List <string>();

            segments.Add("UNH+1+INVOIC:D:96A:UN:EAN008");
            //numer faktury
            segments.Add("BGM+380+" + invoice.Number + "+" + invoice.Type);
            //data wystawienia faktury
            segments.Add("DTM+137:" + invoice.SaleDate.ToString("yyyyMMdd") + ":102");
            //dane dostawcy
            segments.Add("NAD+SU+4012345500004::9++" +
                         Edi.Filter(invoice.ProviderName) + ":::::+" +
                         Edi.Filter(invoice.ProviderAddress.Street) +
                         " " +
                         invoice.ProviderAddress.Number +
                         ":::+" + Edi.Filter(invoice.ProviderAddress.City) + "++" + invoice.ProviderAddress.PostCode + "+" + invoice.ProviderAddress.CountryCode
                         );
            segments.Add("RFF+VA:" + invoice.ProviderNip);
            //dane nabywcy
            segments.Add("NAD+BY+4012345500004::9++" +
                         Edi.Filter(invoice.BuyerName) +
                         ":::::+" +
                         Edi.Filter(invoice.BuyerAddress.Street) +
                         " " +
                         invoice.BuyerAddress.Number +
                         ":::+" +
                         Edi.Filter(invoice.BuyerAddress.City) +
                         "++" +
                         invoice.BuyerAddress.PostCode + "+" + invoice.BuyerAddress.CountryCode
                         );
            segments.Add("RFF+VA:" + invoice.BuyerNip);
            //miejsce dostwy
            if (invoice.DeliveryName != null && invoice.DeliveryAddress != null)
            {
                segments.Add("NAD+DP+4012345500004::9++" +
                             Edi.Filter(invoice.DeliveryName) +
                             ":::::+" +
                             Edi.Filter(invoice.DeliveryAddress.Street) +
                             " " +
                             invoice.DeliveryAddress.Number +
                             ":::+" +
                             Edi.Filter(invoice.DeliveryAddress.City) +
                             "++" +
                             invoice.DeliveryAddress.PostCode + "+" +
                             invoice.DeliveryAddress.CountryCode
                             );
            }
            //
            segments.Add("PAT+1");
            //data płatności
            segments.Add("DTM+13:" + invoice.PaymentDate.ToString("yyyyMMdd") + ":102");

            //wypisanie towarów/usług
            foreach (InvoiceProductModel p in invoice.Products)
            {
                //numer pozycji towarowej na fakturze++globalny numer towaru
                segments.Add("LIN+" + p.ItemNumber + "++" + p.Number);
                //nazwa towaru/uslugi
                segments.Add("IMD+C++" + p.Type + "::9:" + Edi.Filter(p.Name));
                //ilość
                segments.Add("QTY+" + p.QuantityType + ":" + p.Quantity);
                //sumaryczna wartość towarów
                segments.Add("MOA+" + p.SumAmountType + ":" + p.SumAmountNet + ":PLN");
                //cena jednostkowa netto
                segments.Add("PRI+AAA:" + p.UnitPriceNet);
            }

            //liczba pozycji towarowych
            segments.Add("CNT+" + invoice.ProductQuntity + ":120");
            //kwota do zapłaty
            segments.Add("MOA+77:" + invoice.AmountGross);
            //kwota netto
            segments.Add("MOA+79:" + invoice.AmountNet);
            //kwota podatku
            segments.Add("MOA+124:" + invoice.AmountTax);
            //kwota opodatkowana
            segments.Add("MOA+125:" + invoice.AmountTax);
            //stawka podatku
            segments.Add("TAX+7+VAT+++:::" + invoice.Tax + "+S");

            //liczba segmentow w komunikacie
            segments.Add("UNT+" + (segments.Count() + 1) + "+1");

            return(String.Join("'", segments));
        }
        public InvoiceModel EdiDecode(string strEdi)
        {
            InvoiceModel invoice = new InvoiceModel();

            string[] segments = Edi.ParseToSegmets(strEdi);

            int nSegments = segments.Length;

            // ustawiam czy odczytywane dane należą do dostwcy czy nabywcy, lub czy są to dane dostwy
            // 0 - dostawca, 1 - nabywca, 2 - dane do dostwy
            int who = 0;

            string[]            arguments;
            string[]            parameters;
            InvoiceAddressModel address;
            int productIndex = -1;
            InvoiceProductModel        product;
            List <InvoiceProductModel> products = new List <InvoiceProductModel>();
            bool details = false;

            for (int i = 0; i < nSegments; i++)
            {
                if (i == 23)
                {
                }
                segments[i] = segments[i].Trim();
                if (String.IsNullOrEmpty(segments[i]))
                {
                    continue;
                }
                arguments = Edi.ParseToArguments(segments[i]);

                switch (arguments[0])
                {
                case "UNH":
                    parameters = Edi.ParseToParameters(arguments[2]);
                    if (parameters[0] != "INVOIC")
                    {
                        return(null);
                    }
                    break;

                case "BGM":
                    if (arguments[1] == "380")
                    {
                        invoice.Number = arguments[2];
                        invoice.Type   = Int16.Parse(arguments[3]);
                    }
                    break;

                case "DTM":
                    DateTime date;
                    parameters = Edi.ParseToParameters(arguments[1]);
                    if (parameters[2] == "102")
                    {
                        date = DateTime.ParseExact(parameters[1], "yyyyMMdd", null);
                    }
                    else
                    {
                        date = DateTime.Parse(parameters[1]);
                    }
                    switch (parameters[0])
                    {
                    case "137":
                        invoice.SaleDate = date;
                        break;

                    case "13":
                        invoice.PaymentDate = date;
                        break;
                    }
                    break;

                case "NAD":
                    address             = new InvoiceAddressModel();
                    parameters          = Edi.ParseToParameters(arguments[5]);
                    address.Street      = parameters[0];
                    address.City        = arguments[6];
                    address.PostCode    = arguments[8];
                    address.CountryCode = arguments[9];

                    switch (arguments[1])
                    {
                    case "SU":
                        //dane dostawcy
                        who                     = 0;
                        parameters              = Edi.ParseToParameters(arguments[4]);
                        invoice.ProviderName    = parameters[0];
                        invoice.ProviderAddress = address;
                        break;

                    case "BY":
                        //dane nabywcy
                        who                  = 1;
                        parameters           = Edi.ParseToParameters(arguments[4]);
                        invoice.BuyerName    = parameters[0];
                        invoice.BuyerAddress = address;
                        break;

                    case "DP":
                        //dane do dostawy
                        who                     = 2;
                        parameters              = Edi.ParseToParameters(arguments[4]);
                        invoice.DeliveryName    = parameters[0];
                        invoice.DeliveryAddress = address;
                        break;
                    }
                    break;

                case "RFF":
                    parameters = Edi.ParseToParameters(arguments[1]);
                    if (parameters[0] == "VA")
                    {
                        switch (who)
                        {
                        case 0:
                            //nip dostawcy
                            invoice.ProviderNip = parameters[1];
                            break;

                        case 1:
                            //nip nabywcy
                            invoice.BuyerNip = parameters[1];
                            break;
                        }
                    }
                    break;

                case "PAT":
                    details = true;
                    break;

                case "LIN":
                    productIndex++;
                    product            = new InvoiceProductModel();
                    product.ItemNumber = Int16.Parse(arguments[1]);
                    parameters         = Edi.ParseToParameters(arguments[3]);
                    product.Number     = parameters[0];
                    products.Insert(productIndex, product);
                    break;

                case "IMD":
                    product      = products[productIndex];
                    product.Name = arguments[2];
                    parameters   = Edi.ParseToParameters(arguments[3]);
                    product.Type = parameters[0];
                    break;

                case "QTY":
                    product              = products[productIndex];
                    parameters           = Edi.ParseToParameters(arguments[1]);
                    product.QuantityType = Int16.Parse(parameters[0]);
                    product.Quantity     = int.Parse(parameters[1]);
                    break;

                case "MOA":
                    parameters = Edi.ParseToParameters(arguments[1]);
                    if (details)
                    {
                        switch (parameters[0])
                        {
                        case "66":
                        case "35E":
                            product = products[productIndex];
                            product.SumAmountType = parameters[0];
                            product.SumAmountNet  = float.Parse(parameters[1]);
                            break;
                        }
                    }
                    else
                    {
                        float amount = float.Parse(parameters[1]);
                        switch (parameters[0])
                        {
                        case "77":
                            invoice.AmountGross = amount;
                            break;

                        case "79":
                            invoice.AmountNet = amount;
                            break;

                        case "124":
                            invoice.AmountTax = amount;
                            break;
                        }
                    }
                    break;

                case "PRI":
                    parameters = Edi.ParseToParameters(arguments[1]);
                    if (parameters[0] == "AAA")
                    {
                        product = products[productIndex];
                        product.UnitPriceNet = float.Parse(parameters[1]);
                    }
                    break;

                case "TAX":
                    if (arguments[1] == "7" && arguments[2] == "VAT")
                    {
                        parameters = Edi.ParseToParameters(arguments[5]);
                        if (details)
                        {
                            product     = products[productIndex];
                            product.Tax = Int16.Parse(parameters[3]);
                        }
                        else
                        {
                            invoice.Tax = Int16.Parse(parameters[3]);
                        }
                    }
                    break;

                case "UNS":
                    if (arguments[1] == "S")
                    {
                        invoice.Products = products;
                        details          = false;
                    }
                    break;

                case "CNT":
                    parameters             = Edi.ParseToParameters(arguments[1]);
                    invoice.ProductQuntity = int.Parse(parameters[0]);
                    break;
                }
            }

            return(invoice);
        }
Esempio n. 6
0
        // Example:
        //
        //   eax=7ffdb000 ebx=00000000 ecx=00000000 edx=7785f17d esi=00000000 edi=00000000
        //   eip=777f410c esp=040ef770 ebp=040ef79c iopl=0         nv up ei pl zr na pe nc
        //   cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000246
        //   ntdll!DbgBreakPoint:
        //
        public override ColorString ToColorString()
        {
            if (null == m_colorString)
            {
                ConsoleColor color;
                ColorString  cs = new ColorString("eax=");
                color = GetColorForDiffAgainstBaseline("eax");
                cs.Append(Eax.GetColorizedValueString(color));
                cs.Append(" ebx=");
                color = GetColorForDiffAgainstBaseline("ebx");
                cs.Append(Ebx.GetColorizedValueString(color));
                cs.Append(" ecx=");
                color = GetColorForDiffAgainstBaseline("ecx");
                cs.Append(Ecx.GetColorizedValueString(color));
                cs.Append(" edx=");
                color = GetColorForDiffAgainstBaseline("edx");
                cs.Append(Edx.GetColorizedValueString(color));
                cs.Append(" esi=");
                color = GetColorForDiffAgainstBaseline("esi");
                cs.Append(Esi.GetColorizedValueString(color));
                cs.Append(" edi=");
                color = GetColorForDiffAgainstBaseline("edi");
                cs.Append(Edi.GetColorizedValueString(color));
                cs.AppendLine();

                cs.Append("eip=");
                color = GetColorForDiffAgainstBaseline("eip");
                cs.Append(Eip.GetColorizedValueString(color));
                cs.Append(" esp=");
                color = GetColorForDiffAgainstBaseline("esp");
                cs.Append(Esp.GetColorizedValueString(color));
                cs.Append(" ebp=");
                color = GetColorForDiffAgainstBaseline("ebp");
                cs.Append(Ebp.GetColorizedValueString(color));
                cs.Append(" iopl=");
                color = GetColorForDiffAgainstBaseline("iopl");
                cs.AppendPushPopFg(color, ((uint)Iopl.Value).ToString("x"));
                // TODO:
                cs.AppendLine("   TBD: flags");

                cs.Append("cs=");
                color = GetColorForDiffAgainstBaseline("cs");
                cs.AppendPushPopFg(color, ((uint)Cs.Value).ToString("x4"));
                cs.Append("  ss=");
                color = GetColorForDiffAgainstBaseline("ss");
                cs.AppendPushPopFg(color, ((uint)Ss.Value).ToString("x4"));
                cs.Append("  ds=");
                color = GetColorForDiffAgainstBaseline("ds");
                cs.AppendPushPopFg(color, ((uint)Ds.Value).ToString("x4"));
                cs.Append("  es=");
                color = GetColorForDiffAgainstBaseline("es");
                cs.AppendPushPopFg(color, ((uint)Es.Value).ToString("x4"));
                cs.Append("  fs=");
                color = GetColorForDiffAgainstBaseline("fs");
                cs.AppendPushPopFg(color, ((uint)Fs.Value).ToString("x4"));
                cs.Append("  gs=");
                color = GetColorForDiffAgainstBaseline("gs");
                cs.AppendPushPopFg(color, ((uint)Gs.Value).ToString("x4"));
                cs.Append("             efl=");
                color = GetColorForDiffAgainstBaseline("efl");
                cs.Append(Efl.GetColorizedValueString(color));
                cs.AppendLine();

                cs.Append(DbgProvider.ColorizeSymbol(StackFrame.SymbolName));
                if (0 != StackFrame.Displacement)
                {
                    cs.Append("+0x");
                    cs.Append(StackFrame.Displacement.ToString("x"));
                }
                cs.AppendLine(":");
                cs.Append(Disasm(Eip.ValueAsPointer));

                m_colorString = cs;
            }
            return(m_colorString);
        } // end ToString()