⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 server.cs

📁 进程间通信精华资料,包括好多源码,和文章,都是个人收集的.主要是vc和c#方面的
💻 CS
字号:
using System;
using System.Runtime;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Http;
using System.Runtime.Remoting.Channels.Tcp;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters;
using System.Collections;
using System.Net;
using ChatMediator;
using System.Globalization;
[assembly:CLSCompliant(true)]

namespace RemoteServer
{
	[Serializable]
	internal class Mediator : MarshalByRefObject, IMediator
	{
		private ArrayList clientsList;
		private ArrayList privateChatClient;
		private string []errorMessages = {"User already exists"};
		
		public Mediator()
		{
			this.clientsList = new ArrayList();
			this.privateChatClient = new ArrayList();
		}

		#region IMediator Members
		
		public void ConnectToChat(IClientImplement ici)
		{
			if (ici != null)
			{
				try
				{
					// First check with the unique user
					foreach (IClientImplement icc in this.clientsList)
					{
						if (icc.UserName.CompareTo(ici.UserName) == 0)
						{
							throw new UserExceptions(errorMessages[0]);
						}
					}

					this.clientsList.Add(ici);
					Console.WriteLine("--------------------Joining of new user----------------------");
					Console.WriteLine(ici.UserName + " joined chat at: " + DateTime.Now.ToString());
					Console.WriteLine("----------------------------------------------------------");
				
					foreach (IClientImplement icimp in this.clientsList)
					{
						ici.ClientList = this.clientsList;
						icimp.SendWelcomeMessageTome(ici);
					}
				}
				catch (RemotingException ex)
				{
					Console.WriteLine(ex.Message);
					Console.WriteLine(ex.StackTrace);
					throw new UserExceptions(ex.Message, ex);
				}
			}
		}

		public void SendMessageToAll(IClientImplement ici)
		{
			try
			{
				foreach (IClientImplement icimp in this.clientsList)
				{
					icimp.SendMessageTome(ici);
				}
			}			
			catch (RemotingException ex)
			{
				Console.WriteLine(ex.Message);
				Console.WriteLine(ex.StackTrace);
				throw new UserExceptions(ex.Message, ex);
			}
		}

		public void RemoveMe(IClientImplement ici)
		{
			if (ici != null)
			{				
				try
				{
					ArrayList temp = new ArrayList();

					Console.WriteLine("\n-------------Removal of user--------------------------\n");
					foreach (IClientImplement icm in this.clientsList)
					{
						Console.WriteLine("User name: " + icm.UserName);
						if (icm.UserName.CompareTo(ici.UserName) != 0)
						{
							Console.WriteLine("Added user name: " + icm.UserName);
							temp.Add(icm);
						}
					}
			
					Console.WriteLine(ici.UserName + " left chat at: " + DateTime.Now.ToString());

					foreach (IClientImplement icimp in temp)
					{
						Console.WriteLine("Sending message to: " + icimp.UserName);						
						ici.ClientList = temp;
						icimp.UserLeft(ici);
					}

					this.clientsList.Clear();
					foreach (IClientImplement icm in temp)
					{
						Console.WriteLine("Updating class array list. Adding: " + icm.UserName);
						this.clientsList.Add(icm);
					}
					Console.WriteLine("\n--------------------------------------------\n");
				}
				catch (RemotingException ex)
				{
					Console.WriteLine("\n\nError occured. Message:" + ex.Message);
					Console.WriteLine("Stack trace: " + ex.StackTrace);
					throw new UserExceptions(ex.Message, ex);
				}
			}
		}

		public void SendPrivateMessage(IClientImplement clientObject)
		{
			try
			{
				string []strUsers = clientObject.UserName.Split('|');
				string sender = strUsers[0];
				string receiver = strUsers[1];
				Console.WriteLine("-------------------Private chat section--------------");
				Console.WriteLine("Sending private message from " +  sender + " to " + receiver);
				Console.WriteLine("Message: " + clientObject.Message);

				foreach (IClientImplement ici in this.privateChatClient)
				{
					Console.WriteLine("UserName: " + ici.UserName + " Receiver: " + ici.ReceiverName);
					clientObject.UserName = sender;
					ici.SendMessageTome(clientObject);
				}

				foreach (IClientImplement icc in this.clientsList)
				{
					if (icc.UserName.CompareTo(receiver) == 0)
					{
						clientObject.UserName = sender;
						Console.WriteLine("Sending private message to: " + icc.UserName);
						icc.SendMessageTome(clientObject);
					}
				}
				Console.WriteLine("-----------------------------------------------");
			}
			catch (Exception ex)
			{
				Console.WriteLine("An error occured. Error: " + ex.Message);
			}
		}

