- •Разработка многокомпонентной программы с удалённым объектом Удалённый объект – объект с событиями
- •2 Разработка многокомпонентной программы с удалённым объектом Удалённый объект – форма
- •Приложение
- •1 Разработка многокомпонентной программы с удалённым объектом
- •2 Разработка многокомпонентной программы с удалённым объектом
2 Разработка многокомпонентной программы с удалённым объектом Удалённый объект – форма
Компонент csComp (SqwComp), удал.объект csServer (Server), сервер(SqwServer), клиент (SqwMain)
Компонент
// C# File csSqw_Dll_Comp_7
using . . .
namespace csComp
{
// Класс компонента
public class SqwComp: Component
{
. . .
// Конструктор
public SqwComp (int NumComp, Point Pnt)
{ . . . }
// Свойство Number
public int Number
{ . . .}
// Свойство Point
public Point Point
{. . .}
}
}
Удалённый объект- форма
/////////////////////////
// C# File csSqw_Dll_7 Удалённый объект
// Подсоединить (Project/AddReference) csSqw_RemObject_Dll_4.dll
// Подсоединить (Project/AddReference) System.Runtime.Remoting.dll
// Подсоединить (Project/AddReference) csSqw_Dll_4.dll
using . . .
using csComp;
namespace csServer
{
// Класс формы - удалённого объекта, содержащей контейнер компонентов.
// В области клиента этой формы отображаются компоненты
public class Server: Form
{
. . .
public SqwComp cs; // Ссылка на компонент
public Container components = null;
// Конструктор
public Server( )
{
components= new Container ( );
. . .
}
// Создать компонент и добавить его в контейнер
public virtual void CreateAdd ( )
{
. . .
SqwComp cmpnt= new SqwComp (numCompnts, point);
components.Add (cmpnt);
Invalidate ( );
}
. . .
// Перерисовать область клиента прикладного окна сервера
protected override void OnPaint (PaintEventArgs e)
{ . . .}
}
}
Сервер
/////////////////////////
// C# File csSqw_Server_7 Сервер
// Подсоединить (Project/AddReference) csSqw__Dll_7.dll
// Подсоединить (Project/AddReference) System.Runtime.Remoting.dll
using . . .
using csServer;
public class SqwServer
{
static void Main ( )
{
Server serv= new Server();
HttpChannel httpChannel;
try
{
httpChannel= new HttpChannel (8080);
ChannelServices.RegisterChannel (httpChannel);
}
catch(Exception e)
{
Console.WriteLine(e.Message);
return;
}
RemotingServices.Marshal (serv, "RemoteServer");
Application.Run(serv);
}
}
Клиент
/////////////////////////
// C# File csSqw_Client_7 Клиент
// Подсоединить (Project/AddReference) csSqw_Dll_7.dll
// Подсоединить (Project/AddReference) csSqw_Dll_Comp_7.dll
// Подсоединить (Project/AddReference) System.Runtime.Remoting.dll
using . . .
using csComp;
using csServer;
public class SqwMain : System.Windows.Forms.Form
{
private csServer.Server serv;
private Button butAdd;
. . .
// Конструктор
public SqwMain ( )
{
butAdd= new Button ( );
butAdd.Click+= new EventHandler (ClickButAdd);
. . .
/////////////////////////////////////////////
HttpChannel httpChannel= new HttpChannel (0);
ChannelServices.RegisterChannel (httpChannel);
serv= (csServer.Server) Activator.GetObject(
typeof (csServer.Server),
"http://localhost:8080/RemoteServer");
}
// Обработчик кнопки
void ClickButAdd (object o, EventArgs e)
{
. . .
serv.CreateAdd ( );
. . .
}
. . .
// Главная функция клиента
static void Main ( )
{
SqwMain sqwMain= new SqwMain ( );
Application.Run(sqwMain);
}
}
}
