public static CommandPackage RecieveCommand(Socket socket)
        {
            var            buffer  = new byte[HeaderConstants.HeaderLength];
            CommandPackage package = new CommandPackage();

            RecieveData(socket, HeaderConstants.HeaderLength, buffer);
            package.DecodeHeader(buffer);
            var bufferMessage = new byte[package.DataLength];

            RecieveData(socket, package.DataLength, bufferMessage);
            package.DecodeMessage(bufferMessage);
            return(package);
        }
        public static void SendList(Socket socket, List <String> list, int command)
        {
            CommandPackage package;

            foreach (String s in list)
            {
                package = new CommandPackage(HeaderConstants.Response, command, s);
                SendCommand(socket, package);
                RecieveCommand(socket);
            }
            package = new CommandPackage(HeaderConstants.Response, CommandConstants.FinishSendingList);
            SendCommand(socket, package);
        }
        public static List <String> RecieveList(Socket socket)
        {
            CommandPackage package = RecieveCommand(socket);
            List <String>  list    = new List <String>();

            while (package.Command != CommandConstants.FinishSendingList)
            {
                list.Add(package.Data);
                CommandPackage ack = new CommandPackage(HeaderConstants.Request, CommandConstants.ACK);
                SendCommand(socket, ack);
                package = RecieveCommand(socket);
            }
            return(list);
        }
        public static void SendCommand(Socket socket, CommandPackage package)
        {
            var data      = package.GetHeader();
            var sentBytes = 0;

            while (sentBytes < data.Length)
            {
                sentBytes += socket.Send(data, sentBytes, data.Length - sentBytes, SocketFlags.None);
            }
            sentBytes = 0;
            var message = package.GetMessage();

            while (sentBytes < message.Length)
            {
                sentBytes += socket.Send(message, sentBytes, message.Length - sentBytes, SocketFlags.None);
            }
        }