		public void ConnectToPrivateChat(IClientImplement clientObject)
		{
			string []strUsers = clientObject.UserName.Split('|');
			string sender = strUsers[0];
			string receiver = strUsers[1];

			foreach (IClientImplement ici in this.privateChatClient)
			{
				if (ici.UserName.CompareTo(clientObject.UserName) == 0)
				{
					throw new ApplicationException("User already started private chat with the given user");
				}
			}
			
			this.privateChatClient.Add(clientObject);
			Console.WriteLine("\n----------------Private chat connect--------------\n");
			Console.WriteLine("Private chat started between " + sender + " and " + receiver + " at:" + DateTime.Now.ToString());			
		}

		#endregion

		public override object InitializeLifetimeService()
		{
			return null;
		}
	}

	/// <summary>
	/// Summary description for Class1.
	/// </summary>
	class Server
	{
		private HttpChannel htc;
		private TcpChannel tcc;
		private int httpPortNumber = 8888;
		private int tcpPortNumber = 5678;

		public Server()
		{
			// Register Http channel
			SoapClientFormatterSinkProvider scl = null;
			SoapServerFormatterSinkProvider ssr = new SoapServerFormatterSinkProvider();
			ssr.TypeFilterLevel = TypeFilterLevel.Full;			
			IDictionary id = new Hashtable();
			id["port"] = httpPortNumber;
			id["typeFilterLevel"] = TypeFilterLevel.Full;			
			id["name"] = System.Guid.NewGuid().ToString();
			htc = new HttpChannel(id, scl, ssr);			
			ChannelServices.RegisterChannel(htc);
			id.Clear();
			id = null;
	
			// Register Tcp channel
			BinaryClientFormatterSinkProvider bcfs = null;
			BinaryServerFormatterSinkProvider bsfs = new BinaryServerFormatterSinkProvider();
			bsfs.TypeFilterLevel = TypeFilterLevel.Full;
			id = new Hashtable();
			id["port"] = tcpPortNumber;
			id["typeFilterLevel"] = TypeFilterLevel.Full;			
			id["name"] = System.Guid.NewGuid().ToString();
			tcc = new TcpChannel(id, bcfs, bsfs);			
			ChannelServices.RegisterChannel(tcc);
			id.Clear();
			id = null;
		}		

		public static void StartServer()
		{
			try
			{				
				RemotingConfiguration.RegisterWellKnownServiceType(typeof(Mediator), "ChatServer.soap",  
					WellKnownObjectMode.Singleton);
			}
			catch (RemotingException ex)
			{
				Console.WriteLine(ex.Message);
				throw new UserExceptions(ex.Message, ex);
			}
		}
		
		/// <summary>
		/// The main entry point for the application.
		/// </summary>
		[STAThread]
		static void Main(string[] args)
		{		
			//
			// TODO: Add code to start application here
			//
			if (args != null && args.Length > 0)
			{
				Console.WriteLine(args[0]);
			}
			try
			{
				Console.WriteLine("/********************************************************/");
				Console.WriteLine("**\tWelcome to chat application developed by-:");
				Console.WriteLine("**\tJayant D. Kulkarni, Mahindra-British Telecom.");
				Console.WriteLine("**\tThis is server.");
				Server srs = new Server(); 
				Server.StartServer();
				Console.WriteLine("**\tServer started successfuly.");
				Console.WriteLine("**\tListening at.");
				Console.WriteLine("**\tHttpChannel: 8888 and TcpChannel: 5678.");
				Console.WriteLine("/********************************************************/\n\n");
			}
			catch (Exception ex)
			{
				Console.WriteLine("Error occured. Message: " + ex.Message);
			}
			
			Console.ReadLine();
		}
	}

	internal class UserExceptions : ApplicationException
	{
		internal UserExceptions(string message) : base(message)
		{
		}

		internal UserExceptions(string message, RemotingException ex) : base(message, ex)
		{
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -