2 // System.Runtime.Remoting.Channels.Simple.SimpleClientTransportSink.cs
4 // Author: Dietmar Maurer (dietmar@ximian.com)
6 // 2002 (C) Copyright, Ximian, Inc.
9 using System.Collections;
11 using System.Net.Sockets;
12 using System.Runtime.Remoting.Messaging;
13 using System.Runtime.Remoting.Channels;
15 namespace System.Runtime.Remoting.Channels.Simple
18 internal class SimpleClientTransportSink : IClientChannelSink
25 Stream network_stream;
27 public SimpleClientTransportSink (string url)
29 host = SimpleChannel.ParseSimpleURL (url, out object_uri, out port);
30 tcpclient = new TcpClient ();
33 public IDictionary Properties
40 public IClientChannelSink NextChannelSink
43 // we are the last one
48 public void AsyncProcessRequest (IClientChannelSinkStack sinkStack, IMessage msg,
49 ITransportHeaders headers, Stream stream)
51 throw new NotImplementedException ();
54 public void AsyncProcessResponse (IClientResponseChannelSinkStack sinkStack,
55 object state, ITransportHeaders headers,
58 throw new NotImplementedException ();
61 public Stream GetRequestStream (IMessage msg, ITransportHeaders headers)
63 // no direct access to the stream
67 public void ProcessMessage (IMessage msg,
68 ITransportHeaders requestHeaders,
70 out ITransportHeaders responseHeaders,
71 out Stream responseStream)
73 // get a network stream
74 if (network_stream == null) {
75 tcpclient.Connect (host, port);
76 network_stream = tcpclient.GetStream ();
80 SimpleMessageFormat.SendMessageStream (network_stream, (MemoryStream)requestStream,
81 SimpleMessageFormat.MessageType.Request,
84 // read the response fro the network an copy it to a memory stream
85 SimpleMessageFormat.MessageType msg_type;
87 MemoryStream mem_stream = SimpleMessageFormat.ReceiveMessageStream (network_stream, out msg_type, out uri);
93 case SimpleMessageFormat.MessageType.Response:
94 //fixme: read response message
95 responseHeaders = null;
97 responseStream = mem_stream;
101 throw new Exception ("unknown response mesage header");