public void SendMessageToRoom(ChatMessage message) { var senderClient = _clients[CurrentClient.ClientId]; if (senderClient == null) { throw new ApplicationException("Can not send message before login."); } Task.Factory.StartNew( () => { foreach (var chatClient in _clients.GetAllItems()) { try { chatClient.ClientProxy.OnMessageToRoom(senderClient.User.Name, message); } catch { // ignored } } }); }
public List <MapMonster> GetListMonsterInRange(short mapX, short mapY, byte distance) { return(_monsters.GetAllItems().Where(s => s.Alive && GetDistance( new MapCell() { X = mapX, Y = mapY }, new MapCell() { X = s.MapX, Y = s.MapY }) <= distance + 1).ToList()); }
protected void TaskInvoker(object o) { while (true) { Thread.Sleep(1); Action <InformerClient> action; lock (TaskPoolLock) { if (TaskPool.Count < 1) { continue; } action = TaskPool.Dequeue(); } foreach (var client in Authed.GetAllItems()) { try { action(client); } catch (Exception ex) { Log.ErrorException("InformerService:", ex); } } } // ReSharper disable FunctionNeverReturns }
private void ClientDisconnected(object sender, EventArgs e) { var client = sender as IScsServiceClient; if (client == null) { return; } if (!Clients.GetAllItems().Exists(oo => oo.IndexInAdminList == client.ClientId)) { return; } var index = Clients[client.ClientId].IndexInAdminList; Task.Factory.StartNew(delegate { OnClientCrashed(Clients[index].UserName); Clients.Remove(index); }); }
/// <summary> /// Stops the server. /// </summary> public virtual void Stop() { if (_connectionListener != null) { _connectionListener.Stop(); } foreach (var client in Clients.GetAllItems()) { client.Disconnect(); } }
public void LoadPortals() { var partitioner = Partitioner.Create(DAOFactory.PortalDAO.LoadByMap(Map.MapId), EnumerablePartitionerOptions.None); ThreadSafeSortedList <int, Portal> _portalList = new ThreadSafeSortedList <int, Portal>(); Parallel.ForEach(partitioner, portal => { Portal portal2 = portal as Portal; portal2.SourceMapInstanceId = MapInstanceId; _portalList[portal2.PortalId] = portal2; }); _portals.AddRange(_portalList.GetAllItems()); }
public void Initialize() { // parse rates XPRate = int.Parse(System.Configuration.ConfigurationManager.AppSettings["RateXp"]); DropRate = int.Parse(System.Configuration.ConfigurationManager.AppSettings["RateDrop"]); GoldRate = int.Parse(System.Configuration.ConfigurationManager.AppSettings["RateGold"]); FairyXpRate = int.Parse(System.Configuration.ConfigurationManager.AppSettings["RateFairyXp"]); // load explicite type of ItemDTO foreach (ItemDTO itemDTO in DAOFactory.ItemDAO.LoadAll()) { Item ItemGO = null; switch (itemDTO.ItemType) { case ItemType.Ammo: ItemGO = new NoFunctionItem(itemDTO); break; case ItemType.Armor: ItemGO = new WearableItem(itemDTO); break; case ItemType.Box: ItemGO = new BoxItem(itemDTO); break; case ItemType.Event: ItemGO = new MagicalItem(itemDTO); break; case ItemType.Fashion: ItemGO = new WearableItem(itemDTO); break; case ItemType.Food: ItemGO = new FoodItem(itemDTO); break; case ItemType.Jewelery: ItemGO = new WearableItem(itemDTO); break; case ItemType.Magical: ItemGO = new MagicalItem(itemDTO); break; case ItemType.Main: ItemGO = new NoFunctionItem(itemDTO); break; case ItemType.Map: ItemGO = new NoFunctionItem(itemDTO); break; case ItemType.Part: ItemGO = new NoFunctionItem(itemDTO); break; case ItemType.Potion: ItemGO = new PotionItem(itemDTO); break; case ItemType.Production: ItemGO = new ProduceItem(itemDTO); break; case ItemType.Quest1: ItemGO = new NoFunctionItem(itemDTO); break; case ItemType.Quest2: ItemGO = new NoFunctionItem(itemDTO); break; case ItemType.Sell: ItemGO = new NoFunctionItem(itemDTO); break; case ItemType.Shell: ItemGO = new MagicalItem(itemDTO); break; case ItemType.Snack: ItemGO = new SnackItem(itemDTO); break; case ItemType.Special: ItemGO = new SpecialItem(itemDTO); break; case ItemType.Specialist: ItemGO = new WearableItem(itemDTO); break; case ItemType.Teacher: ItemGO = new TeacherItem(itemDTO); break; case ItemType.Upgrade: ItemGO = new UpgradeItem(itemDTO); break; case ItemType.Weapon: ItemGO = new WearableItem(itemDTO); break; default: ItemGO = new NoFunctionItem(itemDTO); break; } _items.Add(ItemGO); } Logger.Log.Info(String.Format(Language.Instance.GetMessageFromKey("ITEMS_LOADED"), _items.Count())); // intialize monsterdrops _monsterDrops = new ThreadSafeSortedList <short, List <DropDTO> >(); foreach (var monsterDropGrouping in DAOFactory.DropDAO.LoadAll().GroupBy(d => d.MonsterVNum)) { if (monsterDropGrouping.Key.HasValue) { _monsterDrops[monsterDropGrouping.Key.Value] = monsterDropGrouping.OrderBy(d => d.DropChance).ToList(); } else { _generalDrops = monsterDropGrouping.ToList(); } } Logger.Log.Info(String.Format(Language.Instance.GetMessageFromKey("DROPS_LOADED"), _monsterDrops.GetAllItems().Sum(i => i.Count()))); // initialiize monsterskills _monsterSkills = new ThreadSafeSortedList <short, List <NpcMonsterSkill> >(); foreach (var monsterSkillGrouping in DAOFactory.NpcMonsterSkillDAO.LoadAll().GroupBy(n => n.NpcMonsterVNum)) { _monsterSkills[monsterSkillGrouping.Key] = monsterSkillGrouping.Select(n => n as NpcMonsterSkill).ToList(); } Logger.Log.Info(String.Format(Language.Instance.GetMessageFromKey("MONSTERSKILLS_LOADED"), _monsterSkills.GetAllItems().Sum(i => i.Count()))); // initialize npcmonsters foreach (NpcMonsterDTO npcmonsterDTO in DAOFactory.NpcMonsterDAO.LoadAll()) { _npcs.Add(npcmonsterDTO as NpcMonster); } Logger.Log.Info(String.Format(Language.Instance.GetMessageFromKey("NPCMONSTERS_LOADED"), _npcs.Count())); // intialize receipes _recipes = new ThreadSafeSortedList <int, List <Recipe> >(); foreach (var recipeGrouping in DAOFactory.RecipeDAO.LoadAll().GroupBy(r => r.MapNpcId)) { _recipes[recipeGrouping.Key] = recipeGrouping.Select(r => r as Recipe).ToList(); } Logger.Log.Info(String.Format(Language.Instance.GetMessageFromKey("RECIPES_LOADED"), _recipes.GetAllItems().Sum(i => i.Count()))); // initialize shopitems _shopItems = new ThreadSafeSortedList <int, List <ShopItemDTO> >(); foreach (var shopItemGrouping in DAOFactory.ShopItemDAO.LoadAll().GroupBy(s => s.ShopId)) { _shopItems[shopItemGrouping.Key] = shopItemGrouping.ToList(); } Logger.Log.Info(String.Format(Language.Instance.GetMessageFromKey("SHOPITEMS_LOADED"), _shopItems.GetAllItems().Sum(i => i.Count()))); // initialize shopskills _shopSkills = new ThreadSafeSortedList <int, List <ShopSkillDTO> >(); foreach (var shopSkillGrouping in DAOFactory.ShopSkillDAO.LoadAll().GroupBy(s => s.ShopId)) { _shopSkills[shopSkillGrouping.Key] = shopSkillGrouping.ToList(); } Logger.Log.Info(String.Format(Language.Instance.GetMessageFromKey("SHOPSKILLS_LOADED"), _shopSkills.GetAllItems().Sum(i => i.Count()))); // initialize shops _shops = new ThreadSafeSortedList <int, Shop>(); foreach (var shopGrouping in DAOFactory.ShopDAO.LoadAll()) { _shops[shopGrouping.MapNpcId] = shopGrouping as Shop; } Logger.Log.Info(String.Format(Language.Instance.GetMessageFromKey("SHOPS_LOADED"), _shops.GetAllItems().Count())); // initialize teleporters _teleporters = new ThreadSafeSortedList <int, List <TeleporterDTO> >(); foreach (var teleporterGrouping in DAOFactory.TeleporterDAO.LoadAll().GroupBy(t => t.MapNpcId)) { _teleporters[teleporterGrouping.Key] = teleporterGrouping.Select(t => t).ToList(); } Logger.Log.Info(String.Format(Language.Instance.GetMessageFromKey("TELEPORTERS_LOADED"), _teleporters.GetAllItems().Sum(i => i.Count()))); // initialize skills foreach (SkillDTO skillDTO in DAOFactory.SkillDAO.LoadAll()) { Skill skill = skillDTO as Skill; skill.Combos.AddRange(DAOFactory.ComboDAO.LoadBySkillVnum(skill.SkillVNum).ToList()); _skills.Add(skill); } Logger.Log.Info(String.Format(Language.Instance.GetMessageFromKey("SKILLS_LOADED"), _skills.Count())); // intialize mapnpcs _mapNpcs = new ThreadSafeSortedList <short, List <MapNpc> >(); foreach (var mapNpcGrouping in DAOFactory.MapNpcDAO.LoadAll().GroupBy(t => t.MapId)) { _mapNpcs[mapNpcGrouping.Key] = mapNpcGrouping.Select(t => t as MapNpc).ToList(); } Logger.Log.Info(String.Format(Language.Instance.GetMessageFromKey("MAPNPCS_LOADED"), _mapNpcs.GetAllItems().Sum(i => i.Count()))); try { int i = 0; int monstercount = 0; foreach (MapDTO map in DAOFactory.MapDAO.LoadAll()) { Guid guid = Guid.NewGuid(); Map newMap = new Map(map.MapId, guid, map.Data); newMap.Music = map.Music; newMap.ShopAllowed = map.ShopAllowed; // register for broadcast _maps.TryAdd(guid, newMap); newMap.SetMapMapMonsterReference(); newMap.SetMapMapNpcReference(); i++; newMap.LoadMonsters(); foreach (MapMonster mapMonster in newMap.Monsters) { mapMonster.Map = newMap; newMap.AddMonster(mapMonster); } monstercount += newMap.Monsters.Count(); } if (i != 0) { Logger.Log.Info(String.Format(Language.Instance.GetMessageFromKey("MAPS_LOADED"), i)); } else { Logger.Log.Error(Language.Instance.GetMessageFromKey("NO_MAP")); } Logger.Log.Info(String.Format(Language.Instance.GetMessageFromKey("MAPMONSTERS_LOADED"), monstercount)); } catch (Exception ex) { Logger.Log.Error("General Error", ex); } }
public List <MapMonster> GetListMonsterInRange(short mapX, short mapY, byte distance) { return(_monsters.GetAllItems().Where(s => s.IsAlive && s.IsInRange(mapX, mapY, distance)).ToList()); }