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); }
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); } }
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); } }