Example #1
0
        /// <summary>
        /// Implements IComponent.Execute method.
        /// </summary>
        /// <param name="pc">Pipeline context</param>
        /// <param name="inmsg">Input message</param>
        /// <returns>Original input message</returns>
        /// <remarks>
        /// IComponent.Execute method is used to initiate
        /// the processing of the message in this pipeline component.
        /// </remarks>
        public Microsoft.BizTalk.Message.Interop.IBaseMessage Execute(Microsoft.BizTalk.Component.Interop.IPipelineContext pipelineContext, Microsoft.BizTalk.Message.Interop.IBaseMessage inputMsg)
        {
            //
            // TODO: implement component logic
            //
            // this way, it's a passthrough pipeline component
            IBaseMessagePart bodyPart = inputMsg.BodyPart;

            if (bodyPart != null)
            {
                using (Stream stream = bodyPart.GetOriginalDataStream())
                {
                    if (stream == null)
                    {
                        return(inputMsg);
                    }
                    using (Stream stream2 = new ReadOnlySeekableStream(stream))
                    {
                        if (this.UseCustomEncoder)
                        {
                            string jsonStg = "";

                            XDocument xdoc = new XDocument();
                            xdoc             = XDocument.Load(stream2);
                            stream2.Position = 0L;

                            xdoc.Declaration = null;
                            xdoc.Descendants()
                            .Attributes()
                            .Where(x => x.IsNamespaceDeclaration)
                            .Remove();

                            XmlDocument node = new XmlDocument();
                            node = ToXmlDocument(xdoc);

                            if (this.RemoveOuterEnvelope)
                            {
                                jsonStg = JsonConvert.SerializeXmlNode(node, Newtonsoft.Json.Formatting.None, true);
                            }
                            else
                            {
                                jsonStg = JsonConvert.SerializeXmlNode(node);
                            }

                            bodyPart.Data = GenerateStreamFromString(jsonStg);
                        }
                        else
                        {
                            XmlSchema   matchingSchema = null;
                            XmlDocument node           = new XmlDocument();
                            node.Load(stream2);
                            stream2.Position = 0L;

                            matchingSchema = this.GetMatchingSchema(pipelineContext, stream2);
                            bodyPart.Data  = JsonConvertExtension.SerializeXmlNodeToStream(node, this.RemoveOuterEnvelope, true, true, matchingSchema);
                        }
                    }
                }
            }

            return(inputMsg);
        }
        /// <summary>Обработчик события получения сообщения от сокета</summary>
        private void Ws_OnMessage(object sender, MessageEventArgs e)
        {
            CountMessage++;
            long numMess = CountMessage;

            TimeLastMessage = DateTime.UtcNow;
            //try
            {
                if (e.Data.StartsWith("{\"table\":\"orderBook10\""))
                {
                    string symbol    = "\"symbol\":\"" + WorkSymbol + "\"";
                    string bids      = "bids\":[[";
                    string asks      = "asks\":[[";
                    int    indexSymb = (e.Data.IndexOf(symbol));
                    if (indexSymb >= 0)
                    {
                        int index = (e.Data.IndexOf(bids, indexSymb + symbol.Length));
                        if (index > 0)
                        {
                            int    indEnd = e.Data.IndexOf(',', index);
                            string val    = e.Data.Substring((index += bids.Length), indEnd - index);
                            MaxBuy = decimal.Parse(val, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture);
                        }
                        index = (e.Data.IndexOf(asks, indexSymb + symbol.Length));
                        if (index > 0)
                        {
                            int    indEnd = e.Data.IndexOf(',', index);
                            string val    = e.Data.Substring((index += asks.Length), indEnd - index);
                            MinSell = decimal.Parse(val, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture);
                        }
                    }
                }
                else if (e.Data.StartsWith("{\"table\":\"quote\""))
                {
                    string symbol    = "\"symbol\":\"" + WorkSymbol + "\"";
                    string bidPrice  = "bidPrice\":";
                    string askPrice  = "askPrice\":";
                    int    indexSymb = (e.Data.IndexOf(symbol));
                    if (indexSymb >= 0)
                    {
                        int index = (e.Data.IndexOf(bidPrice, indexSymb + symbol.Length));
                        if (index > 0)
                        {
                            int    indEnd = e.Data.IndexOf(',', index);
                            string val    = e.Data.Substring((index += bidPrice.Length), indEnd - index);
                            MaxBuy = decimal.Parse(val, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture);
                        }
                        index = (e.Data.IndexOf(askPrice, indexSymb + symbol.Length));
                        if (index > 0)
                        {
                            int    indEnd = e.Data.IndexOf(',', index);
                            string val    = e.Data.Substring((index += askPrice.Length), indEnd - index);
                            MinSell = decimal.Parse(val, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture);
                        }
                    }
                }
                else if (e.Data.StartsWith("{\"info\":"))
                {
                    if (JsonConvertExtension.TryDeserializeObject(e.Data, out InfoDocs infoDocs))
                    {
                        Console.WriteLine(infoDocs.Print());
                        InfoDocsList = InfoDocsList.Append(infoDocs);
                    }
                    else if (JsonConvertExtension.TryDeserializeObject(e.Data, out InfoHelp infoHelp))
                    {
                        Console.WriteLine(infoHelp.Print());
                    }
                }
                else if (e.Data.StartsWith("{\"table\":"))
                {
                    if (JsonConvertExtension.TryDeserializeObject(e.Data, out TableJSON table))
                    {
                        table.Number = numMess;
                        if (table.Data == null || table.Data.Length == 0)
                        {
                            ConvertTable(table);
                        }
                        else
                        {
                            lock (listTableJSON)
                            {
                                listTableJSON.Add(table);
                                if (table.Table == "order")
                                {
                                    //Console.WriteLine
                                    //         (
                                    //             $"№{table.Number} ({DateTime.Now.Ticks}) ->" +
                                    //             $"table={{{table.Table}, {table.Action}, {table.Data[0]["timestamp"]:HH:mm:ss.ffffff}}},"
                                    //         );
                                }
                            }
                            while (listTableJSON.Count > 0)
                            {
                                Thread.Sleep(100);
                                lock (listTableJSON)
                                {
                                    if (listTableJSON.Count > 0)
                                    {
                                        TableJSON tableFirst = listTableJSON
                                                               .OrderBy(t => t.Data[0]["timestamp"])
                                                               .ThenBy(t => t.Action == "partial" ? 0 : t.Action == "insert" ? 1 : t.Action == "update" ? 2 : 3)
                                                               .ThenBy(t => !t.Data[0].ContainsKey("workingIndicator") ? 0 : (bool)t.Data[0]["workingIndicator"] ? 1 : 2)
                                                               .First();
                                        if (tableFirst.Table == "order")
                                        {
                                            Console.WriteLine
                                            (
                                                $"tableFirst={{{tableFirst.Table}, {tableFirst.Action}, {tableFirst.Data[0]["orderID"]}, {tableFirst.Data[0]["timestamp"]:HH:mm:ss.ffffff}}}"
                                            );
                                        }                                        //if (table.Table == "order" || tableFirst.Table == "order")
                                        //{
                                        //    Console.WriteLine
                                        //        (
                                        //            $"№{table.Number} ({DateTime.Now.Ticks}) ->" +
                                        //            $"table={{{table.Table}, {table.Action}, {table.Data[0]["timestamp"]:HH:mm:ss.ffffff}}}," +
                                        //            $"tableFirst={{{tableFirst.Table}, {tableFirst.Action}, {tableFirst.Data[0]["timestamp"]:HH:mm:ss.ffffff}}}"
                                        //        );
                                        //}
                                        ConvertTable(tableFirst);
                                        listTableJSON.Remove(tableFirst);
                                    }
                                }
                            }
                        }

                        //Console.WriteLine($"TableMargin: Баланс ( * 100 млн.): {tableMargin.data["walletBalance"]}");
                    }
                    else
                    {
                    }
                }
                //else if (JsonConvertExtension.TryDeserializeObject(e.Data, out TableOrderBookArr tableOrderBook))
                //{
                //    //Console.WriteLine($"tableOrderBook: {tableOrderBook.Table}, {tableOrderBook.Action}, {tableOrderBook.Data[0].Asks[0][0]}, {tableOrderBook.Data[0].Bids[0][0]}");
                //    if (tableOrderBook.Table == "orderBook10" && tableOrderBook.Data.FirstOrDefault(data => data.Symbol == WorkSymbol) is OrderBookArr orderBook)
                //    {
                //        OrderBookList orderBookList = OrderBookList.FromArr(orderBook);
                //        OrderBook10Asks = orderBookList.Asks;
                //        OrderBook10Bids = orderBookList.Bids;
                //    }
                //}
                else if (e.Data.StartsWith("{\"status\":"))
                {
                    if (JsonConvertExtension.TryDeserializeObject(e.Data, out StatusClass status) /*&& status.Status!=null*/)
                    {
                        if (status.Status == 401)
                        {
                            switch (status.Error)
                            {
                            case "Invalid API Key.":
                                InvalidAPIKey = true;
                                Authorization = false;
                                break;

                            case "Signature not valid.":
                                SignatureNotValid = true;
                                Authorization     = false;
                                break;
                            }
                        }
                        Console.WriteLine($"StatusClass: {status.Status}, {status.Error}, {status.Request?.Op}, {status.Request?.Args[0]}");
                    }
                }
                else if (e.Data.StartsWith("{\"success\":"))
                {
                    if (JsonConvertExtension.TryDeserializeObject(e.Data, out SuccessClass success) /*&& status.Status!=null*/)
                    {
                        if (success.Request.Op == "authKeyExpires")
                        {
                            Authorization = success.Success;
                        }
                        Console.WriteLine($"SuccessClass: {success.Success}, {success.Subscribe}, {success.Request.Op}, {success.Request.Args[0]}");
                    }
                }
                else
                {
                    Console.WriteLine("e.Data = " + e.Data);
                }


                //messCount++;
                //WebScocketLastMessage = DateTime.UtcNow;
                //try
                //{
                //    JObject Message = JObject.Parse(e.Data);
                //    if (Message.ContainsKey("table"))
                //    {
                //        if ((string)Message["table"] == "trade")
                //        {
                //            //if (Message.ContainsKey("data"))
                //            //{
                //            //    JArray TD = (JArray)Message["data"];
                //            //    if (TD.Any())
                //            //    {
                //            //        decimal Price = (decimal)TD.Children().LastOrDefault()["price"];
                //            //        string Symbol = (string)TD.Children().LastOrDefault()["symbol"];
                //            //        Prices[Symbol] = Price;
                //            //    }
                //            //}
                //        }
                //        else if ((string)Message["table"] == "orderBook10")
                //        {
                //            if (Message.ContainsKey("data"))
                //            {

                //                var arrOrderBook = JsonConvert.DeserializeObject<TableOrderBookArr>(e.Data);
                //                var listOrderBook = TableOrderBookList.FormArr(arrOrderBook);

                //                //    JArray TD = (JArray)Message["data"];
                //                //    if (TD.Any())
                //                //    {
                //                //        JArray TDBids = (JArray)TD[0]["bids"];
                //                //        if (TDBids.Any())
                //                //        {
                //                //            List<OrderBook> OB = new List<OrderBook>();
                //                //            foreach (JArray i in TDBids)
                //                //            {
                //                //                OrderBook OBI = new OrderBook
                //                //                {
                //                //                    Price = (decimal)i[0],
                //                //                    Size = (int)i[1]
                //                //                };
                //                //                OB.Add(OBI);
                //                //            }

                //                //            OrderBookTopBids = OB;
                //                //        }

                //                //        JArray TDAsks = (JArray)TD[0]["asks"];
                //                //        if (TDAsks.Any())
                //                //        {
                //                //            List<OrderBook> OB = new List<OrderBook>();
                //                //            foreach (JArray i in TDAsks)
                //                //            {
                //                //                OrderBook OBI = new OrderBook
                //                //                {
                //                //                    Price = (decimal)i[0],
                //                //                    Size = (int)i[1]
                //                //                };
                //                //                OB.Add(OBI);
                //                //            }

                //                //            OrderBookTopAsks = OB;
                //                //        }
                //                //    }
                //            }
                //        }
                //        else if ((string)Message["table"] == "position")
                //        {
                //            //// PARSE
                //            //if (Message.ContainsKey("data"))
                //            //{
                //            //    JArray TD = (JArray)Message["data"];
                //            //    if (TD.Any())
                //            //    {
                //            //        if (TD.Children().LastOrDefault()["symbol"] != null)
                //            //        {
                //            //            SymbolPosition.Symbol = (string)TD.Children().LastOrDefault()["symbol"];
                //            //        }
                //            //        if (TD.Children().LastOrDefault()["currentQty"] != null)
                //            //        {
                //            //            SymbolPosition.CurrentQty = (int?)TD.Children().LastOrDefault()["currentQty"];

                //            //        }
                //            //        if (TD.Children().LastOrDefault()["avgEntryPrice"] != null)
                //            //        {
                //            //            SymbolPosition.AvgEntryPrice = (decimal?)TD.Children().LastOrDefault()["avgEntryPrice"];

                //            //        }
                //            //        if (TD.Children().LastOrDefault()["markPrice"] != null)
                //            //        {
                //            //            SymbolPosition.MarkPrice = (decimal?)TD.Children().LastOrDefault()["markPrice"];

                //            //        }
                //            //        if (TD.Children().LastOrDefault()["liquidationPrice"] != null)
                //            //        {
                //            //            SymbolPosition.LiquidationPrice = (decimal?)TD.Children().LastOrDefault()["liquidationPrice"];
                //            //        }
                //            //        if (TD.Children().LastOrDefault()["leverage"] != null)
                //            //        {
                //            //            SymbolPosition.Leverage = (decimal?)TD.Children().LastOrDefault()["leverage"];

                //            //        }
                //            //        if (TD.Children().LastOrDefault()["unrealisedPnl"] != null)
                //            //        {
                //            //            SymbolPosition.UnrealisedPnl = (decimal?)TD.Children().LastOrDefault()["unrealisedPnl"];
                //            //        }
                //            //        if (TD.Children().LastOrDefault()["unrealisedPnlPcnt"] != null)
                //            //        {
                //            //            SymbolPosition.UnrealisedPnlPcnt = (decimal?)TD.Children().LastOrDefault()["unrealisedPnlPcnt"];

                //            //        }

                //            //    }
                //            //}
                //        }
                //        else if ((string)Message["table"] == "margin")
                //        {
                //            //    if (Message.ContainsKey("data"))
                //            //    {
                //            //        JArray TD = (JArray)Message["data"];
                //            //        if (TD.Any())
                //            //        {
                //            //            try
                //            //            {
                //            //                Balance = ((decimal)TD.Children().LastOrDefault()["walletBalance"] / 100000000);
                //            //                UpdateBalanceAndTime();
                //            //            }
                //            //            catch (Exception /*ex*/)
                //            //            {

                //            //            }
                //            //        }
                //            //    }
                //        }
                //    }
                //    else if (Message.ContainsKey("info") && Message.ContainsKey("docs"))
                //    {
                //        //string WebSocketInfo = "Websocket Info: " + Message["info"].ToString() + " " + Message["docs"].ToString();
                //        //UpdateWebSocketInfo(WebSocketInfo);

                //        InfoDocs info = JsonConvert.DeserializeObject<InfoDocs>(e.Data);
                //        Console.WriteLine(info.Print());
                //    }
                //}
                //catch (Exception /*ex*/)
                //{
                //}
            }
            //catch (Exception)
            //{
            //    MessageBox.Show("Какой-то сбой при  разборе ответа от сервера");
            //}
        }
        /// <summary>Обработчик события получения сообщения от сокета</summary>
        private void Ws_OnMessage(object sender, MessageEventArgs e)
        {
            CountMessage++;
            DateTime timeMessage = DateTime.UtcNow;

            if (e.Data.StartsWith("{\"table\":\"orderBook10\""))
            {
                string bids  = "bids\":[[";
                string asks  = "asks\":[[";
                int    index = (e.Data.IndexOf(bids));
                if (index > 0)
                {
                    int    indEnd = e.Data.IndexOf(',', index);
                    string val    = e.Data.Substring((index += bids.Length), indEnd - index);
                    MaxBuy = decimal.Parse(val, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture);
                }
                index = (e.Data.IndexOf(asks));
                if (index > 0)
                {
                    int    indEnd = e.Data.IndexOf(',', index);
                    string val    = e.Data.Substring((index += asks.Length), indEnd - index);
                    MinSell = decimal.Parse(val, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture);
                }
            }

            //if (e.Data.StartsWith("{\"table\":\"orderBook10\"") && e.Data.Contains("partial"))
            //{

            //}

            //if ((timeMessage - TimeLastMessage).TotalMilliseconds < 500)
            //    return;

            TimeLastMessage = timeMessage;

            if (JsonConvertExtension.TryDeserializeObject(e.Data, out InfoDocs infoDocs) /*&& infoDocs.Info !=null && infoDocs.Docs !=null*/)
            {
                Console.WriteLine(infoDocs.Print());
            }
            else if (JsonConvertExtension.TryDeserializeObject(e.Data, out TableOrderBookArr tableOrderBook))
            {
                //Console.WriteLine($"tableOrderBook: {tableOrderBook.Table}, {tableOrderBook.Action}, {tableOrderBook.Data[0].Asks[0][0]}, {tableOrderBook.Data[0].Bids[0][0]}");
                if (tableOrderBook.Table == "orderBook10" && tableOrderBook.Data.FirstOrDefault(data => data.Symbol == WorkSymbol) is OrderBookArr orderBook)
                {
                    OrderBookList orderBookList = OrderBookList.FromArr(orderBook);
                    switch (tableOrderBook.Action)
                    {
                    case "partial":
                    {
                        OrderBook10Asks = orderBookList.Asks;
                        OrderBook10Bids = orderBookList.Bids;
                        break;
                    }

                    case "update":
                    {
                        if (OrderBook10Asks != default)
                        {
                            foreach ((OrderBook s, OrderBook f)tupl in OrderBook10Asks.Zip(orderBookList.Asks, (s, f) => (s, f)))
                            {
                                tupl.s.CopyFrom(tupl.f);
                            }
                            foreach ((OrderBook s, OrderBook f)tupl in OrderBook10Bids.Zip(orderBookList.Bids, (s, f) => (s, f)))
                            {
                                tupl.s.CopyFrom(tupl.f);
                            }
                        }
                        break;
                    }
                    }
                }
            }
            else if (JsonConvertExtension.TryDeserializeObject(e.Data, out StatusClass status) /*&& status.Status!=null*/)
            {
                Console.WriteLine($"StatusClass: {status.Status}, {status.Error}, {status.Request.Op}, {status.Request.Args[0]}");
            }
            else if (JsonConvertExtension.TryDeserializeObject(e.Data, out SuccessClass success) /*&& status.Status!=null*/)
            {
                Console.WriteLine($"SuccessClass: {success.Success}, {success.Subscribe}, {success.Request.Op}, {success.Request.Args[0]}");
            }
            else
            {
                Console.WriteLine("e.Data = " + e.Data);
            }


            //messCount++;
            //WebScocketLastMessage = DateTime.UtcNow;
            //try
            //{
            //    JObject Message = JObject.Parse(e.Data);
            //    if (Message.ContainsKey("table"))
            //    {
            //        if ((string)Message["table"] == "trade")
            //        {
            //            //if (Message.ContainsKey("data"))
            //            //{
            //            //    JArray TD = (JArray)Message["data"];
            //            //    if (TD.Any())
            //            //    {
            //            //        decimal Price = (decimal)TD.Children().LastOrDefault()["price"];
            //            //        string Symbol = (string)TD.Children().LastOrDefault()["symbol"];
            //            //        Prices[Symbol] = Price;
            //            //    }
            //            //}
            //        }
            //        else if ((string)Message["table"] == "orderBook10")
            //        {
            //            if (Message.ContainsKey("data"))
            //            {

            //                var arrOrderBook = JsonConvert.DeserializeObject<TableOrderBookArr>(e.Data);
            //                var listOrderBook = TableOrderBookList.FormArr(arrOrderBook);

            //                //    JArray TD = (JArray)Message["data"];
            //                //    if (TD.Any())
            //                //    {
            //                //        JArray TDBids = (JArray)TD[0]["bids"];
            //                //        if (TDBids.Any())
            //                //        {
            //                //            List<OrderBook> OB = new List<OrderBook>();
            //                //            foreach (JArray i in TDBids)
            //                //            {
            //                //                OrderBook OBI = new OrderBook
            //                //                {
            //                //                    Price = (decimal)i[0],
            //                //                    Size = (int)i[1]
            //                //                };
            //                //                OB.Add(OBI);
            //                //            }

            //                //            OrderBookTopBids = OB;
            //                //        }

            //                //        JArray TDAsks = (JArray)TD[0]["asks"];
            //                //        if (TDAsks.Any())
            //                //        {
            //                //            List<OrderBook> OB = new List<OrderBook>();
            //                //            foreach (JArray i in TDAsks)
            //                //            {
            //                //                OrderBook OBI = new OrderBook
            //                //                {
            //                //                    Price = (decimal)i[0],
            //                //                    Size = (int)i[1]
            //                //                };
            //                //                OB.Add(OBI);
            //                //            }

            //                //            OrderBookTopAsks = OB;
            //                //        }
            //                //    }
            //            }
            //        }
            //        else if ((string)Message["table"] == "position")
            //        {
            //            //// PARSE
            //            //if (Message.ContainsKey("data"))
            //            //{
            //            //    JArray TD = (JArray)Message["data"];
            //            //    if (TD.Any())
            //            //    {
            //            //        if (TD.Children().LastOrDefault()["symbol"] != null)
            //            //        {
            //            //            SymbolPosition.Symbol = (string)TD.Children().LastOrDefault()["symbol"];
            //            //        }
            //            //        if (TD.Children().LastOrDefault()["currentQty"] != null)
            //            //        {
            //            //            SymbolPosition.CurrentQty = (int?)TD.Children().LastOrDefault()["currentQty"];

            //            //        }
            //            //        if (TD.Children().LastOrDefault()["avgEntryPrice"] != null)
            //            //        {
            //            //            SymbolPosition.AvgEntryPrice = (decimal?)TD.Children().LastOrDefault()["avgEntryPrice"];

            //            //        }
            //            //        if (TD.Children().LastOrDefault()["markPrice"] != null)
            //            //        {
            //            //            SymbolPosition.MarkPrice = (decimal?)TD.Children().LastOrDefault()["markPrice"];

            //            //        }
            //            //        if (TD.Children().LastOrDefault()["liquidationPrice"] != null)
            //            //        {
            //            //            SymbolPosition.LiquidationPrice = (decimal?)TD.Children().LastOrDefault()["liquidationPrice"];
            //            //        }
            //            //        if (TD.Children().LastOrDefault()["leverage"] != null)
            //            //        {
            //            //            SymbolPosition.Leverage = (decimal?)TD.Children().LastOrDefault()["leverage"];

            //            //        }
            //            //        if (TD.Children().LastOrDefault()["unrealisedPnl"] != null)
            //            //        {
            //            //            SymbolPosition.UnrealisedPnl = (decimal?)TD.Children().LastOrDefault()["unrealisedPnl"];
            //            //        }
            //            //        if (TD.Children().LastOrDefault()["unrealisedPnlPcnt"] != null)
            //            //        {
            //            //            SymbolPosition.UnrealisedPnlPcnt = (decimal?)TD.Children().LastOrDefault()["unrealisedPnlPcnt"];

            //            //        }

            //            //    }
            //            //}
            //        }
            //        else if ((string)Message["table"] == "margin")
            //        {
            //            //    if (Message.ContainsKey("data"))
            //            //    {
            //            //        JArray TD = (JArray)Message["data"];
            //            //        if (TD.Any())
            //            //        {
            //            //            try
            //            //            {
            //            //                Balance = ((decimal)TD.Children().LastOrDefault()["walletBalance"] / 100000000);
            //            //                UpdateBalanceAndTime();
            //            //            }
            //            //            catch (Exception /*ex*/)
            //            //            {

            //            //            }
            //            //        }
            //            //    }
            //        }
            //    }
            //    else if (Message.ContainsKey("info") && Message.ContainsKey("docs"))
            //    {
            //        //string WebSocketInfo = "Websocket Info: " + Message["info"].ToString() + " " + Message["docs"].ToString();
            //        //UpdateWebSocketInfo(WebSocketInfo);

            //        InfoDocs info = JsonConvert.DeserializeObject<InfoDocs>(e.Data);
            //        Console.WriteLine(info.Print());
            //    }
            //}
            //catch (Exception /*ex*/)
            //{
            //    //MessageBox.Show(ex.Message);
            //}
        }