Сайт о программирование, математике и моделировании
Взаимодействие агентов – листинг программы
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
namespace MAC
{
public partial class Form1 : Form
{
static string ConnectionString = @»Provider=»"Microsoft.Jet.OLEDB.4.0″»;Data Source=»"D:\MAC.mdb»";User;Jet OLEDB:Encrypt Database=False»;
public Form1()
{
InitializeComponent();
}
int id; public TextBox txt ;
class MyEventArgs : EventArgs
{
public int protocol_id;
public int eventnum;
public string sender;
public string receiver;
public string reply_to;
public string performative;
}
// Объявляем делегат для события.
delegate void MyEventHandler(object source,
MyEventArgs arg);
// Объявляем класс события, отправки сообщений агенту-координатору
class MyEvent
{
string[] posl_sender = new string[4];
string[] posl_reply_to = new string[4];
static int count = 0;
public event MyEventHandler SomeEvent;
// Этот метод генерирует SomeEvent-событие.
public void OnSomeEvent(int id)
{
MyEventArgs arg = new MyEventArgs();
if (SomeEvent != null)
{
arg.eventnum = count++;
}
arg.protocol_id = id; //номер сценария взаимодействия
switch (arg.protocol_id)
{
case 1: posl_sender[0] = «агент аутентификации»; posl_sender[1] = «агент обнаружения вторжений»; posl_sender[2] = «агент разграничения доступа»; posl_reply_to[0] = «агент обнаружения вторжений»;
posl_reply_to[1] = «агент разграничения доступа»;
posl_reply_to[2] = «»; break;
case 2: posl_sender[0] = «агент сетевой защиты»; posl_sender[1] = «агент обнаружения вторжений»;
posl_sender[2] = «агент разграничения доступа»;posl_sender[3] = «агент резервного копирования»;
posl_reply_to[0] = «агент обнаружения вторжений»;
posl_reply_to[1] = «агент разграничения доступа»;
posl_reply_to[2] = «»; posl_reply_to[3] = «»; break;
case 3: posl_sender[0] = «агент аутентификации»; posl_sender[1] = «агент обнаружения вторжений»; posl_sender[2] = «агент разграничения доступа»; posl_reply_to[0] = «агент обнаружения вторжений»;
posl_reply_to[1] = «агент разграничения доступа»;
posl_reply_to[2] = «»; break;
}
arg.receiver = «агент координатор»;
arg.performative = «ANSWER»;
switch (arg.eventnum)// в зависимости от того какой раз происходит событие определяется адресат сообщения и кому будет отослан ответ
{
case 0: arg.sender = posl_sender[arg.eventnum]; arg.reply_to = posl_reply_to[arg.eventnum]; break;
case 1: arg.sender = posl_sender[arg.eventnum]; arg.reply_to = posl_reply_to[arg.eventnum]; break;
case 2: arg.sender = posl_sender[arg.eventnum]; arg.reply_to = posl_reply_to[arg.eventnum]; break;
case 3: arg.sender = posl_sender[arg.eventnum]; arg.reply_to = posl_reply_to[arg.eventnum]; break;
}
// база знаний агентов
// первый протокол взаимодействия
if (arg.performative == «QIP» && arg.protocol_id == 1 && arg.receiver == «агент аутентификации»)
{//выполнение определенных действий агентом-аутентификации
}
if (arg.performative == «RWIP» && arg.protocol_id == 1 && arg.receiver == «агент обнаружения вторжений»)
{//выполнение определенных действий агентом-обнаружения вторжений
}
if (arg.performative == «RWIP» && arg.protocol_id == 1 && arg.receiver == «агент разграничения доступа»)
{//выполнение определенных действий агентом-разграничения доступа
}
// второй протокол взаимодействия
if (arg.performative == «QIP» && arg.protocol_id == 2 && arg.receiver == «агент сетевой защиты»)
{//выполнение определенных действий агентом-аутентификации
}
if (arg.performative == «RWIP» && arg.protocol_id == 2 && arg.receiver == «агент обнаружения вторжений»)
{//выполнение определенных действий агентом-обнаружения вторжений
}
if (arg.performative == «RWIP» && arg.protocol_id == 2 && arg.receiver == «агент разграничения доступа»)
{//выполнение определенных действий агентом-разграничения доступа
}
if (arg.performative == «RWIP» && arg.protocol_id == 2 && arg.receiver == «агент резервного копирования»)
{//выполнение определенных действий агентом резервного копирования
}
// третий протокол взаимодействия
if (arg.performative == «QIP» && arg.protocol_id == 3 && arg.receiver == «агент аутентификации»)
{//выполнение определенных действий агентом-аутентификации
}
if (arg.performative == «RWIP» && arg.protocol_id == 3 && arg.receiver == «агент обнаружения вторжений»)
{//выполнение определенных действий агентом-обнаружения вторжений
}
if (arg.performative == «RWIP» && arg.protocol_id == 3 && arg.receiver == «агент разграничения доступа»)
{//выполнение определенных действий агентом-разграничения доступа
}
SomeEvent(this, arg); } }
class MyEvent2 //отправка сообщений от агента-координатора
{
string[] posled_deistvui = new string[4];
static int count2 = 0;
public event MyEventHandler SomeEvent2;
// Этот метод генерирует SomeEvent-событие.
public void OnSomeEvent2(int id)
{
MyEventArgs arg2 = new MyEventArgs();
if (SomeEvent2 != null)
{
arg2.eventnum = count2++;
}
//проверка номера сценария взаимодействия
arg2.protocol_id = id;
switch (arg2.protocol_id)
{
case 1: posled_deistvui[0] = «агент аутентификации»; posled_deistvui[1] = «агент обнаружения вторжений»; posled_deistvui[2] = «агент разграничения доступа»; break;
case 2: posled_deistvui[0] = «агент сетевой защиты»; posled_deistvui[1] = «агент обнаружения вторжений»; posled_deistvui[2] = «агент разграничения доступа»; posled_deistvui[3] = «агент резервного копирования»; break;
case 3: posled_deistvui[0] = «агент аутентификации»; posled_deistvui[1] = «агент обнаружения вторжений»; posled_deistvui[2] = «агент разграничения доступа»; break;
}
arg2.sender = «агент координатор»;
switch (arg2.eventnum)
{
case 0: arg2.receiver = posled_deistvui[arg2.eventnum]; arg2.reply_to = arg2.sender; break;
case 1: arg2.receiver = posled_deistvui[arg2.eventnum]; arg2.reply_to = arg2.sender; break;
case 2: arg2.receiver = posled_deistvui[arg2.eventnum]; arg2.reply_to = arg2.sender; break;
case 3: arg2.receiver = posled_deistvui[arg2.eventnum]; arg2.reply_to = arg2.sender; break;
}
Agent agent_a = new Agent();
Agent agent_ov = new Agent();
Agent agent_rd = new Agent();
Agent agent_netsec = new Agent();
Agent agent_backup = new Agent();
MyEvent evt = new MyEvent();
// база знаний агента-координатора
// продукционные правила для первого протокола взаимодействия
if (arg2.protocol_id == 1 && arg2.receiver == «агент аутентификации») {arg2.performative = «QIP»; evt.SomeEvent += new MyEventHandler(agent_a.handler);}
if (arg2.protocol_id == 1 && arg2.receiver == «агент обнаружения вторжений») { arg2.performative = «RWIP»; evt.SomeEvent += new MyEventHandler(agent_ov.handler); }
if (arg2.protocol_id == 1 && arg2.receiver == «агент разграничения доступа») { arg2.performative = «RWIP»; evt.SomeEvent += new MyEventHandler(agent_rd.handler); }
// продукционные правила для второго протокола взаимодействия
if (arg2.protocol_id == 2 && arg2.receiver == «агент сетевой защиты») { arg2.performative = «QIP»; evt.SomeEvent += new MyEventHandler(agent_netsec.handler); }
if (arg2.protocol_id == 2 && arg2.receiver == «агент обнаружения вторжений») { arg2.performative = «RWIP»; evt.SomeEvent += new MyEventHandler(agent_ov.handler); }
if (arg2.protocol_id == 2 && arg2.receiver == «агент разграничения доступа») { arg2.performative = «RWIP»; evt.SomeEvent += new MyEventHandler(agent_rd.handler); }
if (arg2.protocol_id == 2 && arg2.receiver == «агент резервного копирования») { arg2.performative = «RWIP»; evt.SomeEvent += new MyEventHandler(agent_backup.handler); }
// продукционные правила для третьего протокола взаимодействия
if (arg2.protocol_id == 3 && arg2.receiver == «агент аутентификации») { arg2.performative = «QIP»; evt.SomeEvent += new MyEventHandler(agent_a.handler); }
if (arg2.protocol_id == 3 && arg2.receiver == «агент обнаружения вторжений») { arg2.performative = «RWIP»; evt.SomeEvent += new MyEventHandler(agent_ov.handler); }
if (arg2.protocol_id == 3 && arg2.receiver == «агент разграничения доступа») { arg2.performative = «RWIP»; evt.SomeEvent += new MyEventHandler(agent_rd.handler); }
SomeEvent2(this, arg2);
evt.OnSomeEvent(arg2.protocol_id);
}
}
class Agent
{
public void handler(object source, MyEventArgs arg)
{
OleDbConnection conn1 = new OleDbConnection(ConnectionString);
OleDbCommand myCommand1 = new OleDbCommand();
string commandText = «INSERT INTO Test1([sender],[receiver],[replyto],[performative]) VALUES(@sender12,@receiver12,@replyto,@performative)»;
myCommand1.CommandText = commandText;
myCommand1.Connection = conn1;
if (arg.eventnum == 2) arg.reply_to = «»;
OleDbDataAdapter dataAdapter = new OleDbDataAdapter();
dataAdapter.InsertCommand = myCommand1;
myCommand1.Parameters.Add(«@sender12″, OleDbType.VarChar, 50).Value = arg.sender ;
myCommand1.Parameters.Add(«@receiver», OleDbType.VarChar, 50).Value = arg.receiver;
myCommand1.Parameters.Add(«@replyto», OleDbType.VarChar, 50).Value = arg.reply_to ;
myCommand1.Parameters.Add(«@performative», OleDbType.VarChar, 50).Value = arg.performative;
conn1.Open();
myCommand1.ExecuteNonQuery();
conn1.Close();
}
}
class Agent_K
{
public void handler(object source, MyEventArgs arg2)
{
OleDbConnection conn4 = new OleDbConnection(ConnectionString);
OleDbCommand myCommand4 = new OleDbCommand();
string commandText4 = «INSERT INTO Test1([sender],[receiver],[replyto],[performative]) VALUES(@sender12,@receiver12,@replyto,@performative)»;
myCommand4.CommandText = commandText4;
myCommand4.Connection = conn4;
OleDbDataAdapter dataAdapter = new OleDbDataAdapter();
dataAdapter.InsertCommand = myCommand4;
myCommand4.Parameters.Add(«@sender12″, OleDbType.VarChar, 50).Value = arg2.sender;
myCommand4.Parameters.Add(«@receiver», OleDbType.VarChar, 50).Value = arg2.receiver;
myCommand4.Parameters.Add(«@replyto», OleDbType.VarChar, 50).Value = arg2.reply_to;
myCommand4.Parameters.Add(«@performative», OleDbType.VarChar, 50).Value = arg2.performative;
conn4.Open();
myCommand4.ExecuteNonQuery();
conn4.Close();
}
}
private void button1_Click(object sender, EventArgs e)
{
Agent_K ob2 = new Agent_K ();
MyEvent evt = new MyEvent();
MyEvent2 evt2 = new MyEvent2();
evt2.SomeEvent2 += new MyEventHandler(ob2.handler);
// индентификатор протокола взаимодействия
if (radioButton1.Checked)
{
id = 1;
// Генерируем событие,
evt2.OnSomeEvent2(id);
evt2.OnSomeEvent2(id);
evt2.OnSomeEvent2(id);
}
if (radioButton2.Checked)
{
id = 2;
evt2.OnSomeEvent2(id);
evt2.OnSomeEvent2(id);
evt2.OnSomeEvent2(id);
evt2.OnSomeEvent2(id);
}
if (radioButton3.Checked)
{
id = 3;
evt2.OnSomeEvent2(id);
evt2.OnSomeEvent2(id);
evt2.OnSomeEvent2(id);
}
string commandText1 = @»SELECT [sender],[receiver],[replyto],[performative] FROM Test1″;
OleDbConnection conn = new OleDbConnection(ConnectionString);
conn.Open();
OleDbCommand myCommand = new OleDbCommand();
myCommand.Connection = conn;
myCommand.CommandText = commandText1;
OleDbDataAdapter dataAdapter1 = new OleDbDataAdapter();
dataAdapter1.SelectCommand = myCommand;
DataSet ds = new DataSet();
dataAdapter1.Fill(ds, «MAC»);
dataGridView1.DataSource = ds.Tables["MAC"].DefaultView;
conn.Close();
OleDbConnection conn3 = new OleDbConnection(ConnectionString);
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = conn3;
cmd.CommandText = «DELETE FROM Test1″;
conn3.Open();
cmd.ExecuteNonQuery();
conn3.Close(); }}}
Print article | This entry was posted by root on 19.01.2011 at 4:25 пп, and is filed under Листинги, Многоагентное моделирование. Follow any responses to this post through RSS 2.0. Вы можете перейти в конец записи и оставить комментарий. Пинги запрещены. |