/// <summary> /// add a data received callback /// </summary> /// <param name="commandid">command id</param> /// <param name="callback">ClientDataReceivedHandler{Socket|Endpoint}</param> public void AddDataReceivedCallback(uint commandid, ClientDataReceivedHandler <T, TServerClient> callback) { if (commandid > Constants.USER_COMMAND_LIMIT) { throw new ArgumentOutOfRangeException( $"{nameof(commandid)} is restricted to 0 - {Constants.USER_COMMAND_LIMIT}"); } if (callback == null) { throw new ArgumentNullException(nameof(callback)); } ServerClientEventEntry <T, TServerClient> buffer; bool lockTaken = false; try { _dataReceivedCallbacksLock.Enter(ref lockTaken); if (!_dataReceivedCallbacks.TryGetValue(commandid, out buffer)) { throw new Exception( $"Invalid paramater '{nameof(commandid)}'! Use 'AddCommand(uint, DeserializeData)' first."); } } finally { if (lockTaken) { _dataReceivedCallbacksLock.Exit(false); } } buffer.Add(callback); }
/// <summary> /// remove a data received callback /// </summary> /// <param name="commandid">command id</param> /// <param name="callback">ClientDataReceivedHandler{Socket|Endpoint}</param> public void RemoveDataReceivedCallback(uint commandid, ClientDataReceivedHandler <T, TServerClient> callback) { if (commandid > Constants.USER_COMMAND_LIMIT) { throw new ArgumentOutOfRangeException( $"{nameof(commandid)} is restricted to 0 - {Constants.USER_COMMAND_LIMIT}"); } if (callback == null) { throw new ArgumentNullException(nameof(callback)); } if (_dataReceivedCallbacks.TryGetValue(commandid, out ServerClientEventEntry <T, TServerClient> buffer)) { buffer.Remove(callback); } }
/// <summary> /// Removes the given callback. /// </summary> /// <param name="callback"> The callback to remove. </param> public void Remove(ClientDataReceivedHandler <TServerClient> callback) { _dataReceived.Remove(callback); }
/// <summary> /// Adds callback. /// </summary> /// <param name="callback"> The callback to remove. </param> public void Add(ClientDataReceivedHandler <TServerClient> callback) { _dataReceived.Add(callback); }