namespace IvyTest
{
using System;
using System.Windows.Forms;
using IvyBus;
class IvyTest : System.Windows.Forms.Form
{
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.TextBox tbRegexp;
private System.Windows.Forms.TextBox tbMsg;
private System.Windows.Forms.Button btBind;
private System.Windows.Forms.Button btSend;
private System.Windows.Forms.TextBox ta;
///
/// Variable nécessaire au concepteur.
///
private System.ComponentModel.Container components = null;
internal Ivy bus;
private System.Windows.Forms.Button btBindSimple;
private System.Windows.Forms.Button btUnbind;
public IvyTest()
{
//
// Requis pour la prise en charge du Concepteur Windows Forms
//
InitializeComponent();
bus = new Ivy("C# TESTBUS", "Testbus ready",this);
bus.Debug = true;
bus.clientConnected += new Ivy.ClientConnectedHandler( connect );
bus.clientDisconnected += new Ivy.ClientDisconnectedHandler( disconnect );
bus.addBinding +=new IvyBus.Ivy.ClientAddBindingHandler(bus_addBinding);
bus.removeBinding +=new IvyBus.Ivy.ClientAddBindingHandler(bus_removeBinding);
bus.dieReceived += new Ivy.DieHandler( die );
bus.directMessageReceived += new Ivy.DirectMessageHandler( directMessage );
bus.start(null);
}
///
/// Nettoyage des ressources utilisées.
///
protected override void Dispose( bool disposing )
{
stop();
bus = null;
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
///
/// Méthode requise pour la prise en charge du concepteur - ne modifiez pas
/// le contenu de cette méthode avec l'éditeur de code.
///
private void InitializeComponent()
{
this.label1 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.tbRegexp = new System.Windows.Forms.TextBox();
this.tbMsg = new System.Windows.Forms.TextBox();
this.ta = new System.Windows.Forms.TextBox();
this.btBind = new System.Windows.Forms.Button();
this.btSend = new System.Windows.Forms.Button();
this.btUnbind = new System.Windows.Forms.Button();
this.btBindSimple = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// label1
//
this.label1.Location = new System.Drawing.Point(8, 8);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(24, 16);
this.label1.TabIndex = 0;
this.label1.Text = "exp:";
//
// label2
//
this.label2.Location = new System.Drawing.Point(8, 248);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(56, 16);
this.label2.TabIndex = 1;
this.label2.Text = "Msg:";
//
// tbRegexp
//
this.tbRegexp.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.tbRegexp.Location = new System.Drawing.Point(32, 0);
this.tbRegexp.Name = "tbRegexp";
this.tbRegexp.Size = new System.Drawing.Size(216, 20);
this.tbRegexp.TabIndex = 2;
this.tbRegexp.Text = "(.*)";
this.tbRegexp.TextChanged += new System.EventHandler(this.tbRegexp_TextChanged);
//
// tbMsg
//
this.tbMsg.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.tbMsg.Location = new System.Drawing.Point(72, 240);
this.tbMsg.Name = "tbMsg";
this.tbMsg.Size = new System.Drawing.Size(232, 20);
this.tbMsg.TabIndex = 3;
this.tbMsg.Text = "msg";
this.tbMsg.TextChanged += new System.EventHandler(this.tbMsg_TextChanged);
//
// ta
//
this.ta.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.ta.Location = new System.Drawing.Point(0, 32);
this.ta.Multiline = true;
this.ta.Name = "ta";
this.ta.Size = new System.Drawing.Size(384, 200);
this.ta.TabIndex = 4;
this.ta.Text = "";
//
// btBind
//
this.btBind.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.btBind.Location = new System.Drawing.Point(248, 0);
this.btBind.Name = "btBind";
this.btBind.Size = new System.Drawing.Size(40, 32);
this.btBind.TabIndex = 5;
this.btBind.Text = "bind regexp";
this.btBind.Click += new System.EventHandler(this.RegexpCB);
//
// btSend
//
this.btSend.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.btSend.Location = new System.Drawing.Point(312, 240);
this.btSend.Name = "btSend";
this.btSend.Size = new System.Drawing.Size(64, 24);
this.btSend.TabIndex = 6;
this.btSend.Text = "Send";
this.btSend.Click += new System.EventHandler(this.SendCB);
//
// btUnbind
//
this.btUnbind.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.btUnbind.Location = new System.Drawing.Point(336, 0);
this.btUnbind.Name = "btUnbind";
this.btUnbind.Size = new System.Drawing.Size(48, 24);
this.btUnbind.TabIndex = 7;
this.btUnbind.Text = "unbind";
this.btUnbind.Click += new System.EventHandler(this.btUnbind_Click);
//
// btBindSimple
//
this.btBindSimple.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.btBindSimple.Location = new System.Drawing.Point(288, 0);
this.btBindSimple.Name = "btBindSimple";
this.btBindSimple.Size = new System.Drawing.Size(40, 32);
this.btBindSimple.TabIndex = 8;
this.btBindSimple.Text = "bind simple";
this.btBindSimple.Click += new System.EventHandler(this.ExpressionCB);
//
// IvyTest
//
this.AcceptButton = this.btSend;
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(384, 266);
this.Controls.Add(this.btBindSimple);
this.Controls.Add(this.btUnbind);
this.Controls.Add(this.btSend);
this.Controls.Add(this.btBind);
this.Controls.Add(this.ta);
this.Controls.Add(this.tbMsg);
this.Controls.Add(this.tbRegexp);
this.Controls.Add(this.label2);
this.Controls.Add(this.label1);
this.Name = "IvyTest";
this.Text = "IvyTest";
this.ResumeLayout(false);
}
#endregion
public void stop()
{
bus.clientConnected -= new Ivy.ClientConnectedHandler( connect );
bus.clientDisconnected -= new Ivy.ClientDisconnectedHandler( disconnect );
bus.dieReceived -= new Ivy.DieHandler( die );
bus.directMessageReceived -= new Ivy.DirectMessageHandler( directMessage );
bus.stop();
}
private void connect(IvyClient client)
{
append(client.ApplicationName + " connected ");
}
private void disconnect(IvyClient client)
{
append(client.ApplicationName + " disconnected ");
}
private bool die(IvyClient client, int id)
{
append("receive die from "+client.ApplicationName );
// return true terminate the application
return false;
}
private void directMessage(IvyClient client, int id, byte[] arg)
{
append(client.ApplicationName + " direct Message " + id + arg);
}
public void RegexpCB(System.Object event_sender, System.EventArgs e)
{
// ajoute la nouvelle regex
string regexp = tbRegexp.Text;
regexp.Trim();
int regexp_id = bus.bindMsg(regexp, new Ivy.MessageHandler(receive));
tbRegexp.Text = "";
append( "bind("+regexp_id+") ->"+regexp);
}
public void ExpressionCB(System.Object event_sender, System.EventArgs e)
{
// ajoute la nouvelle regex
string expression = tbRegexp.Text;
expression.Trim();
int regexp_id = bus.bindSimpleMsg(expression, new Ivy.MessageHandler(receive));
tbRegexp.Text = "";
append( "bind("+regexp_id+") ->"+expression);
}
private void receive(IvyClient client, IvyArgument args)
{
string receive_str = "client " + client.ApplicationName + " envoie: [";
for (int i = 0; i < args.Length; i++)
{
receive_str += args[i].Value+ ",";
}
receive_str = receive_str.TrimEnd(new char[] { ',' });
receive_str += "]";
append(receive_str);
}
private void append(System.String s)
{
// je mettrais bien la date, aussi.
ta.AppendText(s+"\r\n");
}
public void SendCB(System.Object event_sender, System.EventArgs e)
{
int count;
System.String tosend = tbMsg.Text;
tbMsg.Text = "";
count = bus.sendMsg(tosend);
append("Sending '" + tosend + "' count " + count);
}
[STAThread]
public static void Main(System.String[] args)
{
IvyTest tb = new IvyTest();
Application.Run(tb);
}
private void tbMsg_TextChanged(object sender, System.EventArgs e)
{
btSend.Enabled = (tbMsg.Text != "");
}
private void tbRegexp_TextChanged(object sender, System.EventArgs e)
{
bool enable = (tbRegexp.Text != "");
btBind.Enabled = enable;
btBindSimple.Enabled = enable;
btUnbind.Enabled = enable;
}
private void btUnbind_Click(object sender, System.EventArgs e)
{
// enleve la regex
string regexp = tbRegexp.Text;
bool removed = bus.unBindMsg( regexp );
if ( removed )
{
append( "unbind("+regexp+")");
tbRegexp.Text = "";
}
else
{
append( "unbind can't find binding ("+regexp+")");
}
}
private void bus_addBinding(IvyClient app, string arg)
{
append( app.ApplicationName + " add binding '"+arg+"'");
}
private void bus_removeBinding(IvyClient app, string arg)
{
append( app.ApplicationName + " remove binding '"+arg+"'");
}
}
}