Click here to Skip to main content
Click here to Skip to main content
Add your own
alternative version

.NET Remoting – Basic Maneuvers

, , 6 Oct 2003
A tutorial on .NET Remoting
cremoteobj.zip
CRemoteObj
CRemoteObj.csproj.user
cremoteobjclient.zip
CRemoteObjClient
App.ico
config file
CRemoteObjClient.csproj.user
cremoteobjinterface.zip
CRemoteObjInterface
CRemoteObjInterface.csproj.user
cremoteobjserver.zip
CRemoteObjServer
App.ico
config file
CRemoteObjServer.csproj.user
web_vdir
bin
CRemoteObj.dll
CRemoteObjInterface.dll
CRemoteObjServer.exe
using System;
using System.Collections;
using System.Threading;

using nsCRemoteObjInterface; //For IRemoteObj interface.


namespace nsCRemoteObj
{
	//Event delegate:
	public delegate void StatusEvent(object sender, StatusEventArgs e);


	public class CRemoteObj : System.MarshalByRefObject, IRemoteObj
	{
		//That's your EVENT here.
		public event StatusEvent evStatus;	

		//Indicating the number of times your method AuthenticateLoser has been invoked - during the life time of "this" instance.
		private int num_of_times_invoked;	

		public CRemoteObj()
		{
			Random rand = new Random((int)System.DateTime.Now.Millisecond + System.DateTime.Now.Second + System.DateTime.Now.Minute);
			num_of_times_invoked=0;
					
			m_nObjID=(int) rand.Next(0,100);
			Console.WriteLine("CRemoteObj constructor invoked.");
		}

		~CRemoteObj()
		{
			Console.WriteLine();
			Console.WriteLine();
			Console.WriteLine("CRemoteObj destructor invoked for objID:{0}", this.ObjID);
			Console.WriteLine();
		}

		public int ObjID
		{
			get { return m_nObjID; }
			set { m_nObjID=value; }
		}

		private int m_nObjID;

		public bool AuthenticateLoser(string sUserName, string sPasswd)
		{
			bool bAuth = false;

			System.Collections.Hashtable usertable = new System.Collections.Hashtable();

			usertable["Paul"]="12345";
			usertable["Jack"]="45678";
			usertable["Sascha"]="12345";
			usertable["Mehdi"]="45678";

			Console.WriteLine("AuthenticateLoser invoked. ObjID:{0}; times invoked:{1}", ObjID.ToString(), this.num_of_times_invoked.ToString());
			Console.WriteLine("Authenticating...");
			for(int i=0; i<3; i++)
			{
				Console.Write("...");
				Thread.Sleep(500);
			}
			Console.WriteLine();

			if( usertable.ContainsKey(sUserName) )
			{
				if( usertable[sUserName].ToString() == sPasswd )
				{
					bAuth=true;
				}
			}

			//Fire the event - if a delegate is associated with the event on client side:
			StatusEventArgs eaStatusArg = new StatusEventArgs("Authentication completed.");
			if(evStatus!=null)
			{
				Console.WriteLine("RemoteObj firing event on server side.!");

				//Fire! eaStatusArg will be streamed to client side where the event is handled by sink class handler - therefore, it's got to be marked "Serializable".
				evStatus(this, eaStatusArg); 
			}
			else
			{
				Console.WriteLine("Authentication completed.{0}No delegate attached to evStatus event. Event not fired.", Environment.NewLine);
				Console.WriteLine();
			}

			return bAuth;
		}

		public string SetupUser(string sname, string spasswd, out string sTime)
		{
			Console.WriteLine("CRemoteObj.SetupUser invoked. Sleep 10 sec.");

			string msg;

			DateTime dt = new DateTime();
			dt = System.DateTime.Now;
			
			sTime = dt.ToString();	//Out

			msg = sname+spasswd+sTime;

			Thread.Sleep(10000);	//Sleep 10 seconds.

			Console.WriteLine("CRemoteObj.SetupUser return");

			return msg;
		}

		public CProfile UpdateProfile(CProfile p)
		{
			Console.WriteLine("CRemoteObj.UpdateProfile invoked.");
			Console.WriteLine("user = {0}, passwd = {1}", p.user, p.passwd);
			
			CProfile pout = p;
			pout.passwd= (new Random(DateTime.Now.Minute).Next(1000000)).ToString();
			Console.WriteLine("password override: {0}", pout.passwd);

			return pout;
		}

		public string GetAssembly()
		{
			string assem_info;
			assem_info = "assembly info (CRemoteObj):" + System.AppDomain.CurrentDomain.GetAssemblies().GetValue(0).ToString();
			return assem_info;
		}

	}
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

Share

About the Authors

raymond.fung
Web Developer
Hong Kong Hong Kong
No Biography provided

Norman Fung

Hong Kong Hong Kong
Me too, I'm a developer.

| Advertise | Privacy | Terms of Use | Mobile
Web02 | 2.8.1411019.1 | Last Updated 7 Oct 2003
Article Copyright 2003 by raymond.fung, Norman Fung
Everything else Copyright © CodeProject, 1999-2014
Layout: fixed | fluid