HttpChannel.cs 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. //
  2. // System.Runtime.Remoting.Channels.Http.HttpChannel
  3. //
  4. // Summary: Implements a wrapper class for HTTP client and server channels.
  5. //
  6. // Classes: public HttpChannel
  7. //
  8. // Authors:
  9. // Martin Willemoes Hansen ([email protected])
  10. // Ahmad Tantawy ([email protected])
  11. // Ahmad Kadry ([email protected])
  12. // Hussein Mehanna ([email protected])
  13. //
  14. // (C) 2003 Martin Willemoes Hansen
  15. //
  16. using System;
  17. using System.Collections;
  18. using System.Runtime.Remoting.Messaging;
  19. namespace System.Runtime.Remoting.Channels.Http
  20. {
  21. public class HttpChannel: IChannelReceiver, IChannelSender, IChannel, IChannelReceiverHook
  22. {
  23. private HttpServerChannel serverChannel;
  24. private HttpClientChannel clientChannel;
  25. private string channelName = "http";
  26. private int channelPriority = 1;
  27. public HttpChannel()
  28. {
  29. SetupChannel (new Hashtable(), null, null);
  30. }
  31. public HttpChannel (int port)
  32. {
  33. Hashtable prop = new Hashtable();
  34. prop["port"] = port;
  35. SetupChannel(prop,null,null);
  36. }
  37. public HttpChannel (IDictionary Properties,IClientChannelSinkProvider clientSinkProvider,IServerChannelSinkProvider serverSinkProvider)
  38. {
  39. SetupChannel (Properties,clientSinkProvider,serverSinkProvider);
  40. }
  41. private void SetupChannel (IDictionary properties, IClientChannelSinkProvider clientSinkProvider, IServerChannelSinkProvider serverSinkProvider)
  42. {
  43. clientChannel = new HttpClientChannel (properties, clientSinkProvider);
  44. serverChannel = new HttpServerChannel (properties, serverSinkProvider);
  45. object val = properties ["name"];
  46. if (val != null) channelName = val as string;
  47. val = properties ["priority"];
  48. if (val != null) channelPriority = Convert.ToInt32 (val);
  49. }
  50. //IChannel Members
  51. public String ChannelName
  52. {
  53. get { return channelName; }
  54. }
  55. public int ChannelPriority
  56. {
  57. get { return channelPriority; }
  58. }
  59. public String Parse(String url, out String objectURI)
  60. {
  61. return HttpHelper.Parse(url, out objectURI);
  62. }
  63. //IChannelSender Members
  64. public IMessageSink CreateMessageSink(String url, Object remoteChannelData, out String objectURI)
  65. {
  66. return clientChannel.CreateMessageSink(url, remoteChannelData, out objectURI);
  67. }
  68. //IChannelReciever Members
  69. public String[] GetUrlsForUri(String objectURI)
  70. {
  71. return serverChannel.GetUrlsForUri(objectURI);
  72. }
  73. public void StartListening(Object data)
  74. {
  75. serverChannel.StartListening(data);
  76. }
  77. public void StopListening(Object data)
  78. {
  79. serverChannel.StopListening(data);
  80. }
  81. public Object ChannelData
  82. {
  83. get { return serverChannel.ChannelData; }
  84. }
  85. public String ChannelScheme
  86. {
  87. get { return "http"; }
  88. }
  89. public bool WantsToListen
  90. {
  91. get { return serverChannel.WantsToListen; }
  92. set { serverChannel.WantsToListen = value; }
  93. }
  94. public IServerChannelSink ChannelSinkChain
  95. {
  96. get { return serverChannel.ChannelSinkChain; }
  97. }
  98. public void AddHookChannelUri (String channelUri)
  99. {
  100. serverChannel.AddHookChannelUri (channelUri);
  101. }
  102. }
  103. }