2002-12-28 Patrik Torstensson
[mono.git] / mcs / class / corlib / System.Runtime.Remoting.Messaging / RemotingSurrogate.cs
1 //
2 // System.Runtime.Remoting.Messaging.RemotingSurrogate.cs
3 //
4 // Author:    Patrik Torstensson
5 //
6 // (C) Ximian, Inc.  http://www.ximian.com
7 //
8
9 using System;
10 using System.Runtime.Remoting;
11 using System.Runtime.Remoting.Proxies;
12 using System.Runtime.Serialization;
13
14 namespace System.Runtime.Remoting.Messaging \r
15 {
16         internal class RemotingSurrogate : ISerializationSurrogate\r
17         {\r
18                 public virtual void GetObjectData(Object obj, SerializationInfo si, StreamingContext sc)\r
19                 {               \r
20                         if (null == obj || null == si)\r
21                                 throw new ArgumentNullException();\r
22 \r
23                         if (RemotingServices.IsTransparentProxy (obj) )\r
24                         {\r
25                                 RealProxy rp = RemotingServices.GetRealProxy (obj);\r
26                                 rp.GetObjectData (si, sc);\r
27                         } else RemotingServices.GetObjectData (obj, si, sc);\r
28                 }\r
29 \r
30                 public virtual Object  SetObjectData(Object obj, SerializationInfo si, StreamingContext sc, ISurrogateSelector selector)\r
31                 { \r
32                         throw new NotSupportedException();\r
33                 }\r
34         }
35
36         internal class ObjRefSurrogate : ISerializationSurrogate\r
37         {\r
38                 public virtual void GetObjectData(Object obj, SerializationInfo si, StreamingContext sc)\r
39                 {               \r
40                         if (null == obj || null == si)\r
41                                 throw new ArgumentNullException();\r
42                         \r
43                         ((ObjRef) obj).GetObjectData (si, sc);\r
44 \r
45                         // added to support same syntax as MS\r
46                         si.AddValue("fIsMarshalled", 0);            \r
47                 }\r
48 \r
49                 public virtual Object SetObjectData(Object obj, SerializationInfo si, StreamingContext sc, ISurrogateSelector selector)\r
50                 { \r
51                         // ObjRef is deserialized using the IObjectReference interface
52                         throw new NotSupportedException ("Do not use RemotingSurrogateSelector when deserializating");
53                 }\r
54         }
55 }