public void Register(byte dataMarker, IDataHandler handler)
 {
     lock (_handlers)
     {
         VerifyDisposed();
         if (IsLocked)
         {
             throw new TempException(string.Format("Gateway is already locked. Cannot register handler for marker {0}", dataMarker));
         }
         if (_handlers[dataMarker] != null)
         {
             throw new TempException(string.Format("Data handler with marker {0} is already registered", dataMarker));
         }
         if (handler == null)
         {
             return;
         }
         IManagedDataHandler managedDataHandler = GetManagedDataHandler(handler);
         if (managedDataHandler == null)
         {
             return;
         }
         _handlers[dataMarker] = managedDataHandler;
     }
 }
示例#2
0
        private INativeDataHandler GetNativeDataHandler(IDataHandler handler)
        {
            INativeDataHandler nativeDataHandler = handler as INativeDataHandler;

            if (nativeDataHandler != null)
            {
                return(nativeDataHandler);
            }
            IManagedDataHandler managedDataHandler = handler as IManagedDataHandler;

            if (managedDataHandler != null)
            {
                return(new NativeDataHandlerRouter(managedDataHandler));
            }
            return(null);
        }
示例#3
0
 unsafe private void Read(Stream stream)
 {
     byte[] dataReadBuffer   = new byte[DataBufferMaxSize];
     byte[] headerReadBuffer = new byte[sizeof(byte) + sizeof(int)];
     while (!_disposed)
     {
         try
         {
             int  read = stream.Read(headerReadBuffer, 0, headerReadBuffer.Length);
             byte dataMarker;
             int  dataSize;
             if (read == 0)
             {
                 continue;
             }
             fixed(byte *headerReadBufferPointer = headerReadBuffer)
             {
                 dataMarker = *(headerReadBufferPointer);
                 dataSize   = *(int *)(headerReadBufferPointer + 1);
             }
             if (dataSize > dataReadBuffer.Length)
             {
                 LoggingProvider.Current.Log(TraceEventType.Error, string.Format("Attempt to read data bigger than buffer. Buffer size: {0}. Data size: {1}", dataReadBuffer.Length, dataSize));
                 continue;
             }
             stream.Read(dataReadBuffer, 0, dataSize);
             NativeArray         array   = NativeArray.Copy(dataReadBuffer, dataSize);
             IManagedDataHandler handler = _handlers[dataMarker];
             if (handler == null || handler.HandlePackage(array))
             {
                 array.Dispose();
             }
         }
         catch (ObjectDisposedException objectDisposedException)
         {
             LoggingProvider.Current.Log(TraceEventType.Information, objectDisposedException);
             return;
         }
         catch (Exception exception)
         {
             LoggingProvider.Current.Log(TraceEventType.Warning, exception);
             break;
         }
     }
 }
 public NativeDataHandlerRouter(IManagedDataHandler managedDataHandler)
 {
     _managedDataHandler    = managedDataHandler;
     _handlePackageCallback = new ManagedCallbackHolder <NativeMethods.DataHandlerRouter.HandlePackage>(HandlePackage);
     _nativeDataHandler     = NativeMethods.DataHandlerRouter.Create(_handlePackageCallback.Callback);
 }