Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Разработка многокомпонентной программы с удалённым объектом




Удалённый объект – форма

Компонент csComp (SqwComp), удал.объект csServer (Server), сервер (SqwServer), клиент (SqwMain)

Компонент

// C# File csSqw_Dll_Comp_7

using System;

using System.ComponentModel;

using System.Drawing;

 

namespace csComp

{

// Класс компонента

public class SqwComp: Component

{

private int numComp; // Номер компонента

private Point point; // Координаты шара

 

// Конструктор

public SqwComp (int NumComp, Point Pnt)

{

numComp= NumComp;

point= Pnt;

}

// Свойство Number

public int Number

{

get

{

return numComp;//nt;

}

}

// Свойство Point

public Point Point

{

get

{

return 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 System;

using System.Drawing;

using System.Windows.Forms;

using System.Collections;

using System.ComponentModel;

using System.Runtime.Remoting;

using csComp;

using System.Threading;

 

namespace csServer

{

// Класс формы - удалённого объекта, содержащей контейнер компонентов.

// В области клиента этой формы отображаются компоненты

public class Server: Form

{

private static int numCompnts= 0;

public SqwComp cs; // Ссылка на компонент

private Random rand; // Случайное число

public Container components = null;

 

// Конструктор

public Server()

{

components= new Container ();

Text= "Контейнер и компоненты";

rand= new Random ();

}

 

// Создать компонент и добавить его в контейнер

public virtual void CreateAdd ()

{

numCompnts++;

Point point= new Point ();

point.X= rand.Next (ClientSize.Width);

point.Y= rand.Next (ClientSize.Height);

SqwComp cmpnt= new SqwComp (numCompnts, point);

components.Add (cmpnt);

Invalidate ();

}

 

// Удалить компонент с указанным номером

public virtual void Remove (int Num)

{

IEnumerator inum= components.Components.GetEnumerator ();

while (inum.MoveNext()) // Перебрать коллекцию

{

SqwComp cm= (SqwComp) inum.Current;

if (cm.Number == Num)

{

components.Remove (cm); // Удалить из контейнера

Invalidate ();

break;

}

}

}

 

// Получить массив номеров компонентов

public virtual void GetRefList (ref ArrayList AL)

{

ArrayList aL= new ArrayList ();

IEnumerator inum= components.Components.GetEnumerator ();

while (inum.MoveNext()) // Перебрать коллекцию

{

SqwComp cm= (SqwComp) inum.Current;

aL.Add (cm.Number);

}

AL=aL;

}

 

// Перерисовать область клиента прикладного окна сервера

protected override void OnPaint (PaintEventArgs e)

{

base.OnPaint (e);

IEnumerator inum=components.Components.GetEnumerator();

while (inum.MoveNext()) // Перебрать коллекцию

{

SqwComp cm= (SqwComp) inum.Current;

e.Graphics.DrawRectangle(new Pen(Color.Blue, 5),

cm.Point.X-20, cm.Point.Y-20, 40, 40);

e.Graphics.DrawString (cm.Number.ToString (),

new Font("Arial", 9),

new SolidBrush (Color.Red), cm.Point.X, cm.Point.Y);

}

}

}

}

Сервер

/////////////////////////

// C# File csSqw_Server_7 Сервер

// Подсоединить (Project/AddReference) csSqw__Dll_7.dll

// Подсоединить (Project/AddReference) System.Runtime.Remoting.dll

using System;

using System.Drawing;

using System.Windows.Forms;

using System.Collections;

using System.ComponentModel;

using System.Runtime.Remoting;

using System.Runtime.Remoting.Channels;

using System.Runtime.Remoting.Channels.Http;

using csServer;

using System.Threading;

 

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 System;

using System.Collections;

using System.Drawing;

using System.Windows.Forms;

using System.Runtime.Remoting;

using System.Runtime.Remoting.Channels;

using System.Runtime.Remoting.Channels.Http;

using csComp;

using csServer;

 

namespace csSqw_Client_7

{

public class SqwMain: System.Windows.Forms.Form

{

private csServer.Server serv;

private Button butAdd;

private Button butDel;

private ListBox listBox;

int numComp= 0;

 

// Конструктор

public SqwMain ()

{

Text= "Управление контейнером";

butAdd= new Button ();

butAdd.Text="Добавить компонент";

butAdd.Location= new Point (10,10);

butAdd.Size= new System.Drawing.Size(130,20);

butAdd.Click+= new EventHandler (ClickButAdd);

this.Controls.Add (butAdd);

//-----

butDel=new Button ();

butDel.Text="Удалить компонент с номером:";

butDel.Location= new Point (10,30);

butDel.Size= new System.Drawing.Size (180, 20);

butDel.Click += new EventHandler (ClickButDel);

this.Controls.Add (butDel);

listBox= new ListBox ();

listBox.Location= new Point (200, 30);

listBox.Size= new System.Drawing.Size (60, 20);

this.Controls.Add (listBox);

/////////////////////////////////////////////

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)

{

numComp++;

serv.CreateAdd ();

ArrayList aL=null;

listBox.Items.Clear ();

serv.GetRefList (ref aL);

IEnumerator inum=aL.GetEnumerator();

while(inum.MoveNext())

{

int num= (int) inum.Current;

listBox.Items.Add (num);

}

}

 

// Обработчик кнопки

void ClickButDel (object o, EventArgs e)

{

if (listBox.SelectedIndex==-1)

{

MessageBox.Show ("Выберете номер удаляемого

компонента");

}

else

{

int numSel= (int) listBox.SelectedItem;

listBox.Items.Remove (numSel);

serv.Remove(numSel);

///////////////

ArrayList aL=null;

listBox.Items.Clear ();

serv.GetRefList(ref aL);

 

for(int i= 0; i < aL.Count; i++)

{

int num= (int) aL[i];

listBox.Items.Add (num);

}

}

}

 

// Главная функция клиента

static void Main ()

{

SqwMain sqwMain= new SqwMain ();

Application.Run(sqwMain);

}

}

}

 





Поделиться с друзьями:


Дата добавления: 2017-02-11; Мы поможем в написании ваших работ!; просмотров: 198 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Так просто быть добрым - нужно только представить себя на месте другого человека прежде, чем начать его судить. © Марлен Дитрих
==> читать все изречения...

2510 - | 2261 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.01 с.