CORBAClientTransportSink.cs 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. //
  2. // System.Runtime.Remoting.Channels.CORBA.CORBAClientTransportSink.cs
  3. //
  4. // Author: Dietmar Maurer ([email protected])
  5. //
  6. // 2002 (C) Copyright, Ximian, Inc.
  7. //
  8. using System.Collections;
  9. using System.IO;
  10. using System.Net.Sockets;
  11. using System.Runtime.Remoting.Messaging;
  12. using System.Runtime.Remoting.Channels;
  13. namespace System.Runtime.Remoting.Channels.CORBA
  14. {
  15. internal class CORBAClientTransportSink : IClientChannelSink
  16. {
  17. string host;
  18. string object_uri;
  19. int port;
  20. TcpClient tcpclient;
  21. public CORBAClientTransportSink (string url)
  22. {
  23. host = CORBAChannel.ParseCORBAURL (url, out object_uri, out port);
  24. tcpclient = new TcpClient ();
  25. }
  26. public IDictionary Properties
  27. {
  28. get {
  29. return null;
  30. }
  31. }
  32. public IClientChannelSink NextChannelSink
  33. {
  34. get {
  35. // we are the last one
  36. return null;
  37. }
  38. }
  39. public void AsyncProcessRequest (IClientChannelSinkStack sinkStack, IMessage msg,
  40. ITransportHeaders headers, Stream stream)
  41. {
  42. throw new NotImplementedException ();
  43. }
  44. public void AsyncProcessResponse (IClientResponseChannelSinkStack sinkStack,
  45. object state, ITransportHeaders headers,
  46. Stream stream)
  47. {
  48. throw new NotImplementedException ();
  49. }
  50. public Stream GetRequestStream (IMessage msg, ITransportHeaders headers)
  51. {
  52. // no direct access to the stream
  53. return null;
  54. }
  55. public void ProcessMessage (IMessage msg,
  56. ITransportHeaders requestHeaders,
  57. Stream requestStream,
  58. out ITransportHeaders responseHeaders,
  59. out Stream responseStream)
  60. {
  61. // get a network stream
  62. tcpclient.Connect (host, port);
  63. Stream network_stream = tcpclient.GetStream ();
  64. // send the message
  65. IIOPMessage.SendMessageStream (network_stream, (MemoryStream)requestStream,
  66. IIOPMessage.MessageType.Request,
  67. object_uri);
  68. // read the response fro the network an copy it to a memory stream
  69. IIOPMessage.MessageType msg_type;
  70. string uri;
  71. MemoryStream mem_stream =
  72. IIOPMessage.ReceiveMessageStream (network_stream, out msg_type, out uri);
  73. // close the stream
  74. tcpclient.Close ();
  75. switch (msg_type) {
  76. case IIOPMessage.MessageType.Response:
  77. //fixme: read response message
  78. responseHeaders = null;
  79. responseStream = mem_stream;
  80. break;
  81. default:
  82. throw new Exception ("unknown response mesage header");
  83. }
  84. }
  85. }
  86. }