private DataRow[] DtFilesVersions(SQLiteCommand command) { IPEndPoint ipPoint = new IPEndPoint(IPAddress.Parse(IPAddres), Port); Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); socket.Connect(ipPoint); //добавление в модель данных CommandSQL commandSend = new CommandSQL(); commandSend.CommandText = command.CommandText; foreach (SQLiteParameter par in command.Parameters) { commandSend.Parameters += "$" + par.ParameterName + "$" + par.Value; } //сериализация для отправки команды JavaScriptSerializer serializer = new JavaScriptSerializer(); serializer.MaxJsonLength = int.MaxValue; string json = serializer.Serialize(commandSend); //отправка byte[] data = Encoding.Unicode.GetBytes(json); socket.Send(data); // получаем ответ data = new byte[256]; // буфер для ответа StringBuilder builder = new StringBuilder(); int bytes = 0; // количество полученных байт do { bytes = socket.Receive(data, data.Length, 0); builder.Append(Encoding.Unicode.GetString(data, 0, bytes)); }while (socket.Available > 0); string test = builder.ToString(); string[] mystring = test.Split('$'); DataTable table = new DataTable(); table.Columns.Add("AppVersion"); table.Columns.Add("FileHash"); table.Columns.Add("CreationDate"); table.Columns.Add("FileSize"); table.Columns.Add("FilePath"); table.Columns.Add("DateCreateDB"); table.Columns.Add("Applications"); //dataRows[0].Table.Columns.Add("AppVersions",Type. ); for (int i = 1; i < mystring.Length; i++) { JavaScriptSerializer serializer1 = new JavaScriptSerializer(); serializer1.MaxJsonLength = int.MaxValue; FilesVersions meta = serializer1.Deserialize <FilesVersions>(mystring[i]); table.Rows.Add(new object[] { meta.AppVersions, meta.FileHash, meta.CreationDate, meta.FileSize, meta.FilePath, meta.DateCreateDB, meta.Applications }); } socket.Shutdown(SocketShutdown.Both); socket.Close(); DataRow[] dataRows = table.Rows.Cast <DataRow>().ToArray(); return(dataRows); }
private async void Window_Closing(object sender, CancelEventArgs e) { if (IsComplete && IsCurrentPage) { var folderSelect = new FolderSelectDialog { Title = "Please select download location" }; if (folderSelect.ShowDialog()) { var folderPath = folderSelect.FileName; if (!string.IsNullOrEmpty(folderPath)) { var selectedVersions = FilesVersions.Where(v => v.IsSelected); foreach (var selectedVersion in selectedVersions) { //TODO: write files on disk, we need to have a naming convention, because if the project has multiple languages file name is the same for each language var file = await _projectService.DownloadFileVersion(selectedVersion.ProjectId, selectedVersion.LanguageFileId, selectedVersion.Version); } } } } }
private FileVersion GetVersion(string domain, string path, string versionKey, Func <FileData, FileVersion> transform) { var existing = this.FilesVersions.All.FirstOrDefault(fv => fv.File.SiteId == SiteService.CurrentSiteId && fv.File.FilePath == path && fv.File.Domain == domain && fv.Key == versionKey); if (existing != null) { return(existing); } var fileObj = FilesData.All.Include(fd => fd.File).FirstOrDefault(fl => fl.File.SiteId == SiteService.CurrentSiteId && fl.File.FilePath == path && fl.File.Domain == domain); if (fileObj == null) { return(null); } var newVersion = transform(fileObj); if (newVersion == null) { return(null); } newVersion.File = fileObj.File; newVersion.Key = versionKey; var res = FilesVersions.Add(newVersion); UnitOfWork.Commit(); return(res); }
private void GroupFilesByFolderStructure(string selectedFolderPath) { var selectedVersionsGroups = FilesVersions.Where(v => v.IsSelected).GroupBy(p => p.ProjectName); //Group by project name foreach (var group in selectedVersionsGroups) { var projectName = group.Key; var fileVersionsGroup = group.ToList().GroupBy(l => l.LanguageCode); //Group by language code foreach (var languageGroup in fileVersionsGroup) { var languageCode = languageGroup.Key; var languageFolderPath = Path.Combine(selectedFolderPath, projectName, languageCode); var versionGroups = languageGroup.ToList().GroupBy(f => f.Version); foreach (var versionGroup in versionGroups) { var versionFolderPath = Path.Combine(languageFolderPath, versionGroup.Key.ToString()); //Group by file version var files = versionGroup.ToList(); SaveFiles(versionFolderPath, files); } } } }
public void Active() { IPEndPoint ipPoint = new IPEndPoint(IPAddress.Parse(IPAddres), Port); Socket listenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); listenSocket.Bind(ipPoint); listenSocket.Listen(10); Console.WriteLine("Сервер запущен. Ожидание подключений..."); while (true) { Socket handler = listenSocket.Accept(); StringBuilder builder = new StringBuilder(); int bytes = 0; byte[] data = new byte[256]; do { bytes = handler.Receive(data); builder.Append(Encoding.Unicode.GetString(data, 0, bytes)); }while (handler.Available > 0); string sql = builder.ToString(); JavaScriptSerializer serializer1 = new JavaScriptSerializer(); serializer1.MaxJsonLength = int.MaxValue; CommandSQL commandSQL = serializer1.Deserialize <CommandSQL>(sql); string[] parsingSQL = commandSQL.CommandText.Split(' '); string command = ""; string table = ""; if (parsingSQL[0] == "SELECT") { command = parsingSQL[0]; table = parsingSQL[3]; } else { if (parsingSQL[0] == "INSERT") { command = parsingSQL[0]; table = parsingSQL[2]; } else { command = parsingSQL[0]; table = parsingSQL[1]; } } switch (command) { case "SELECT": switch (table) { #region Applications case "Applications": string resultApplications = ""; Applications applications = new Applications(); mydb = new SQLite(AppDomain.CurrentDomain.BaseDirectory); SQLiteCommand commandApplications = new SQLiteCommand(); commandApplications.CommandText = commandSQL.CommandText; string[] paramApplications = commandSQL.Parameters.Split('$'); for (int i = 1; i < paramApplications.Length; i += 2) { commandApplications.Parameters.AddWithValue(paramApplications[i], paramApplications[i + 1]); } DataRow[] datarowsApp = mydb.Select(commandApplications); foreach (DataRow row in datarowsApp) { applications.ApplicationName = row[0].ToString(); JavaScriptSerializer serializer = new JavaScriptSerializer(); serializer.MaxJsonLength = int.MaxValue; string json = serializer.Serialize(applications); resultApplications += "$" + json; } data = Encoding.Unicode.GetBytes(resultApplications); handler.Send(data); handler.Shutdown(SocketShutdown.Both); handler.Close(); break; #endregion #region ApplicationInfo case "ApplicationInfo": string resultApplicationInfo = ""; ApplicationInfo applicationInfo = new ApplicationInfo(); mydb = new SQLite(AppDomain.CurrentDomain.BaseDirectory); SQLiteCommand commandApplicationInfo = new SQLiteCommand(); commandApplicationInfo.CommandText = commandSQL.CommandText; string[] paramApplicationInfo = commandSQL.Parameters.Split('$'); for (int i = 1; i < paramApplicationInfo.Length; i += 2) { commandApplicationInfo.Parameters.AddWithValue(paramApplicationInfo[i], paramApplicationInfo[i + 1]); } DataRow[] datarowsApplicationInfo = mydb.Select(commandApplicationInfo); foreach (DataRow row in datarowsApplicationInfo) { applicationInfo.Application = row[0].ToString(); applicationInfo.AppVersion = row[1].ToString(); applicationInfo.AppDiscription = row[2].ToString(); applicationInfo.Flag = row[3].ToString(); JavaScriptSerializer serializer = new JavaScriptSerializer(); serializer.MaxJsonLength = int.MaxValue; string json = serializer.Serialize(applicationInfo); resultApplicationInfo += "$" + json; } data = Encoding.Unicode.GetBytes(resultApplicationInfo); handler.Send(data); handler.Shutdown(SocketShutdown.Both); handler.Close(); break; #endregion #region FilesContains case "FilesContains": string resultFilesContains = ""; FilesContains filesContains = new FilesContains(); mydb = new SQLite(AppDomain.CurrentDomain.BaseDirectory); SQLiteCommand commandFilesContains = new SQLiteCommand(); commandFilesContains.CommandText = commandSQL.CommandText; string[] paramFilesContains = commandSQL.Parameters.Split('$'); for (int i = 1; i < paramFilesContains.Length; i += 2) { commandFilesContains.Parameters.AddWithValue(paramFilesContains[i], paramFilesContains[i + 1]); } DataRow[] datarowsFilesContains = mydb.Select(commandFilesContains); foreach (DataRow row in datarowsFilesContains) { filesContains.Applications = row[0].ToString(); filesContains.AppVersions = row[1].ToString(); filesContains.FilePath = row[2].ToString(); filesContains.DateCreateDB = row[3].ToString(); filesContains.Contains = (byte[])row[4]; JavaScriptSerializer serializer = new JavaScriptSerializer(); serializer.MaxJsonLength = int.MaxValue; string json = serializer.Serialize(filesContains); resultFilesContains += "$" + json; } data = Encoding.Unicode.GetBytes(resultFilesContains); handler.Send(data); handler.Shutdown(SocketShutdown.Both); handler.Close(); break; #endregion #region FilesVersions case "FilesVersions": string resultFilesVersions = ""; FilesVersions filesVersions = new FilesVersions(); mydb = new SQLite(AppDomain.CurrentDomain.BaseDirectory); SQLiteCommand commandFilesVersions = new SQLiteCommand(); commandFilesVersions.CommandText = commandSQL.CommandText; if (commandSQL.Parameters != null) { string[] paramFilesVersions = commandSQL.Parameters.Split('$'); for (int i = 1; i < paramFilesVersions.Length; i += 2) { commandFilesVersions.Parameters.AddWithValue(paramFilesVersions[i], paramFilesVersions[i + 1]); } } DataRow[] datarowsFilesVersions = mydb.Select(commandFilesVersions); foreach (DataRow row in datarowsFilesVersions) { filesVersions.AppVersions = row[0].ToString(); filesVersions.FileHash = row[1].ToString(); filesVersions.CreationDate = row[2].ToString(); filesVersions.FileSize = Convert.ToInt32(row[3].ToString()); filesVersions.FilePath = row[4].ToString(); filesVersions.DateCreateDB = row[5].ToString(); filesVersions.Applications = row[6].ToString(); JavaScriptSerializer serializer = new JavaScriptSerializer(); serializer.MaxJsonLength = int.MaxValue; string json = serializer.Serialize(filesVersions); resultFilesVersions += "$" + json; } data = Encoding.Unicode.GetBytes(resultFilesVersions); handler.Send(data); handler.Shutdown(SocketShutdown.Both); handler.Close(); break; #endregion } break; case "INSERT": switch (table) { #region Applications case "Applications": mydb = new SQLite(AppDomain.CurrentDomain.BaseDirectory); SQLiteCommand commandApplications = new SQLiteCommand(); commandApplications.CommandText = commandSQL.CommandText; string[] paramApplications = commandSQL.Parameters.Split('$'); for (int i = 1; i < paramApplications.Length; i += 2) { commandApplications.Parameters.AddWithValue(paramApplications[i], paramApplications[i + 1]); } mydb.Insert(commandApplications); data = Encoding.Unicode.GetBytes("True"); handler.Send(data); handler.Shutdown(SocketShutdown.Both); handler.Close(); break; #endregion #region ApplicationInfo case "ApplicationInfo": mydb = new SQLite(AppDomain.CurrentDomain.BaseDirectory); SQLiteCommand commandApplicationInfo = new SQLiteCommand(); commandApplicationInfo.CommandText = commandSQL.CommandText; string[] paramApplicationInfo = commandSQL.Parameters.Split('$'); for (int i = 1; i < paramApplicationInfo.Length; i += 2) { commandApplicationInfo.Parameters.AddWithValue(paramApplicationInfo[i], paramApplicationInfo[i + 1]); } mydb.Insert(commandApplicationInfo); data = Encoding.Unicode.GetBytes("True"); handler.Send(data); handler.Shutdown(SocketShutdown.Both); handler.Close(); break; #endregion #region FilesContains case "FilesContains": mydb = new SQLite(AppDomain.CurrentDomain.BaseDirectory); SQLiteCommand commandFilesContains = new SQLiteCommand(); commandFilesContains.CommandText = commandSQL.CommandText; string[] paramFilesContains = commandSQL.Parameters.Split('$'); for (int i = 1; i < paramFilesContains.Length; i += 2) { commandFilesContains.Parameters.AddWithValue(paramFilesContains[i], paramFilesContains[i + 1]); } mydb.Insert(commandFilesContains); data = Encoding.Unicode.GetBytes("True"); handler.Send(data); handler.Shutdown(SocketShutdown.Both); handler.Close(); break; #endregion #region FilesVersions case "FilesVersions": mydb = new SQLite(AppDomain.CurrentDomain.BaseDirectory); SQLiteCommand commandFilesVersions = new SQLiteCommand(); commandFilesVersions.CommandText = commandSQL.CommandText; string[] paramFilesVersions = commandSQL.Parameters.Split('$'); for (int i = 1; i < paramFilesVersions.Length; i += 2) { commandFilesVersions.Parameters.AddWithValue(paramFilesVersions[i], paramFilesVersions[i + 1]); } mydb.Insert(commandFilesVersions); data = Encoding.Unicode.GetBytes("True"); handler.Send(data); handler.Shutdown(SocketShutdown.Both); handler.Close(); break; #endregion } break; case "Update": switch (table) { #region Applications case "Applications": mydb = new SQLite(AppDomain.CurrentDomain.BaseDirectory); SQLiteCommand commandApplications = new SQLiteCommand(); commandApplications.CommandText = commandSQL.CommandText; string[] paramApplications = commandSQL.Parameters.Split('$'); for (int i = 1; i < paramApplications.Length; i += 2) { commandApplications.Parameters.AddWithValue(paramApplications[i], paramApplications[i + 1]); } mydb.Insert(commandApplications); data = Encoding.Unicode.GetBytes("True"); handler.Send(data); handler.Shutdown(SocketShutdown.Both); handler.Close(); break; #endregion #region ApplicationInfo case "ApplicationInfo": mydb = new SQLite(AppDomain.CurrentDomain.BaseDirectory); SQLiteCommand commandApplicationInfo = new SQLiteCommand(); commandApplicationInfo.CommandText = commandSQL.CommandText; string[] paramApplicationInfo = commandSQL.Parameters.Split('$'); for (int i = 1; i < paramApplicationInfo.Length; i += 2) { commandApplicationInfo.Parameters.AddWithValue(paramApplicationInfo[i], paramApplicationInfo[i + 1]); } mydb.Insert(commandApplicationInfo); data = Encoding.Unicode.GetBytes("True"); handler.Send(data); handler.Shutdown(SocketShutdown.Both); handler.Close(); break; #endregion #region FilesContains case "FilesContains": mydb = new SQLite(AppDomain.CurrentDomain.BaseDirectory); SQLiteCommand commandFilesContains = new SQLiteCommand(); commandFilesContains.CommandText = commandSQL.CommandText; string[] paramFilesContains = commandSQL.Parameters.Split('$'); for (int i = 1; i < paramFilesContains.Length; i += 2) { commandFilesContains.Parameters.AddWithValue(paramFilesContains[i], paramFilesContains[i + 1]); } mydb.Insert(commandFilesContains); data = Encoding.Unicode.GetBytes("True"); handler.Send(data); handler.Shutdown(SocketShutdown.Both); handler.Close(); break; #endregion #region FilesVersions case "FilesVersions": mydb = new SQLite(AppDomain.CurrentDomain.BaseDirectory); SQLiteCommand commandFilesVersions = new SQLiteCommand(); commandFilesVersions.CommandText = commandSQL.CommandText; string[] paramFilesVersions = commandSQL.Parameters.Split('$'); for (int i = 1; i < paramFilesVersions.Length; i += 2) { commandFilesVersions.Parameters.AddWithValue(paramFilesVersions[i], paramFilesVersions[i + 1]); } mydb.Insert(commandFilesVersions); data = Encoding.Unicode.GetBytes("True"); handler.Send(data); handler.Shutdown(SocketShutdown.Both); handler.Close(); break; #endregion } break; } } }