Exemplo n.º 1
0
        static void Main(string[] args)
        {
            Console.WriteLine("Arrays:");
            Array <int>       a111   = new Array <int>(1, 1, 1);
            Array <int>       a222   = new Array <int>(2, 2, 2);
            StructArray <int> a11    = new StructArray <int>(1, 1);
            StructArray <int> a222_2 = new StructArray <int>(2, 2, 2);
            StructArray <int> a_neg  = new StructArray <int>(2, -1, 2);

            Console.WriteLine($"a111: {a111}");
            Console.WriteLine($"a222: {a222}");
            Console.WriteLine($"a11: {a11}");
            Console.WriteLine($"a222_2: {a222_2}");
            Console.WriteLine($"a_neg: {a_neg}");

            Console.WriteLine($"a222 == a222_2 ? = {(a222==a222_2?true:false)}");

            Console.WriteLine($"MathOperation.count(a111) = {MathOperation.count(a111)}");
            Console.WriteLine($"MathOperation.max(a11) = {MathOperation.max(a11)}");
            Console.WriteLine($"MathOperation.min(a_neg) = {MathOperation.min(a_neg)}");

            Console.WriteLine($"\"Text\".Contains(\"T\") = {"Text".Contains("T")}");
            a_neg.RemoveNegative();
            Console.WriteLine($"a_neg after a_neg.RemoveNegative(): {a_neg}");

            StructArray <double> sa1 = new StructArray <double>(1.1, 1.2, 1.3);

            sa1.Remove(1.2);
            sa1.Add(1.4);
            Console.WriteLine($"sa1: {sa1}");

            try {
                a111.removeAt(5);
            } catch (Exception e) {
                Console.WriteLine(e);
            }

            SoftwareArray sa2 = new SoftwareArray();
            TextProcessor t1  = new TextProcessor("Word", "2012", new DateTime(2012, 1, 1), new string[] { "txt", "doc" });

            sa2.Add(t1);
            TextProcessor t2 = new TextProcessor("Word", "2016", new DateTime(2016, 1, 1), new string[] { "txt", "doc", "docx" });

            sa2.Add(t2);
            Virus v1 = new Virus("MyDoom", "1", new DateTime(2011, 1, 1), "worm");

            sa2.Add(v1);
            Console.WriteLine($"sa2: {sa2}");

            // сериализация/десериализация в бинарный файл
            BinaryFormatter formatter = new BinaryFormatter();

            using (FileStream fs = new FileStream("software.dat", FileMode.OpenOrCreate)) {
                formatter.Serialize(fs, sa2);
                Console.WriteLine("Объект сериализован");
            }
            using (FileStream fs = new FileStream("software.dat", FileMode.OpenOrCreate)) {
                SoftwareArray sa3 = (SoftwareArray)formatter.Deserialize(fs);
                Console.WriteLine("Объект десериализован");
                Console.WriteLine($"sa3: {sa3}");
            }

            using (FileStream fs = new FileStream("double.dat", FileMode.OpenOrCreate)) {
                formatter.Serialize(fs, sa1);
                Console.WriteLine("Объект сериализован");
            }
            using (FileStream fs = new FileStream("double.dat", FileMode.OpenOrCreate)) {
                StructArray <double> sa4 = (StructArray <double>)formatter.Deserialize(fs);
                Console.WriteLine("Объект десериализован");
                Console.WriteLine($"sa4: {sa4}");
            }
        }
