static void Main(string[] args)
        {
            Employee emp = new Employee("Ivan","Ivanov","IT",2000);
            EmployeeRepository empRep = new EmployeeRepository();
            empRep.employees.Add(emp);

            Message msg = new Message(new AvgSalary(2, 2000), empRep);

            BinaryWorker bw = new BinaryWorker();
            byte[] bytes = bw.messageToBytes(msg);

            Message fromBytes = bw.bytesToMessage(bytes);
        }
        static void Main(string[] args)
        {
            Employee           emp    = new Employee("Ivan", "Ivanov", "IT", 2000);
            EmployeeRepository empRep = new EmployeeRepository();

            empRep.employees.Add(emp);

            Message msg = new Message(new AvgSalary(2, 2000), empRep);

            BinaryWorker bw = new BinaryWorker();

            byte[] bytes = bw.messageToBytes(msg);

            Message fromBytes = bw.bytesToMessage(bytes);
        }
        static void Main(string[] args)
        {
            Initializator init = new Initializator(args);
            Console.WriteLine(init.isMaven());
            Console.WriteLine(init.isWhite());
            Console.WriteLine(init.mavensPort());
            Console.WriteLine(init.nodesPort());
            Console.WriteLine(init.xmlName());

            Task t1 = Task.Factory.StartNew(async () =>
            {
                UDPSenderReceiver udp1 = new UDPSenderReceiver();

                UdpReceiveResult res = await udp1.receiveBytesAsync(init.nodesPort());
                string str = Encoding.UTF8.GetString(res.Buffer);
                Console.WriteLine(str);

                if (init.isMaven() == true)
                {
                    //UDP соединение с клиентом для отклика на Who is Maven?
                    Console.WriteLine("I am Maven!");
                    UDPSenderReceiver udp2 = new UDPSenderReceiver();
                    int mavensPort = init.nodesPort();
                    byte[] bytesSended = BitConverter.GetBytes(mavensPort);
                    await udp2.sendUnicastBytesAsync(bytesSended, 30000);

                    //Готовим данные, которые будут отправлены клиенту
                    string xmlName = init.xmlName();
                    int empNum = getEmpNum(xmlName);
                    EmployeeRepository empRepRes = new EmployeeRepository();
                    float avgSalaryVal = getSalaryList(xmlName);
                    int avgSalaryNum = 1;

                    //Заносим данные Maven'a
                    XMLWorker xmlWorker = new XMLWorker(xmlName);
                    EmployeeRepository empRep = xmlWorker.readXML();
                    empRepRes.employees.AddRange(empRep.employees);

                    //Получаем данные с узлов
                    int nodeNum = init.getNodeNumber();
                    Console.WriteLine();
                    Console.WriteLine("Received information:");
                    for (int i = 0; i < nodeNum; i++)
                    {
                        AvgSalary avgSal = new AvgSalary();
                        TCPServer connectorToNode = new TCPServer(IPAddress.Parse("127.0.0.1"), mavensPort + i + 1);
                        byte[] receivedBytes = connectorToNode.TCPReceive();
                        BinaryWorker bw = new BinaryWorker();
                        Message msg = bw.bytesToMessage(receivedBytes);
                        avgSal = msg.s;
                        avgSalaryVal += avgSal.getAvgSalary();
                        avgSalaryNum ++;
                        empRep = msg.empRep;
                        empRepRes.employees.AddRange(empRep.employees);

                        Console.WriteLine(avgSal.getAvgSalary());
                        for (int j = 0; j < empRep.employees.Count(); j++)
                        {
                            Console.WriteLine(empRep.employees[j]);
                        }
                    }

                    //Обрабатываем информацию для отправки клиенту
                    AvgSalary avgSalary = new AvgSalary(avgSalaryNum, avgSalaryVal);
                    Calculator calc = new Calculator(empRepRes);
                    List<EmployeeRepository> groupedList = calc.groupBy();
                    EmployeeRepository sortedList = calc.sortBy();
                    EmployeeRepository filteredList = calc.filterBy(avgSalary.getAvgSalary());

                    //Готовим данные для отправки
                    MessageCalc msgCalc = new MessageCalc(sortedList, filteredList, groupedList);
                    BinaryWorker bwForCalc = new BinaryWorker();
                    byte[] bytesForClient = bwForCalc.messageCalcToBytes(msgCalc);

                    //Отправляем клиенту
                    TCPClient connectorToClient = new TCPClient(IPAddress.Parse("127.0.0.1"), 30000);
                    connectorToClient.TCPSend(bytesForClient);
                }

                else if (init.isWhite() == true)
                {
                    string xmlName = init.xmlName();
                    float salarySum = getSalaryList(xmlName);
                    int empNum = getEmpNum(xmlName);

                    //Считываем данные с xml
                    XMLWorker xmlWorker = new XMLWorker(xmlName);
                    EmployeeRepository empRep = xmlWorker.readXML();

                    //Готовим данные для отправки Maven'у
                    Message msg = new Message(new AvgSalary(empNum, salarySum), empRep);
                    BinaryWorker bw = new BinaryWorker();
                    byte[] bytesToSend = bw.messageToBytes(msg);

                    //Отправляем
                    TCPClient senderToMaven = new TCPClient(IPAddress.Parse("127.0.0.1"), init.nodesPort());
                    senderToMaven.TCPSend(bytesToSend);
                }

                else if (init.isWhite() == false)
                {
                    string xmlName = init.xmlName();
                    float salarySum = getSalaryList(xmlName);
                    int empNum = getEmpNum(xmlName);

                    //Готовим данные для отправки
                    Message msg = new Message(new AvgSalary(empNum, salarySum), new EmployeeRepository());
                    BinaryWorker bw = new BinaryWorker();
                    byte[] bytes = bw.messageToBytes(msg);

                    //Отправляем
                    TCPClient senderToMaven = new TCPClient(IPAddress.Parse("127.0.0.1"), init.nodesPort());
                    senderToMaven.TCPSend(bytes);
                }
            });
            t1.Wait();

            Console.ReadLine();
        }
        static void Main(string[] args)
        {
            // получаем количество узлов
            int node_number = 0;
            if (args.Count() > 0)
            {
                try { node_number = Int32.Parse(args[0]); }
                catch { node_number = 0; }
            }

            // ждем ответа от Maven
            Task t1 = Task.Factory.StartNew(async () =>
            {
                UDPSenderReceiver client = new UDPSenderReceiver();
                UdpReceiveResult res = await client.receiveBytesAsync(30000);
                int mavensPort = BitConverter.ToInt32(res.Buffer, 0);
                Console.WriteLine(mavensPort);

                //Соединение с Maven'ом
                TCPServer tcpServer = new TCPServer(IPAddress.Parse("127.0.0.1"), 30000);
                byte[] bytesFromMaven = tcpServer.TCPReceive();
                if (bytesFromMaven == null) Console.WriteLine("Byte's array is empty");

                BinaryWorker bw = new BinaryWorker();
                MessageCalc msgCalc = bw.bytesToMessageCalc(bytesFromMaven);
                if (msgCalc == null) Console.WriteLine("MsgCalc is empty");

                //Вывод полученной информации
                else
                {
                    EmployeeRepository filteredList = msgCalc.filteredEl;
                    EmployeeRepository sortedList = msgCalc.sortedEl;
                    List<EmployeeRepository> groupedList = msgCalc.groupedEl;
                    Console.WriteLine();
                    Console.WriteLine("Filtered list: ");
                    for (int i = 0; i < filteredList.employees.Count(); i++)
                    {
                        Console.WriteLine(filteredList.employees[i]);
                    }
                    Console.WriteLine();
                    Console.WriteLine("Sorted list: ");
                    for (int i = 0; i < sortedList.employees.Count(); i++)
                    {
                        Console.WriteLine(sortedList.employees[i]);
                    }
                    Console.WriteLine();
                    Console.WriteLine("Grouped list: ");
                    EmployeeRepository groupedEmpRep = new EmployeeRepository();
                    for (int i = 0; i < groupedList.Count(); i++)
                    {
                        List<Employee> empList = groupedList[i].employees;
                        for (int j = 0; j < empList.Count(); j++)
                        {
                            groupedEmpRep.Add(empList[j]);
                            Console.WriteLine(empList[j]);
                        }
                    }

                    //Записываем в xml
                    XMLWorker xmlWorker1 = new XMLWorker("filteredList.txt");
                    xmlWorker1.writeXML(filteredList);
                    XMLWorker xmlWorker2 = new XMLWorker("sortedList.txt");
                    xmlWorker2.writeXML(sortedList);
                    XMLWorker xmlWorker3 = new XMLWorker("groupedList.txt");
                    xmlWorker3.writeXML(groupedEmpRep);
                }

            });
            t1.Wait();

            // Шлем узлам запрос на Maven
            Task t2 = Task.Factory.StartNew(async () =>
            {
                UDPSenderReceiver client = new UDPSenderReceiver();

                Console.WriteLine("Client. Press enter key to send!");
                Console.ReadLine();
                byte[] bytes = Encoding.UTF8.GetBytes("Who is Maven?");

                for (int i = 0; i < node_number; i++)
                {
                    await client.sendBroadcastBytesAsync(bytes, 30000 + i + 1);
                }

            });
            t2.Wait();

            Console.ReadLine();
        }