public static IMvcBuilder AddDxSampleModelJsonOptions(this IMvcBuilder builder, Action <DxSampleModelJsonSerializationContractResolver> setupAction = null) { return(builder.AddJsonOptions(opt => { var resolver = new DxSampleModelJsonSerializationContractResolver(); opt.SerializerSettings.ContractResolver = resolver; opt.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore; setupAction?.Invoke(resolver); })); }
public void Process() { NetworkStream stream = null; try { stream = client.GetStream(); byte[] data = new byte[64]; while (true) { StringBuilder builder = new StringBuilder(); int bytes = 0; do { bytes = stream.Read(data, 0, data.Length); builder.Append(Encoding.Unicode.GetString(data, 0, bytes)); }while (stream.DataAvailable); string message = builder.ToString(); if (string.IsNullOrWhiteSpace(message)) { continue; } if (message.Equals("GetFolderBrowserDialog")) { Console.WriteLine("Запрос на получение каталогов проводника."); var myExplorer = new MyExplorer(); myExplorer.Root = "root"; var drives = Environment.GetLogicalDrives(); foreach (string s in drives) { myExplorer.Path.Add(s); } message = JsonConvert.SerializeObject(myExplorer); data = Encoding.Unicode.GetBytes(message); stream.Write(data, 0, data.Length); } else { if (message.Substring(0, 1).Equals($"{(int)TaskServerStatus.MyExplorerTask}")) { message = message.Remove(0, 1); if (JsonConvert.DeserializeObject <MyExplorer>(message) is MyExplorer myExplorerIn) { Console.WriteLine($"Запрос на получение каталогов проводника по пути {myExplorerIn.Root}"); var directorys = Directory.GetDirectories(myExplorerIn.Root); foreach (var item in directorys) { var result = item.Replace($"{myExplorerIn.Root}", ""); if (result.Contains("\\")) { result = result.Replace("\\", ""); } myExplorerIn.Path.Add(result); } message = JsonConvert.SerializeObject(myExplorerIn); data = Encoding.Unicode.GetBytes(message); stream.Write(data, 0, data.Length); } } else if (message.Substring(0, 1).Equals($"{(int)TaskServerStatus.GetTask}")) { message = message.Remove(0, 1); if (JsonConvert.DeserializeObject <Task>(message) is Task task) { Console.WriteLine($"Получена задача {task.Name} для {task.IPAddress}"); var taskServer = Session.GetObjectByKey <Task>(task.ServerOid); if (taskServer is null) { taskServer = new Task(Session); Console.WriteLine($"Создана новая задача на сервере {task.Name}"); } else { Console.WriteLine($"Задача {taskServer.Name} будет обновлена."); } taskServer.Name = task.Name; taskServer.SaveDirectory = task.SaveDirectory; taskServer.CopyDirectory = task.CopyDirectory; taskServer.TaskStatus = TaskStatus.Performed; taskServer.Date = task.Date; taskServer.IPAddress = task.IPAddress; taskServer.IsMonday = task.IsMonday; taskServer.IsTuesday = task.IsTuesday; taskServer.IsWednesday = task.IsWednesday; taskServer.IsThursday = task.IsThursday; taskServer.IsFriday = task.IsFriday; taskServer.IsSaturday = task.IsSaturday; taskServer.IsSunday = task.IsSunday; taskServer.Save(); Console.WriteLine($"Возвращен Oid задачи: {taskServer.Oid}"); var resolver = new DxSampleModelJsonSerializationContractResolver(); message = $"{(int)TaskServerStatus.CreatedTask}" + JsonConvert.SerializeObject(taskServer, new JsonSerializerSettings() { ReferenceLoopHandling = ReferenceLoopHandling.Ignore, ContractResolver = resolver }); data = Encoding.Unicode.GetBytes(message); stream.Write(data, 0, data.Length); Console.WriteLine("Запуск задачи"); TaskScheduler.Start(taskServer); } } else if (message.Substring(0, 1).Equals($"{(int)TaskServerStatus.StartTask}")) { message = message.Remove(0, 1); if (JsonConvert.DeserializeObject <Task>(message) is Task task) { Console.WriteLine($"Получена задача {task.Name} для {task.IPAddress}"); var taskServer = Session.GetObjectByKey <Task>(task.ServerOid); if (taskServer is null) { taskServer = new Task(Session); Console.WriteLine($"Создана новая задача на сервере {task.Name}"); } else { Console.WriteLine($"Задача {taskServer.Name} будет запущена."); } taskServer.Name = task.Name; taskServer.SaveDirectory = task.SaveDirectory; taskServer.CopyDirectory = task.CopyDirectory; taskServer.TaskStatus = task.TaskStatus; taskServer.Date = task.Date; taskServer.IPAddress = task.IPAddress; taskServer.IsMonday = task.IsMonday; taskServer.IsTuesday = task.IsTuesday; taskServer.IsWednesday = task.IsWednesday; taskServer.IsThursday = task.IsThursday; taskServer.IsFriday = task.IsFriday; taskServer.IsSaturday = task.IsSaturday; taskServer.IsSunday = task.IsSunday; taskServer.Save(); Console.WriteLine($"Возвращен Oid задачи: {taskServer.Oid}"); var resolver = new DxSampleModelJsonSerializationContractResolver(); message = $"{(int)TaskServerStatus.CreatedTask}" + JsonConvert.SerializeObject(taskServer, new JsonSerializerSettings() { ReferenceLoopHandling = ReferenceLoopHandling.Ignore, ContractResolver = resolver }); data = Encoding.Unicode.GetBytes(message); stream.Write(data, 0, data.Length); Console.WriteLine("Запуск задачи"); TaskScheduler.Start(taskServer); } } else if (message.Substring(0, 1).Equals($"{(int)TaskServerStatus.StopTask}")) { message = message.Remove(0, 1); if (JsonConvert.DeserializeObject <Task>(message) is Task task) { Console.WriteLine($"Получена задача {task.Name} для {task.IPAddress} на остановку."); var taskServer = Session.GetObjectByKey <Task>(task.ServerOid); if (taskServer is null) { taskServer = new Task(Session); Console.WriteLine($"Задача {task.Name} уже была остановлена."); } else { Console.WriteLine($"Задача {task.Name} была остановлена."); taskServer.Delete(); taskServer.Save(); } continue; } } else if (message.Substring(0, 1).Equals($"{(int)TaskServerStatus.SendTaskEventLog}")) { message = message.Remove(0, 1); if (JsonConvert.DeserializeObject <Task>(message) is Task task) { Console.WriteLine($"Получена задача {task.Name} для {task.IPAddress} на отправку отчета."); var taskServer = Session.GetObjectByKey <Task>(task.ServerOid); if (taskServer != null) { taskServer.Reload(); var eventLogList = new EventLogList(taskServer); var resolver = new DxSampleModelJsonSerializationContractResolver(); message = $"{(int)TaskServerStatus.SendTaskEventLog}" + JsonConvert.SerializeObject(eventLogList, new JsonSerializerSettings() { ReferenceLoopHandling = ReferenceLoopHandling.Ignore, ContractResolver = resolver }); data = Encoding.Unicode.GetBytes(message); stream.Write(data, 0, data.Length); continue; } } } } } } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { if (stream != null) { stream.Close(); } if (client != null) { client.Close(); } } }
private void UpdateEventLog(Session session, Task task) { if (task != null) { try { var client = new TcpClient(task.IPAddress, 15000); NetworkStream networkStream = client.GetStream(); while (true) { var resolver = new DxSampleModelJsonSerializationContractResolver(); var message = $"{(int)TaskServerStatus.SendTaskEventLog}" + JsonConvert.SerializeObject(task, new JsonSerializerSettings() { ReferenceLoopHandling = ReferenceLoopHandling.Ignore, ContractResolver = resolver }); byte[] data = Encoding.Unicode.GetBytes(message); networkStream.Write(data, 0, data.Length); SaveEvent(task, Event.ReportRequest, "Отправлен запрос на сервер для получения отчета"); data = new byte[64]; StringBuilder builder = new StringBuilder(); int bytes = 0; do { bytes = networkStream.Read(data, 0, data.Length); builder.Append(Encoding.Unicode.GetString(data, 0, bytes)); }while (networkStream.DataAvailable); message = builder.ToString(); if (!string.IsNullOrWhiteSpace(message) && message.Substring(0, 1).Equals($"{(int)TaskServerStatus.SendTaskEventLog}")) { message = message.Remove(0, 1); using (var sess = SessionController.GetSessionSimpleDataLayer()) { var taskSave = sess.GetObjectByKey <Task>(task.Oid); if (taskSave != null) { if (JsonConvert.DeserializeObject <EventLogList>(message) is EventLogList eventLogList) { foreach (var @event in eventLogList.EventLogs) { if (taskSave.EventLogs.FirstOrDefault(f => f.Date == @event.Date && f.Event == @event.Event) is null) { taskSave.EventLogs.Add(new EventLog(sess) { Date = @event.Date, Event = @event.Event, Description = @event.Description }); } taskSave.Save(); } return; } else { taskSave.EventLogs.Add(new EventLog(sess) { Date = DateTime.Now, Event = Event.Error, Description = "Возникла ошибка при получении задачи, возможно сетевой сервер не доступен" }); taskSave.Save(); } } } } else { break; } } } catch (Exception ex) { SaveEvent(task, Event.SocketException, ex.ToString()); } } }
private void SendTask() { try { var networkStream = GetNetworkStream(txtIPAddress.Text, 15000); if (networkStream is null) { return; } while (true) { var resolver = new DxSampleModelJsonSerializationContractResolver(); var message = $"{(int)TaskServerStatus.GetTask}" + JsonConvert.SerializeObject(Task, new JsonSerializerSettings() { ReferenceLoopHandling = ReferenceLoopHandling.Ignore, ContractResolver = resolver }); byte[] data = Encoding.Unicode.GetBytes(message); networkStream.Write(data, 0, data.Length); data = new byte[64]; StringBuilder builder = new StringBuilder(); int bytes = 0; do { bytes = networkStream.Read(data, 0, data.Length); builder.Append(Encoding.Unicode.GetString(data, 0, bytes)); }while (networkStream.DataAvailable); message = builder.ToString(); if (message.Substring(0, 1).Equals($"{(int)TaskServerStatus.CreatedTask}")) { message = message.Remove(0, 1); if (JsonConvert.DeserializeObject <Task>(message) is Task task) { using (var sess = SessionController.GetSessionSimpleDataLayer()) { var taskEx = sess.GetObjectByKey <Task>(Task.Oid); if (taskEx != null) { taskEx.ServerOid = task.Oid; taskEx.TaskStatus = task.TaskStatus; var eventLog = new EventLog(sess) { Date = DateTime.Now, Event = Event.Start, Description = "Успешное добавление и старт задачи на сервере" }; taskEx.EventLogs.Add(eventLog); taskEx.Save(); } } return; } } } } catch (Exception) { } }
private void EditTask(Task task, TaskStatus taskStatus, TaskServerStatus taskServerStatus) { if (task != null) { task.Reload(); if (task.TaskStatus == taskStatus) { return; } task.TaskStatus = taskStatus; task.Save(); try { var client = new TcpClient(task.IPAddress, 15000); NetworkStream networkStream = client.GetStream(); while (true) { var resolver = new DxSampleModelJsonSerializationContractResolver(); var message = $"{(int)taskServerStatus}" + JsonConvert.SerializeObject(task, new JsonSerializerSettings() { ReferenceLoopHandling = ReferenceLoopHandling.Ignore, ContractResolver = resolver }); byte[] data = Encoding.Unicode.GetBytes(message); networkStream.Write(data, 0, data.Length); if (taskServerStatus == TaskServerStatus.StopTask) { var eventLog = new EventLog(Session) { Date = DateTime.Now, Event = Event.Stop, }; task.EventLogs.Add(eventLog); task.Save(); return; } data = new byte[64]; StringBuilder builder = new StringBuilder(); int bytes = 0; do { bytes = networkStream.Read(data, 0, data.Length); builder.Append(Encoding.Unicode.GetString(data, 0, bytes)); }while (networkStream.DataAvailable); message = builder.ToString(); if (message.Substring(0, 1).Equals($"{(int)TaskServerStatus.CreatedTask}")) { message = message.Remove(0, 1); if (JsonConvert.DeserializeObject <Task>(message) is Task taskServer) { task.ServerOid = taskServer.Oid; task.TaskStatus = taskServer.TaskStatus; var eventLog = new EventLog(Session) { Date = DateTime.Now, Event = Event.Start }; task.EventLogs.Add(eventLog); task.Save(); return; } } } } catch (Exception) { } } }