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();                       }}}