Esempio n. 1
0
 private void CreateNodes(TreeList treeList, MyExplorer myExplorer)
 {
     treeList.BeginUnboundLoad();
     foreach (var item in myExplorer.Path)
     {
         treeList.AppendNode(new object[] { item }, null);
     }
     treeList.EndUnboundLoad();
 }
Esempio n. 2
0
 private void InitFolders(TreeListNode treeListNode, MyExplorer myExplorer)
 {
     treeListMyExplorer.BeginUnboundLoad();
     foreach (string s in myExplorer.Path)
     {
         try
         {
             treeListMyExplorer.AppendNode(new object[] { s }, treeListNode);;
         }
         catch { }
     }
     treeListMyExplorer.EndUnboundLoad();
 }
Esempio n. 3
0
        private void treeListMyExplorer_RowClick(object sender, RowClickEventArgs e)
        {
            if (e.Node.HasChildren)
            {
                return;
            }

            try
            {
                while (true)
                {
                    var myExplorerOut = new MyExplorer();
                    myExplorerOut.Root = GetFullPath(e.Node);

                    if (myExplorerOut.Root.LastIndexOf(':') == myExplorerOut.Root.Length - 1)
                    {
                        myExplorerOut.Root = $"{myExplorerOut.Root}\\";
                    }

                    var    message = $"{(int)TaskServerStatus.MyExplorerTask}" + JsonConvert.SerializeObject(myExplorerOut);
                    byte[] data    = Encoding.Unicode.GetBytes(message);
                    NetworkStream.Write(data, 0, data.Length);
                    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 (JsonConvert.DeserializeObject <MyExplorer>(message) is MyExplorer myExplorer)
                    {
                        InitFolders(e.Node, myExplorer);
                        return;
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
        private static void Wait()
        {
            if (_plansLeft > 0 && !GetMyEffects().Any() && MyExplorer.Sanity <= 200)
            {
                int countPlayersAroundMe = Gameboard.GetOtherExplorers().Where(x => Gameboard.MyExplorer.GetDistanceTo(x) <= 2).Count();
                if (countPlayersAroundMe > 1)
                {
                    CastPlan();
                    return;
                }
            }
            if (_lightsLeft > 0 && !GetMyEffects().Any())
            {
                int countEnemiesAroundMe = Gameboard.GetActiveEnemies().Where(x => MyExplorer.GetDistanceTo(x) <= 5).Count();
                if (countEnemiesAroundMe > 2)
                {
                    CastLight();
                    return;
                }
            }

            Console.WriteLine(Actions.WAIT);
        }
Esempio n. 5
0
        public void CalculateScoreForEachField()
        {
            for (int col = 0; col < WIDTH; col++)
            {
                for (int row = 0; row < HEIGHT; row++)
                {
                    Fields[col, row].ResetScore();
                }
            }

            foreach (var entity in Entities.Where(x => x.ID != MyExplorer.ID))
            {
                if (entity.Type == Entity.EntityType.WANDERER)
                {
                    var mob   = (Wanderer)entity;
                    int score = -20;

                    if ((mob.CurrentState == Wanderer.State.SPAWNING && mob.TimeTillSpawn <= 2) || mob.CurrentState == Wanderer.State.WANDERING)
                    {
                        Fields[mob.X, mob.Y].AddScore(score);
                        IEnumerable <Field> neighbouring = GetNeighouringFields(entity, 1);
                        foreach (var field in neighbouring)
                        {
                            field.AddScore(score);
                        }
                    }
                }
                if (entity.Type == Entity.EntityType.SLASHER)
                {
                    var mob = (Slasher)entity;
                    if ((mob.CurrentState == Wanderer.State.SPAWNING && mob.TimeTillSpawn <= 2) || mob.CurrentState == Wanderer.State.WANDERING)
                    {
                        entity.Field.AddScore(-50);
                        IEnumerable <Field> neighbouring = entity.Field.GetNeighouringFields(1);
                        foreach (var field in neighbouring)
                        {
                            field.AddScore(-25);
                        }
                    }
                }
                if (entity.Type == Entity.EntityType.EXPLORER)
                {
                    foreach (var field in entity.Field.GetNeighouringFields(2))
                    {
                        field.AddScore(Game.SanityLossLonely - Game.SanityLossGroup);
                    }
                }
                if (entity.Type == Entity.EntityType.EFFECT_LIGHT)
                {
                    var effect = (Effect)entity;
                    foreach (var field in entity.Field.GetNeighouringFields(effect.Radius))
                    {
                        field.AddScore(1);
                    }
                }
                if (entity.Type == Entity.EntityType.EFFECT_PLAN)
                {
                    var effect = (Effect)entity;
                    foreach (var field in entity.Field.GetNeighouringFields(effect.Radius))
                    {
                        field.AddScore(2);
                    }
                }
                if (entity.Type == Entity.EntityType.EFFECT_SHELTER)
                {
                    var effect = (Shelter)entity;
                    entity.Field.AddScore(effect.RemainingEnergy * 5);
                }
            }

            Console.Error.WriteLine("BEST FIELDS");
            foreach (var field in Fields.Cast <Field>().OrderByDescending(x => x.Score).ThenBy(x => MyExplorer.GetDistanceTo(x)).Take(3))
            {
                Console.Error.WriteLine($"{field}: {field.Score} IsWall: {field.IsWall}");
            }

            //var closestWanderer
        }
Esempio n. 6
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();
                }
            }
        }
        private static bool ShouldYell()
        {
            if (_yellsLeft > 0 && !GetMyEffects().Any())
            {
                int countPlayersAroundMe = Gameboard.GetOtherExplorers().Where(x => Gameboard.MyExplorer.GetDistanceTo(x) <= 1).Count();
                if (countPlayersAroundMe >= 1)
                {
                    bool newPlayerFound = GetOtherExplorers().Where(x => Gameboard.MyExplorer.GetDistanceTo(x) <= 1 && !AlreadyYelledPlayerIDs.Contains(x.ID)).Any();

                    int countEnemiesAroundMe = Gameboard.GetActiveEnemies().Where(x => MyExplorer.GetDistanceTo(x) <= 3).Count();
                    if (countEnemiesAroundMe >= 1)
                    {
                        return(true);
                    }
                }
            }
            return(false);
        }