Exemplo n.º 2
0
        static void Main(string[] args)
        {
            try {
                // 1.
                Console.Write("Create model...");
                Developer d1 = new Developer("Instinctools Gmbh");
                Developer d2 = new Developer("s_t_u_d_y");
                d2.contact.firstName = "Anastasia";
                d2.contact.lastName  = "Astakhova";
                Computer c1 = new Computer();
                Game     g1 = new Game("World of Tanks", "1.0", 2018, Genre.Strategy);
                g1.Developer = d2;
                c1.AddSoftware(g1);
                TextProcessor t1 = new TextProcessor("Word", "2012", 2012, new string[] { "txt", "doc" });
                t1.Developer = d1;
                c1.AddSoftware(t1);
                TextProcessor t2 = new TextProcessor("Word", "2016", 2016, new string[] { "txt", "doc", "docx" });
                t2.Developer = d2;
                c1.AddSoftware(t2);
                Console.WriteLine("OK");

                // сериализация/десериализация в бинарный файл. В модели добавлен атрибцут [Serializable]
                BinaryFormatter binFormatter = new BinaryFormatter();
                using (FileStream fs = new FileStream("software.dat", FileMode.OpenOrCreate)) {
                    binFormatter.Serialize(fs, c1);
                    Console.WriteLine("Объект сериализован");
                }
                using (FileStream fs = new FileStream("software.dat", FileMode.Open)) {
                    Computer c2 = (Computer)binFormatter.Deserialize(fs);
                    Console.WriteLine("Объект десериализован");
                    Console.WriteLine($"c2: {c2}");
                }

                // сериализация/десериализация в SOAP файл. десериализация DateTime валится
                SoapFormatter soapFormatter = new SoapFormatter();
                using (FileStream fs = new FileStream("software.soap", FileMode.Create))  {
                    soapFormatter.Serialize(fs, c1);
                    Console.WriteLine("Объект сериализован");
                }
                using (FileStream fs = new FileStream("software.soap", FileMode.Open)) {
                    Computer c2 = (Computer)soapFormatter.Deserialize(fs);
                    Console.WriteLine("Объект десериализован");
                    Console.WriteLine($"c2: {c2}");
                }

                // сериализация/десериализация в XML файл.
                // Все объекты модели должны содержать конструктор без параметров
                // Все поля доступны на set и get
                XmlSerializer xmlFormatter = new XmlSerializer(typeof(Computer), new Type[] {
                    typeof(TextProcessor), typeof(Game)
                });
                using (FileStream fs = new FileStream("software.xml", FileMode.Create))  {
                    xmlFormatter.Serialize(fs, c1);
                    Console.WriteLine("Объект сериализован");
                }
                using (FileStream fs = new FileStream("software.xml", FileMode.Open)) {
                    Computer c2 = (Computer)xmlFormatter.Deserialize(fs);
                    Console.WriteLine("Объект десериализован");
                    Console.WriteLine($"c2: {c2}");
                }

                // сериализация в JSON. В модели добавлен атрибцут [DataContract]
                DataContractJsonSerializer jsonFormatter = new DataContractJsonSerializer(typeof(Computer), new Type[] {
                    typeof(TextProcessor), typeof(Game)
                });
                using (FileStream fs = new FileStream("software.json", FileMode.Create))  {
                    jsonFormatter.WriteObject(fs, c1);
                    Console.WriteLine("Объект сериализован");
                }
                using (FileStream fs = new FileStream("software.json", FileMode.Open)) {
                    Computer c2 = (Computer)jsonFormatter.ReadObject(fs);
                    Console.WriteLine("Объект десериализован");
                    Console.WriteLine($"c2: {c2}");
                }

                // 2.
                IPEndPoint ipPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9999);

                // Создание сервера в отдельном потоке
                Thread serverThread = new Thread(new ThreadStart(() => {
                    try  {
                        Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                        serverSocket.Bind(ipPoint);
                        serverSocket.Listen(10); // количество ожидающих в очереди на подключение = 10 и начинаем прослушивание
                        Console.WriteLine(">> Сервер запущен. Ожидание подключений...");

                        int i = 0;
                        while (i < 1)
                        {
                            Socket handler      = serverSocket.Accept();
                            Stream stream       = new NetworkStream(handler);
                            BinaryFormatter bin = new BinaryFormatter();
                            Computer c2         = (Computer)bin.Deserialize(stream);

                            Console.WriteLine(">> Объект получен на сервере");
                            Console.WriteLine($">> c2: {c2} - отправляем его обратно");

                            bin.Serialize(stream, c2);

                            stream.Close();
                            handler.Shutdown(SocketShutdown.Both);
                            handler.Close();
                            i++;
                        }
                        Console.WriteLine(">> Сервер остановлен");
                    } catch (Exception ex) {
                        Console.WriteLine(ex.Message);
                    }
                }));
                serverThread.Start();


                Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                clientSocket.Connect(ipPoint);
                Console.WriteLine("Отправляем объект на сервер");
                Console.WriteLine($"с1: {c1}");
                Stream          clientStream    = new NetworkStream(clientSocket);
                BinaryFormatter clientFormatter = new BinaryFormatter();
                clientFormatter.Serialize(clientStream, c1);
                Computer c3 = (Computer)clientFormatter.Deserialize(clientStream);
                Console.WriteLine("Объект получен на клиенте");
                Console.WriteLine($"с3: {c3}");

                // 3.
                XmlDocument xmlDoc = new XmlDocument();
                xmlDoc.Load("software.xml");
                XmlElement xmlRoot = xmlDoc.DocumentElement;
                Console.WriteLine("Поиск TextProcessor:");
                XmlNamespaceManager namespaceManager = new XmlNamespaceManager(xmlDoc.NameTable);
                namespaceManager.AddNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance");
                XmlNodeList childnodes = xmlRoot.SelectNodes("//AbstractSoftware[@xsi:type=\'TextProcessor\']", namespaceManager);
                foreach (XmlNode n in childnodes)
                {
                    Console.WriteLine(n.OuterXml);
                }
                Console.WriteLine("Поиск по developer name:");
                childnodes = xmlRoot.SelectNodes("//AbstractSoftware[Developer[@Name=\'s_t_u_d_y\']]");
                foreach (XmlNode n in childnodes)
                {
                    Console.WriteLine(n.OuterXml);
                }

                // 4.
                XDocument xdoc = new XDocument(new XElement("phones",
                                                            new XElement("phone",
                                                                         new XAttribute("name", "iPhone 6"),
                                                                         new XElement("company", "Apple"),
                                                                         new XElement("price", "40000")),
                                                            new XElement("phone",
                                                                         new XAttribute("name", "Samsung Galaxy S5"),
                                                                         new XElement("company", "Samsung"),
                                                                         new XElement("price", "33000"))));
                xdoc.Save("phones.xml");
                xdoc = XDocument.Load("software.xml");
                var items = xdoc.Descendants("AbstractSoftware")
                            .Where(e => e.Element("Name").Value == "Word")
                            .Select(e => new { name = e.Element("Name").Value, year = e.Element("ReleaseYear").Value });
                foreach (var item in items)
                {
                        Console.WriteLine("{0} - {1}", item.name, item.year);
                }
            } catch (Exception ex) {
                Console.WriteLine($"Error: {ex.Message}\n{ex.InnerException?.Message}");
            }
        }