Пример #1
0
        /// <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);
        }
Пример #2
0
        /// <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);
            }
        }
Пример #3
0
 /// <summary>
 ///     Removes the given callback.
 /// </summary>
 /// <param name="callback"> The callback to remove. </param>
 public void Remove(ClientDataReceivedHandler <TServerClient> callback)
 {
     _dataReceived.Remove(callback);
 }
Пример #4
0
 /// <summary>
 ///     Adds callback.
 /// </summary>
 /// <param name="callback"> The callback to remove. </param>
 public void Add(ClientDataReceivedHandler <TServerClient> callback)
 {
     _dataReceived.Add(callback);
 }