private void ListPackageVersions( ClientConnection clientConnection, ClientRequest clientRequest) { // request XmlDocument xmlDocument = new XmlDocument(); using (MemoryStream memoryStream = new MemoryStream(clientRequest.Message.Data)) { xmlDocument.Load(memoryStream); } XmlMessageListPackages listPackagesMessage = XmlMessageCreator.CreateXmlMessageListPackages(xmlDocument); // response XmlMessageListPackageVersions packageVersions = XmlMessageCreator.CreateXmlMessageListPackageVersions(); foreach (KeyValuePair <string, List <string> > repositoryItem in listPackagesMessage.Repositories) { Repository repository = _repositoryManager.GetRepository(repositoryItem.Key); foreach (string packageName in repositoryItem.Value) { List <string> versions = repository.GetPackageVersions(packageName); if (!packageVersions.AddRepositoryPackageVersions(repository.Name, packageName, versions)) { Console.WriteLine("ERROR: Cannot add package versions!"); } } } SendClientXmlResponse(clientConnection, clientRequest, PacketMessageType.S_PACKAGE_VERSIONS, packageVersions); }
public void GetPackageVersions( string repositoryName, string packageNames) { XmlMessageListPackages listPackagesMessage = XmlMessageCreator.CreateXmlMessageListPackages(); List <string> packages = packageNames.Split(',').ToList <string>(); listPackagesMessage.AddRepositoryPackages(repositoryName, packages); // create packet PacketMessage packetMessage = new PacketMessage(PacketMessageType.C_LIST_PACKAGE_VERSIONS, 0, listPackagesMessage.ToByteArray()); byte[] packet = _packetManager.CreateMessage(packetMessage.GetMessageData()); // send _clientSocket.Send(packet); // get response int rec = _clientSocket.Receive(_socketBuffer); byte[] data = new byte[rec]; Array.Copy(_socketBuffer, data, rec); _packetManager.AddReceivedData(data); }
private void OnPackageDataHeaderReceived(PacketMessage packetMessage) { XmlDocument xmlDocument = CreateXmlDocumentFromMessage(packetMessage); //Console.WriteLine("DEBUG: Received S_PACKAGE_DATA_HEADER: " + xmlDocument.OuterXml); XmlMessagePackageDataHeader message = XmlMessageCreator.CreateXmlMessagePackageDataHeader(xmlDocument); if (PackageDataHeaderReceived != null) { PackageDataHeaderReceived(this, message); } }
private void OnListPackageVersionsReceived(PacketMessage packetMessage) { XmlDocument xmlDocument = CreateXmlDocumentFromMessage(packetMessage); //Console.WriteLine("DEBUG: Received S_PACKAGE_VERSIONS: " + xmlDocument.OuterXml); XmlMessageListPackageVersions message = XmlMessageCreator.CreateXmlMessageListPackageVersions(xmlDocument); if (ListPackageVersionsReceived != null) { ListPackageVersionsReceived(this, message); } }
private void OnPackageFileDataBeginReceived(PacketMessage packetMessage) { XmlDocument xmlDocument = CreateXmlDocumentFromMessage(packetMessage); //Console.WriteLine("DEBUG: Received S_PACKAGE_FILE_BEGIN: " + xmlDocument.OuterXml); XmlMessagePackageFileBegin message = XmlMessageCreator.CreateXmlMessagePackageFileBegin(xmlDocument); if (PackageFileDataBeginReceived != null) { PackageFileDataBeginReceived(this, message); } }
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 ListPackages( ClientConnection clientConnection, ClientRequest clientRequest) { XmlMessageListPackages listPackagesMessage = XmlMessageCreator.CreateXmlMessageListPackages(); foreach (Repository repository in _repositoryManager.Repositories.Values) { List <string> packages = new List <string>(); foreach (string package in repository.GetPackages()) { packages.Add(package); } listPackagesMessage.AddRepositoryPackages(repository.Name, packages); } SendClientXmlResponse(clientConnection, clientRequest, PacketMessageType.S_PACKAGES, listPackagesMessage); }
private void SendPackageFile( ClientConnection clientConnection, ClientRequest clientRequest, FileInfo packageFileInfo) { // send file data const int FILE_CHUNK_SIZE = 32 * 1024 * 1024; // read the file by chunks of 32MB using (FileStream file = File.OpenRead(packageFileInfo.FullName)) { // send file begin XmlMessagePackageFileBegin fileBeginMessage = XmlMessageCreator.CreateXmlMessagePackageFileBegin( packageFileInfo.Name, file.Length, ComputeFileChecksum(packageFileInfo)); SendClientXmlResponse(clientConnection, clientRequest, PacketMessageType.S_PACKAGE_FILE_BEGIN, fileBeginMessage); int part = 0; int bytesRead = 0; byte[] buffer = new byte[FILE_CHUNK_SIZE]; while ((bytesRead = file.Read(buffer, 0, buffer.Length)) > 0) { byte[] dataToSend = buffer; // extract only "bytesRead" number of bytes if (bytesRead < buffer.Length) { dataToSend = new byte[bytesRead]; Array.Copy(buffer, dataToSend, bytesRead); } SendClientRawDataResponse(clientConnection, clientRequest, PacketMessageType.S_PACKAGE_FILE_DATA, dataToSend, part++); } } // send file end SendClientNoDataResponse(clientConnection, clientRequest, PacketMessageType.S_PACKAGE_FILE_END); }
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); } }