Ejemplo n.º 1
0
        private void GetPackage(
            ClientConnection clientConnection,
            ClientRequest clientRequest)
        {
            // request
            XmlDocument xmlDocument = new XmlDocument();

            using (MemoryStream memoryStream = new MemoryStream(clientRequest.Message.Data))
            {
                xmlDocument.Load(memoryStream);
            }

            XmlMessageGetPackage getPackageMessage = XmlMessageCreator.CreateXmlMessageGetPackage(xmlDocument);

            Console.WriteLine("INFO: Requested to send package:");
            Console.WriteLine("      * repository: " + getPackageMessage.RepositoryName);
            Console.WriteLine("      * package   : " + getPackageMessage.PackageName);
            Console.WriteLine("      * version   : " + getPackageMessage.Version);

            // response
            Repository repository = _repositoryManager.GetRepository(getPackageMessage.RepositoryName);

            if (repository == null)
            {
                // invalid request
                string reason = "Invalid repository name - " + getPackageMessage.RepositoryName;
                Console.WriteLine("ERROR: Cannot get package. " + reason);
                SendClientStringResponse(clientConnection, clientRequest, PacketMessageType.S_ERROR_INVALID_PACKAGE_REQUEST, reason);
                return;
            }

            string packageDataDir = repository.GetPackagePath(getPackageMessage.PackageName, getPackageMessage.Version);

            if (String.IsNullOrEmpty(packageDataDir))
            {
                // invalid request
                string reason = "Invalid package - " + getPackageMessage.PackageName + "(" + getPackageMessage.Version + ")";
                Console.WriteLine("ERROR: Cannot get package. " + reason);
                SendClientStringResponse(clientConnection, clientRequest, PacketMessageType.S_ERROR_INVALID_PACKAGE_REQUEST, reason);
                return;
            }

            // send package data
            SendPackageData(clientConnection, clientRequest, getPackageMessage, packageDataDir);
        }
Ejemplo n.º 2
0
        public bool GetPackage(
            string repositoryName,
            string packageName,
            string version)
        {
            // verify repository
            LocalRepository requestedRepository = _localRepositoryManager.LocalRepositories.FirstOrDefault(
                localRepository => localRepository.Name == repositoryName);

            if (requestedRepository != null)
            {
                XmlMessageGetPackage getPackageMessage =
                    XmlMessageCreator.CreateXmlMessageGetPackage(repositoryName, packageName, version);


                // create packet
                PacketMessage packetMessage =
                    new PacketMessage(PacketMessageType.C_GET_PACKAGE, 0, getPackageMessage.ToByteArray());
                byte[] packet = _packetManager.CreateMessage(packetMessage.GetMessageData());

                // setup package builder and send request
                _packetBuilder.StartReceiving(requestedRepository.Path);
                _clientSocket.Send(packet);

                // get response
                Console.WriteLine("INFO: Waiting for incoming data...");

                do
                {
                    int    rec  = _clientSocket.Receive(_socketBuffer);
                    byte[] data = new byte[rec];
                    Array.Copy(_socketBuffer, data, rec);
                    _packetManager.AddReceivedData(data);

                    Thread.Sleep(10);  // TODO must be removed
                }while (_packetBuilder.IsReceiving());

                return(true);
            }
            else
            {
                return(false);
            }
        }
Ejemplo n.º 3
0
        private void SendPackageData(
            ClientConnection clientConnection,
            ClientRequest clientRequest,
            XmlMessageGetPackage getPackageMessage,
            string packageDataDir)
        {
            DirectoryInfo packageDataInfo = new DirectoryInfo(packageDataDir);

            // send data package header
            XmlMessagePackageDataHeader packagedataHeader =
                XmlMessageCreator.CreateXmlMessagePackageDataHeader(
                    getPackageMessage.RepositoryName,
                    getPackageMessage.PackageName,
                    getPackageMessage.Version,
                    packageDataInfo.GetFiles().Length);

            SendClientXmlResponse(clientConnection, clientRequest, PacketMessageType.S_PACKAGE_DATA_HEADER, packagedataHeader);

            // send files
            foreach (FileInfo packageFileInfo in packageDataInfo.GetFiles())
            {
                SendPackageFile(clientConnection, clientRequest, packageFileInfo);
            }
        }