File: ServerObject.cs

package info (click to toggle)
mono 4.6.2.7+dfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 778,148 kB
  • ctags: 914,052
  • sloc: cs: 5,779,509; xml: 2,773,713; ansic: 432,645; sh: 14,749; makefile: 12,361; perl: 2,488; python: 1,434; cpp: 849; asm: 531; sql: 95; sed: 16; php: 1
file content (174 lines) | stat: -rw-r--r-- 3,509 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
//
// MonoTests.Remoting.ServerObject.cs
//
// Author: Lluis Sanchez Gual (lluis@ximian.com)
//
// 2003 (C) Copyright, Ximian, Inc.
//

using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Lifetime;
using System.Collections;
using NUnit.Framework;

namespace MonoTests.Remoting
{
	// A list of ServerObject instances

	[ContextHook("x", false)]
	public class ServerList: 
		ContextBoundObject, 
		IDisposable
	{
		ArrayList values = new ArrayList();
		public int NumVal = 0;
		public string StrVal = "val";

		public ServerList()
		{
			Assert.IsTrue (RemotingServices.IsTransparentProxy(this));
			CallSeq.Add ("List created");
		}

		public void Dispose()
		{
			Assert.IsTrue (RemotingServices.IsTransparentProxy(this));
			CallSeq.Add ("List disposed");

		}

		public void Add (ServerObject v)
		{
			Assert.IsTrue (RemotingServices.IsTransparentProxy(this));
			values.Add (v);
			CallSeq.Add ("Added " + v.Name);
		}

		public void ProcessItems ()
		{
			Assert.IsTrue (RemotingServices.IsTransparentProxy(this));
			CallSeq.Add ("Processing");

			int total = 0;
			foreach (ServerObject ob in values)
				total += ob.GetValue();

			CallSeq.Add ("Total: " + total);
		}

		public void Clear()
		{
			Assert.IsTrue (RemotingServices.IsTransparentProxy(this));
			CallSeq.Add ("Clearing");
			values.Clear();
		}

		public void ParameterTest1 (int a, out string b)
		{
			Assert.IsTrue (RemotingServices.IsTransparentProxy(this));
			b = "adeu " + a;
		}
		
		public void ParameterTest2 (int a, out int b)
		{
			Assert.IsTrue (RemotingServices.IsTransparentProxy(this));
			b = a+1;
		}
		
		public ServerObject NewItem(string name)
		{
			Assert.IsTrue (RemotingServices.IsTransparentProxy(this));
			ServerObject obj = new ServerObject(name);
			Add (obj);
			return obj;
		}

		public ServerObject CreateItem(string name, int val)
		{
			Assert.IsTrue (RemotingServices.IsTransparentProxy(this));
			ServerObject obj = new ServerObject(name);
			obj.SetValue (val);
			return obj;
		}

		public ComplexData SetComplexData (ComplexData data)
		{
			Assert.IsTrue (RemotingServices.IsTransparentProxy(this));
			CallSeq.Add ("Showing content of ComplexData");
			data.Dump ();
			return data;
		}

		public override ObjRef CreateObjRef (Type type)
		{
			Assert.IsTrue (RemotingServices.IsTransparentProxy(this));
			CallSeq.Add ("### ServerList.CreateObjRef");
			return base.CreateObjRef (type);
		}
	}
		
	// A remotable object

	public class ServerObject: 
//		ContextBoundObject
		MarshalByRefObject
	{
		int _value;
		string _name;

		public ServerObject (string name)
		{
			_name = name;
		}

		public string Name
		{
			get { return _name; }
		}

		public void SetValue (int v)
		{
			CallSeq.Add ("ServerObject " + _name + ": setting " + v);
			_value = v;
		}

		public int GetValue ()
		{
			CallSeq.Add ("ServerObject " + _name + ": getting " + _value);
			return _value;
		}

		public override ObjRef CreateObjRef (Type type)
		{
			CallSeq.Add ("### ServerObject.CreateObjRef");
			return base.CreateObjRef (type);
		}
	}

	// Some complex data for testing serialization

	public enum AnEnum { a,b,c,d,e };

	[Serializable]
	public class ComplexData
	{
		public AnEnum Val = AnEnum.a;

		public object[] Info;

		public ComplexData (AnEnum va, object[] info)
		{
			Info = info;
			Val = va;
		}

		public void Dump ()
		{
			CallSeq.Add ("Content:");
			CallSeq.Add ("Val: " + Val);
			foreach (object ob in Info)
				CallSeq.Add ("Array item: " + ob);
		}
	}
}