자세한 설명등은 없습니다.
----------------- Actor Mode.cs----------------------
using System;
namespace VINS.ActMode
{
/// <summary>
/// IRC 서버 기본 모듈
/// </summary>
public class ActModeClass : MarshalByRefObject
{
string m_strString;
public ActModeClass()
{
Console.WriteLine("생성자가 호출 되었습니다");
}
public void AddString(string strStr)
{
m_strString += strStr;
Console.WriteLine(m_strString);
}
}
}
-------------- Actor Host.cs --------------------------
using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Http;
namespace CJIJ.ActHosting
{
/// <summary>
/// Class1에 대한 요약 설명입니다.
/// </summary>
class ActHostingClass
{
/// <summary>
/// 해당 응용 프로그램의 주 진입점입니다.
/// </summary>
[STAThread]
static void Main(string[] args)
{
//Http 1220을 이용하여 채널 등록
ChannelServices.RegisterChannel(new HttpChannel(1220));
/*
//######## 서버 활성화 모드 2가지 예제 #########
//1. Singleton 모드(원격 객체가 하나만 생성되고 모든 클라이언트에선 그 원격객체를 이용하기 때문에 정보를 공유할 수 있다)
RemotingConfiguration.RegisterWellKnownServiceType(typeof(ActMode.ActModeClass), "ActModeUri", WellKnownObjectMode.Singleton);
//2. SingleCall 모드(클라이언트가 메셔드를 호출 할때 마다 원격 객체가 생성되고 메서드 호출과 호출 사이엔 객체의 상태가 유지 되지 않는다.)
RemotingConfiguration.RegisterWellKnownServiceType(typeof(ActMode.ActModeClass), "ActModeUri", WellKnownObjectMode.SingleCall);
*/
//######## 클라이언트 활성화 모드 #########
RemotingConfiguration.RegisterActivatedServiceType(typeof(ActMode.ActModeClass));
RemotingConfiguration.ApplicationName = "ActModeApp";
//이용자의 알림 메세지
Console.WriteLine("호스팅 어플리케이션이 시작되었습니다");
Console.WriteLine("엔터키를 누르면 종료합니다.");
//대기모드로 들어간다.
Console.ReadLine();
}
}
}
-------------- Actor Client -----------------------
using System;
using CJIJ.ActMode;
using System.Runtime.Remoting; //ActHosting이 클라이언트 모드인 경우 선언해야 함
namespace ActClient
{
/// <summary>
/// ActClient Mode
/// </summary>
class ActClientClass
{
[STAThread]
static void Main(string[] args)
{
/*
//Acthosting 의 객체 활성화 모드가 서버 방식일때 사용
//원격 객체의 프록시 생성
ActModeClass obj = (ActModeClass)Activator.GetObject(typeof(CJIJ.ActMode.ActModeClass), "http://localhost:1220/ActModeUri");
*/
//Acthosting 의 객체 활성화 모드가 클라이언트 방식일때
RemotingConfiguration.RegisterActivatedClientType(typeof(CJIJ.ActMode.ActModeClass), "http://localhost:1220/ActModeApp");
CJIJ.ActMode.ActModeClass obj = new CJIJ.ActMode.ActModeClass();
//알림 메세지 표시
Console.WriteLine("끝내려면 /quit를 입력하세요");
while(true)
{
//유저로 부터 문자열을 받는다.
string strText = Console.ReadLine();
// "/quit" 문자열을 입력하면 프로그램을 종료시킨다.
if(strText == "/quit")
break;
//원격 객체의 메서드를 호출한다.
obj.AddString(strText);
}
}
}
}