PageRenderTime 47ms CodeModel.GetById 21ms RepoModel.GetById 1ms app.codeStats 0ms

/source/library/Interlace/Sharpcap/RemoteCaptureService.cs

https://bitbucket.org/VahidN/interlace
C# | 104 lines | 59 code | 20 blank | 25 comment | 2 complexity | a72f60b6396c139ac0b3a1f4e67a5436 MD5 | raw file
  1. #region Using Directives and Copyright Notice
  2. // Copyright (c) 2010, Bit Plantation
  3. // All rights reserved.
  4. //
  5. // Redistribution and use in source and binary forms, with or without
  6. // modification, are permitted provided that the following conditions are met:
  7. // * Redistributions of source code must retain the above copyright
  8. // notice, this list of conditions and the following disclaimer.
  9. // * Redistributions in binary form must reproduce the above copyright
  10. // notice, this list of conditions and the following disclaimer in the
  11. // documentation and/or other materials provided with the distribution.
  12. // * Neither the name of the Bit Plantation nor the
  13. // names of its contributors may be used to endorse or promote products
  14. // derived from this software without specific prior written permission.
  15. //
  16. // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  17. // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  18. // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  19. // ARE DISCLAIMED. IN NO EVENT SHALL COMPUTER CONSULTANCY PTY LTD BE LIABLE
  20. // FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  21. // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  22. // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  23. // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  24. // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  25. // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
  26. // DAMAGE.
  27. using System;
  28. using System.Collections.Generic;
  29. using System.Text;
  30. using Interlace.ReactorCore;
  31. using Interlace.ReactorService;
  32. #endregion
  33. namespace Interlace.Sharpcap
  34. {
  35. public class RemoteCaptureService : IService
  36. {
  37. IReactor _reactor;
  38. ConnectorHandle _controlConnector;
  39. List<ICaptureListener> _listeners = new List<ICaptureListener>();
  40. int _listenPort;
  41. public RemoteCaptureService(int listenPort)
  42. {
  43. _listenPort = listenPort;
  44. }
  45. internal IReactor Reactor
  46. {
  47. get { return _reactor; }
  48. }
  49. internal void AddListener(ICaptureListener listener)
  50. {
  51. _listeners.Add(listener);
  52. }
  53. internal void RemoveListener(ICaptureListener listener)
  54. {
  55. for (int i = 0; i < _listeners.Count; i++)
  56. {
  57. if (object.ReferenceEquals(_listeners[i], listener))
  58. {
  59. _listeners.RemoveAt(i);
  60. return;
  61. }
  62. }
  63. }
  64. public void BroadcastCapture(byte[] buffer, int offset, int length)
  65. {
  66. foreach (ICaptureListener listener in _listeners)
  67. {
  68. listener.HandleCapture(buffer, offset, length);
  69. }
  70. }
  71. #region IService Members
  72. public void Open(IServiceHost host)
  73. {
  74. _reactor = host.Reactor;
  75. _controlConnector = host.Reactor.ListenStream(new RemoteCaptureProtocolFactory(this), _listenPort);
  76. }
  77. public void Close(IServiceHost host)
  78. {
  79. _controlConnector.Close();
  80. _reactor = null;
  81. }
  82. #endregion
  83. }
  84. }