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);
     }));
 }
コード例 #2
0
        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();
                }
            }
        }
コード例 #3
0
ファイル: MainForm.cs プロジェクト: Xsenus/NetworkBackup
        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());
                }
            }
        }
コード例 #4
0
        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)
            {
            }
        }
コード例 #5
0
ファイル: MainForm.cs プロジェクト: Xsenus/NetworkBackup
        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)
                {
                }
            }
        }