DuplexSessionChannelBase.cs 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. //
  2. // DuplexSessionChannelBase.cs
  3. //
  4. // Author:
  5. // Marcos Cobena ([email protected])
  6. //
  7. // Copyright 2007 Marcos Cobena (http://www.youcannoteatbits.org/)
  8. //
  9. using System;
  10. using System.ServiceModel.Channels;
  11. namespace System.ServiceModel.Channels
  12. {
  13. internal abstract class DuplexChannelBase : ChannelBase, IDuplexChannel
  14. {
  15. ChannelFactoryBase channel_factory_base;
  16. ChannelListenerBase channel_listener_base;
  17. EndpointAddress local_address;
  18. EndpointAddress remote_address;
  19. Uri via;
  20. public DuplexChannelBase (ChannelFactoryBase factory, EndpointAddress remoteAddress, Uri via) : base (factory)
  21. {
  22. channel_factory_base = factory;
  23. remote_address = remoteAddress;
  24. this.via = via;
  25. }
  26. public DuplexChannelBase (ChannelListenerBase listener) : base (listener)
  27. {
  28. channel_listener_base = listener;
  29. }
  30. public abstract EndpointAddress LocalAddress { get; }
  31. public EndpointAddress RemoteAddress {
  32. get { return remote_address; }
  33. }
  34. public Uri Via {
  35. get { return via; }
  36. }
  37. public virtual IAsyncResult BeginSend (Message message, AsyncCallback callback, object state)
  38. {
  39. return BeginSend (message, this.DefaultSendTimeout, callback, state);
  40. }
  41. public abstract IAsyncResult BeginSend (Message message, TimeSpan timeout, AsyncCallback callback, object state);
  42. public abstract void EndSend (IAsyncResult result);
  43. public virtual void Send (Message message)
  44. {
  45. Send (message, this.DefaultSendTimeout);
  46. }
  47. public virtual void Send (Message message, TimeSpan timeout)
  48. {
  49. EndSend (BeginSend (message, timeout, null, null));
  50. }
  51. public virtual IAsyncResult BeginReceive (AsyncCallback callback, object state)
  52. {
  53. return BeginReceive (this.DefaultReceiveTimeout, callback, state);
  54. }
  55. public abstract IAsyncResult BeginReceive (TimeSpan timeout, AsyncCallback callback, object state);
  56. public abstract IAsyncResult BeginTryReceive (TimeSpan timeout, AsyncCallback callback, object state);
  57. public abstract IAsyncResult BeginWaitForMessage (TimeSpan timeout, AsyncCallback callback, object state);
  58. public abstract Message EndReceive (IAsyncResult result);
  59. public abstract bool EndTryReceive (IAsyncResult result, out Message message);
  60. public abstract bool EndWaitForMessage (IAsyncResult result);
  61. public virtual Message Receive ()
  62. {
  63. return Receive (this.DefaultReceiveTimeout);
  64. }
  65. public virtual Message Receive (TimeSpan timeout)
  66. {
  67. return EndReceive (BeginReceive (timeout, null, null));
  68. }
  69. public virtual bool TryReceive (TimeSpan timeout, out Message message)
  70. {
  71. return EndTryReceive (BeginTryReceive (timeout, null, null), out message);
  72. }
  73. public virtual bool WaitForMessage (TimeSpan timeout)
  74. {
  75. return EndWaitForMessage (BeginWaitForMessage (timeout, null, null));
  76. }
  77. }
  78. }