private void CreateNodes(TreeList treeList, MyExplorer myExplorer) { treeList.BeginUnboundLoad(); foreach (var item in myExplorer.Path) { treeList.AppendNode(new object[] { item }, null); } treeList.EndUnboundLoad(); }
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(); }
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); }
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 }
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); }