void RemoveTool(PaintGunItem item, int index) { ToolRemoved?.Invoke(item); Tools.RemoveAtFast(index); itemPool.Return(item); if (Tools.Count == 0) { SetUpdateMethods(UpdateFlags.UPDATE_DRAW, false); if (spawnedRifles.Count == 0) { SetUpdateMethods(UpdateFlags.UPDATE_AFTER_SIM, false); } } }
/// <summary> /// Tool unRegister /// </summary> /// <param name="info">Tool information</param> /// <returns>result</returns> public bool UnRegisterTool(HcToolInfo info) { var lockTakenScan = false; var lockTakenRegister = false; try { // lock Monitor.TryEnter(ScannedTools, Timeout, ref lockTakenScan); Monitor.TryEnter(RegisteredTools, Timeout, ref lockTakenRegister); // check lock taken if (!lockTakenScan || !lockTakenRegister) { return(false); } // get register tool var register = FindToolInfo(RegisteredTools, info.Mac); if (register == null) { return(false); } // remove register tool RegisteredTools.Remove(register); // tool removed event ToolRemoved?.Invoke(info); return(true); } finally { // unlock if (lockTakenScan) { Monitor.Exit(ScannedTools); } if (lockTakenRegister) { Monitor.Exit(RegisteredTools); } } }
/// <summary> /// Handles the <see cref="Tool.Disposed"/> event of a <see cref="Tool"/> in this <see cref="ToolManager"/>. /// </summary> /// <param name="sender">The <see cref="Tool"/> the event came from.</param> /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param> void tool_Disposed(Tool sender, EventArgs e) { if (sender == null) { Debug.Fail("How the hell was the sender null?"); return; } try { // Remove the event hooks SetToolListeners(sender, false); // Remove the tool var wasRemoved = _tools.Remove(sender.GetType()); if (wasRemoved) { if (ToolRemoved != null) { ToolRemoved.Raise(this, EventArgsHelper.Create(sender)); } } Debug.Assert(wasRemoved); } catch (Exception ex) { const string errmsg = "Failed to remove tool `{0}`. Exception: {1}"; if (log.IsErrorEnabled) { log.ErrorFormat(errmsg, sender, ex); } Debug.Fail(string.Format(errmsg, sender, ex)); } }