Skip to content

Code examples

joreg edited this page May 27, 2018 · 15 revisions

Typical server usage

using RCP;

var Rabbit = new RCPServer();
Rabbit.AddTransporter(new WebSocketTransporter(9000));


// create a number parameter
var param = Rabbit.CreateNumberParameter<float>("My FLoat");
//param now is of type NumberParameter<float> in group "Root"
param.Value = 0.5f;
param.Minimum = -1.0f;
param.Maximum = 1.0f;

// listen for value updates on the parameter
param.ValueUpdated = (p) => Log(p.Value);



var mySubGroup = Rabbit.CreateGroup("Group 1");
// move param from root-group to mySubGroup-group
Rabbit.addParameter(param, mySubGroup);

// create a parameter and add it to a group in one go
var param1 = Rabbit.CreateNumberParameter<float>("My Float 2", mySubGroup);

// move param1 to root group
Rabbit.addParameter(param1);

// send all changes to all clients
Rabbit.Update();


//update a parameter value
param.Value = 0.2f;
//update minimum
param.Minimum = 0f;
//update label
param.Label = "My better Float";

// deal with multilanguage label
param.setLanguageLabel("deu", "Ein Szper Float");
param.setLanguageLabel("deu", "Ein Super Float");
param.setLanguageLabel("fra", "Une float superbe");
param.removeLanguageLabel("fra");

// deal with multilanguage Description
param.setLanguageDescription("deu", "Wert zum Verändern der Geschwindigkeit");
param.removeLanguageDescription("deu");

// sends all changes to all clients
Rabbit.Update();

//create a range parameter
var range = Rabbit.CreateRangeParameter<int>("My Range");
range.Minimum = -10;
range.Maximum = 10;
range.Value = new Range(4, 8);

//create a vector parameter
var v2 = Rabbit.CreateNumberParameter<Vector2f>("My float V2");
v2.Minimum = new Vector2f(-4,-5);

//create an array of float
var floatArray = Rabbit.CreateNumberArrayParameter<float[]>("Float Array", 3);
floatArray.Minimum = 3f;
floatArray.Value = new float[3]{5f, 8f, 9f};
floatArray.Structure = new int[1]{5};
floatArray.Value = new float[5]{5f, 8f, 9f, 7f, 4f};

var float2dArray = Rabbit.CreateNumberArrayParameter<float[][]>("Float 2d Array", 2, 2);
float2dArray.Minimum = 3f;
float2dArray.Value = new float[2][2]{{5f, 8f}, {9f, 5f}};


// remove parameter from group
Rabbit.RemoveParameter(param1);
// send all changes to all clients
Rabbit.Update();


// remove group from rabbit (root-group)
// this also removes all children from client
Rabbit.RemoveParameter(mySubGroup);
Rabbit.Update();


// cleanup
Rabbit.Dispose();

Typical client usage

using RCP;

var Carrot = new RCPClient(new WebSocketTransporter());

//add ui element 
Carrot.ParameterAdded = (p) =>
{
   //depending on incoming parameter create respective ui element
   //UI-object may hold the parameter internally. parameter-(Value)Update events would be handled inside UI
   var uip = new UI(p); // or similar
   UIParams.Add(p.Id, uip); // map for demonstration purpose only, not needed if updates are handled inside UI

   //listen for any parameter changes (may be done inside UI)
   p.Updated = (p) => 
   {
      var uip = UIParams[p.Id];
      uip.Label = p.Label;
      //...
   };

   //listen for any value changes (may be done inside UI)
   p.ValueUpdated = (p) =>
   {
      var uip = UIParams[p.Id];
      switch(p.Datatype)
      { 
          case Datatype.Float32: uip.Value = (float)p.Value; break;
          //...
      }
   };
};


Carrot.ParameterRemoved = (p) => 
{
   //remove UI matching p
   var uip = UIParams.Remove(p.Id);
   uip.Dispose();
};

Carrot.StatusChanged = (status, message) =>
{
  // e.g.:
  switch(status) {
     case NO_TRANSPORTER: /*show something*/ break;
     case NOT_CONNECTED: /*show something*/ break;
     case CONNECTED: Carrot.Initialize(); break;
     case VERSION_MISSMATCH: MessageBox.Show(message); break;
     case OK: /*nop*/ break;
  }
};

// connect to RabbitServer
try {
   Carrot.Connect("192.168.0.1", 9000);
} catch (Exception e) {
   // handle exceptions
}


// e.g. update a parameter (usually done via UI-Object)
UIParams[0].Parameter().Value = 1234;
Carrot.Update();



// cleanup
Carrot.Dispose();
Clone this wiki locally