public void Join(Player player, Coords system) { rwl.AcquireReaderLock(-1); string systemId = system.ToString(); try { if (!Systems.ContainsKey(systemId)) { var lc = rwl.UpgradeToWriterLock(-1); try { if (!Systems.ContainsKey(systemId)) { Console.WriteLine("Creating System Area {0}", systemId); StarSystemAreaManager_Entry obj = new StarSystemAreaManager_Entry(system); Systems.Add(systemId, obj); obj.Join(player); CreateNPCs(obj); } } finally { rwl.DowngradeFromWriterLock(ref lc); } } else { Systems[systemId].Join(player); } } finally { rwl.ReleaseReaderLock(); } }
public void Leave(Player player, Coords system) { rwl.AcquireReaderLock(-1); string systemId = system.ToString(); try { if (Systems.ContainsKey(systemId)) { var lc = rwl.UpgradeToWriterLock(-1); try { if (Systems.ContainsKey(systemId)) { StarSystemAreaManager_Entry obj = Systems[systemId]; obj.Leave(player); } } finally { rwl.DowngradeFromWriterLock(ref lc); } } } finally { rwl.ReleaseReaderLock(); } }
private void CreateNPCs(StarSystemAreaManager_Entry area) { Pirate p = new Pirate(area.Coords); }