flush
[mcs.git] / class / System.Runtime.Remoting / System.Runtime.Remoting.Channels.Ipc.Unix / IpcChannel.cs
blob943de8e603cbfd712750146ab1b16ef53cc3cdc7
1 //
2 // System.Runtime.Remoting.Channels.Ipc.Unix.IpcChannel.cs
3 //
4 // Author: Robert Jordan (robertj@gmx.net)
5 //
6 // Copyright (C) 2005 Novell, Inc (http://www.novell.com)
7 //
8 //
9 // Permission is hereby granted, free of charge, to any person obtaining
10 // a copy of this software and associated documentation files (the
11 // "Software"), to deal in the Software without restriction, including
12 // without limitation the rights to use, copy, modify, merge, publish,
13 // distribute, sublicense, and/or sell copies of the Software, and to
14 // permit persons to whom the Software is furnished to do so, subject to
15 // the following conditions:
16 //
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
19 //
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 #if NET_2_0
31 using System;
32 using System.Collections;
33 using System.IO;
34 using System.Runtime.Remoting;
35 using System.Runtime.Remoting.Messaging;
37 namespace System.Runtime.Remoting.Channels.Ipc.Unix
39 internal class IpcChannel : IChannelReceiver, IChannelSender, IChannel
41 IChannelSender _clientChannel;
42 IChannelReceiver _serverChannel;
44 string _portName;
45 string _name = "ipc";
46 int _priority = 1;
48 internal static IDictionary GetDefaultProperties (string portName)
50 Hashtable h = new Hashtable ();
51 if (portName != null)
52 h ["portName"] = portName;
53 h ["name"] = "ipc";
54 h ["priority"] = "1";
55 return h;
58 public IpcChannel () : this (null)
62 public IpcChannel (string portName)
63 : this (GetDefaultProperties (portName), null, null)
67 public IpcChannel (IDictionary properties,
68 IClientChannelSinkProvider clientSinkProvider,
69 IServerChannelSinkProvider serverSinkProvider)
71 if (properties != null) {
72 _portName = properties ["portName"] as string;
73 if (properties ["name"] != null)
74 _name = properties ["name"] as string;
75 else
76 properties ["name"] = _name;
77 if (properties ["priority"] != null)
78 _priority = Convert.ToInt32 (properties ["priority"]);
81 if (_portName != null)
82 _serverChannel = new IpcServerChannel (properties, serverSinkProvider);
84 _clientChannel = new IpcClientChannel (properties, clientSinkProvider);
87 public string ChannelName
89 get { return _name; }
92 public int ChannelPriority
94 get { return _priority; }
97 public string Parse (string url, out string objectUri)
99 if (_serverChannel != null)
100 return _serverChannel.Parse (url, out objectUri);
101 else
102 return _clientChannel.Parse (url, out objectUri);
106 public IMessageSink CreateMessageSink(string url,
107 object remoteChannelData,
108 out string objectUri)
110 return _clientChannel.CreateMessageSink (url, remoteChannelData, out objectUri);
113 public object ChannelData
115 get {
116 if (_serverChannel != null)
117 return _serverChannel.ChannelData;
118 else
119 return null;
123 public string[] GetUrlsForUri(string objectUri)
125 if (_serverChannel != null)
126 return _serverChannel.GetUrlsForUri (objectUri);
127 else
128 return null;
131 public void StartListening (object data)
133 if (_serverChannel != null)
134 _serverChannel.StartListening (data);
137 public void StopListening(object data)
139 if (_serverChannel != null)
140 _serverChannel.StopListening (data);
146 #endif