/
How-to use csharp driver
How-to use csharp driver
Requirement Open CMD as Administrator Type: netsh http add urlacl url=http://*:4444/ user="tout le monde"
using fr_emac_gind_model; using gind_csharp_driver_examples_test; using gind_csharp_driver_rest; using gind_csharp_driver_rest_app; using gind_csharp_driver_rest_listeners; using gind_csharp_driver_rest_listeners_models; using gind_csharp_model; using gind_csharp_utils; using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Http; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Xml; namespace gind_csharp_driver_examples_test_examples { public class IMT_CGI_Crisis_Example : IUCExample { public IMT_CGI_Crisis_Example(string dns_address) : base(dns_address) { } public IMT_CGI_Crisis_Example(Program.IOptions options) : base(options) { } public IMT_CGI_Crisis_Example(string configFile, int ignore) : base(configFile, ignore) { } public IMT_CGI_Crisis_Example(string host, int rioda_port, int riose_port, int rioxo_port, int riota_port) : base(host, rioda_port, riose_port, rioxo_port, riota_port) { } public override string getCollaborationName() { return "R-IO Suite WorkSpace"; } public override string getKnowledgeSpaceName() { return "IMT CGI Crisis"; } public override async Task<bool> run() { // test RestDriver driver = createRestDriver(SystemUser.DEFAULT_ADMIN); Console.WriteLine("Rest driver version: " + driver.getVersion()); Console.WriteLine("Rest driver creation date: " + driver.getCreationDate()); Console.WriteLine("Rest driver unity compatiblity version: " + driver.getUnityVersion()); Thread.Sleep(2000); // We suppose that: // - R-IO is started // - The default administrator is already connected // - The usecase is loaded Console.WriteLine("\n\nLoad usecase:"); completeUsecaseDefinition usecaseDefinition = await driver.metaModelDriver.findPredefinedUsecaseDefinitionByName(getKnowledgeSpaceName()); UsecaseContext usecaseContext = await driver.metaModelDriver.loadUsecase(usecaseDefinition, getCollaborationName()); Console.WriteLine("\tusecase loaded"); driver.metaModelDriver.setProjectMode(ProjectMode.Real); Console.WriteLine("\treal mode set on project"); // Model api: push, pushpull, reload // Example with push Console.WriteLine("\n\nModel API:"); Console.WriteLine("\tpush model"); driver.modelDriver.push(new genericModel() { node = new node[1] { new node() { id = "node-" + Util.generateUUID(), status = new statusType[1] { statusType.ACTIVE }, type = new XmlQualifiedName("Potentiality", "http://fr.emac.gind/collaborative-model"), property = new property[1] { new property() { name = "name", value = "Risk_1" } } } } }); Console.WriteLine("\tmodel pushed"); Console.WriteLine("\ttest query"); node[] danger = await driver.modelDriver.getNodesByTypesAndOrProperties(new XmlQualifiedName[1] { new XmlQualifiedName("Potential", "http://fr.emac.gind/collaborative-model") }); genericModel all_model = await driver.modelDriver.query("match (n:instance:`{http://fr.emac.gind/collaborative-model}Potential`) return n"); Console.WriteLine("\t=> nodes: " + (all_model.node != null ? all_model.node.Length : 0) + " - " + " edges: " + (all_model.edge != null ? all_model.edge.Length : 0)); Console.WriteLine("\t=> query realized"); Console.WriteLine("\tmodel api done"); // 5 bis: subscribe to model modification MyWSockAddNodeEventFunction addNodeEventFunction = new MyWSockAddNodeEventFunction(driver, this); usecaseContext.addWSockFunction(addNodeEventFunction); MyWSockRemoveNodeEventFunction removeNodeEventFunction = new MyWSockRemoveNodeEventFunction(driver, this); usecaseContext.addWSockFunction(removeNodeEventFunction); usecaseContext.startWSockUsecaseChannel(); // Event API Console.WriteLine("\n\nEvent API:"); RealSensor[] sensors = await driver.eventDriver.findSensorsByProtocol(Protocol.JSON_Connector); bool resStart = await driver.eventDriver.startSensors(sensors); RealSensor firstSmokeSensor = sensors[0]; Console.WriteLine("\tSend smoke event to: " + firstSmokeSensor.getName()); bool resEvent = await driver.eventDriver.sendEventOnJSONConnector(firstSmokeSensor, position: new position1() { Item = new point() { latitude = 0.44f, longitude = 0.63f } }, smokeEvent: new dataSmoke() { value = true }); bool resStop = await driver.eventDriver.stopSensors(sensors); Console.WriteLine("\tevent api done"); // UserTask API (part 1/2) Console.WriteLine("\n\nUserTask API:"); List<AppUser> app_users = await driver.appUserTaskDriver.refreshUsers(); AppUser adminUser = driver.appUserTaskDriver.findUserById(SystemUser.DEFAULT_ADMIN.getNodeId()); MyProcessResponseWSockFunction myProcessResponseWSockFunction = new MyProcessResponseWSockFunction(); MyProcessCancelWSockFunction myProcessCancelWSockFunction = new MyProcessCancelWSockFunction(); adminUser.affectTaskBehaviours(new List<AppWSockUserFunction>() { new MyUserTodoListener(), myProcessResponseWSockFunction, myProcessCancelWSockFunction }); bool login = await adminUser.login(); List<AppTask> adminUser_tasks = await adminUser.refreshTodoList(); Console.WriteLine("\tnumber of tasks: " + adminUser_tasks.Count); // Process API Console.WriteLine("\n\nProcess API:"); node[] objectives = await driver.modelDriver.getNodesByTypesAndOrProperties(new XmlQualifiedName[1] { new XmlQualifiedName("Objective", "http://fr.emac.gind/collaborative-model") }); Console.WriteLine("\tobjectives: " + objectives.Length); if (objectives != null && objectives.Length > 0) { Console.WriteLine("\tStart process deduction... "); deductionReport[] reports = await driver.processDriver.deduce(new SatisfactionStrategy(objectives)); Console.WriteLine("\tprocess deduction achieved"); deductionResult process_result = (deductionResult)reports[0].Item; Console.WriteLine("\tDeploy process... "); genericModel process_model = process_result.genericModel; node[] processNodes = GenericModelUtil.getNodesByType(new XmlQualifiedName("Process", "http://fr.emac.gind/collaborative-model"), process_model); node processNode = processNodes[0]; DeployResult deployResult = await driver.processDriver.deploy(processNode); RunProcessRequest request = new RunProcessRequest() { sampledProcess = new sampledProcess() { id = processNode.id, name = PropertyUtil.findPropertyByName("name", processNode.property).value }, endpointAddress = deployResult.endpointAddress, requestHeaderContext = new RequestHeaderContext() { onlyCurrentUser = true } }; Console.WriteLine("\tprocess surpervised"); string processInstanceId = await driver.processDriver.runASync(request, null); addNodeEventFunction.setProcessInstanceId(processInstanceId); removeNodeEventFunction.setProcessInstanceId(processInstanceId); Console.WriteLine("\tprocess started"); bool superviseResp = await driver.processDriver.supervise(processInstanceId); MyMonitoringExchangeWSockFunction myMonitoringWSockFunction = new MyMonitoringExchangeWSockFunction(); bool subscribeResp = await driver.processDriver.subscribeExchangesByInstance(processInstanceId, myMonitoringWSockFunction); Console.WriteLine("\tsubscription achieved"); exchange[] existingExchanges = await driver.processDriver.exchangesByInstance(processInstanceId); Console.WriteLine("\texisting exchanges: " + existingExchanges.Length); while (this.processIsRunning(myMonitoringWSockFunction)) { adminUser_tasks = await adminUser.refreshTodoList(); Console.WriteLine("\tnumber of tasks: " + adminUser_tasks.Count); Console.WriteLine("\tprocessIsRunning: " + this.processIsRunning(myMonitoringWSockFunction)); foreach (AppTask task in adminUser_tasks) { if(task.status != StatusType1.DONE) { adminUser.updateTask(task, StatusType1.DONE); } } Thread.Sleep(500); } // wait detection achieved Thread.Sleep(1000); while (myProcessResponseWSockFunction.ProcessEnded == false && myProcessCancelWSockFunction.ProcessCancel == false) { Console.WriteLine("Wait detection achieved !!!"); Thread.Sleep(500); } Console.WriteLine("\tprocess ended or cancelled"); bool resDelete = await driver.processDriver.delete(processInstanceId); // bool resUndeploy = await driver.processDriver.undeploy(deployResult); } Console.WriteLine("\tprocess api done"); // UserTask API (part 2/2) // netsh http add urlacl url=http://*:4444/user_id_admin_1/ user=${userName} /** toDoResponse resp = await this.sendTestTODOAt(adminUser, new toDo() { task = new task() { name = "task_2", taskId = "task_2" } }); while (adminUser_tasks.Count == 0) { Console.WriteLine("\tnumber of tasks after send: " + adminUser_tasks.Count); Console.WriteLine("Sleep for 2 seconds."); Thread.Sleep(2000); } Console.WriteLine("\tnumber of tasks after send: " + adminUser_tasks.Count); bool logout = await adminUser.logout(); Console.WriteLine("\tuserTask api done"); */ Console.WriteLine("IMT CGI CRISIS FINISHED !!!"); return true; } private bool processIsRunning(MyMonitoringExchangeWSockFunction myMonitoringWSockFunction) { if (myMonitoringWSockFunction.getCurrentProcessProgressionEvent() != null && myMonitoringWSockFunction.getCurrentProcessProgressionEvent().monitoringInstanceProgression != null && (myMonitoringWSockFunction.getCurrentProcessProgressionEvent().monitoringInstanceProgression.currentStep == myMonitoringWSockFunction.getCurrentProcessProgressionEvent().monitoringInstanceProgression.totalSteps)) { myMonitoringWSockFunction.getCurrentProcessProgressionEvent().monitoringInstanceProgression.processStatus = ProcessStatusType.ENDED; } if (myMonitoringWSockFunction.getCurrentProcessProgressionEvent() == null || myMonitoringWSockFunction.getCurrentProcessProgressionEvent().monitoringInstanceProgression == null || myMonitoringWSockFunction.getCurrentProcessProgressionEvent().monitoringInstanceProgression.processStatus == ProcessStatusType.RUNNING || myMonitoringWSockFunction.getCurrentProcessProgressionEvent().monitoringInstanceProgression.processStatus == ProcessStatusType.CREATED) { return true; } return false; } /** private async Task<toDoResponse> sendTestTODOAt(AppUser user, toDo req) { HttpClient client = new HttpClient(); req.userId = user.getId(); Console.WriteLine("send task: " + req.task.taskId + " for user: " + user.getId()); var content = new StringContent(JSONMarshaller.marshall<toDo>(req), Encoding.UTF8, "application/json"); HttpResponseMessage httpResponseMessage = await client.PostAsync(user.getTaskListener().callbackAddress, content); string buffer = await httpResponseMessage.Content.ReadAsStringAsync(); if (httpResponseMessage.StatusCode != HttpStatusCode.OK) { throw new Exception(httpResponseMessage.StatusCode + ": " + buffer); } toDoResponse resp = JSONMarshaller.unmarshall<toDoResponse>(buffer); return resp; } */ public class MyUserTodoListener : AppWSockTODOFunction { public MyUserTodoListener() : base() { } public override void onReceiveTask(AppTask newTask) { Console.WriteLine("receive new task: " + newTask.getId() + " for user: " + this.user.getId()); } } public class MyMonitoringExchangeWSockFunction : WSockMonitoringExchangeProgressionEvent { monitoringProcessInstanceProgressionEvent currentProcessProgression = null; public MyMonitoringExchangeWSockFunction() : base() { } public override void onReceiveMonitoringProcessInstanceProgressionEvent(monitoringProcessInstanceProgressionEvent mpipe) { Console.WriteLine("monitoring exchange received !!!"); this.currentProcessProgression = mpipe; } public monitoringProcessInstanceProgressionEvent getCurrentProcessProgressionEvent() { return this.currentProcessProgression; } } public class MyProcessResponseWSockFunction : WSockProcessResponseFunction { bool processEnded = false; public MyProcessResponseWSockFunction() : base() { } public bool ProcessEnded { get => processEnded; set => processEnded = value; } public override void onReceiveProcessResponse(sendASyncResponse response) { Console.WriteLine("process response received !!!"); processEnded = true; } } public class MyProcessCancelWSockFunction : WSockProcessCancelFunction { bool processCancel = false; public MyProcessCancelWSockFunction() : base() { } public bool ProcessCancel { get => processCancel; set => processCancel = value; } public override void onCancel(cancel cancel) { Console.WriteLine("process cancel received !!!"); processCancel = true; } } public class MyWSockAddNodeEventFunction : WSockAddNodeEvent { RestDriver driver; string processInstanceId; IUCExample uc; public MyWSockAddNodeEventFunction(RestDriver driver, IUCExample uc) : base() { this.driver = driver; this.uc = uc; } public override void onAddNodeEvent(addNodeEvent response) { Console.WriteLine("onAddNodeEvent received !!!"); Task task = this.uc.detectCriticalDivergenceOnNodeAsync(response.node, IUCExample.Action.ADD, driver, processInstanceId); } public void setProcessInstanceId(string processInstanceId) { this.processInstanceId = processInstanceId; } } public class MyWSockRemoveNodeEventFunction : WSockRemoveNodeEvent { RestDriver driver; string processInstanceId; IUCExample uc; public MyWSockRemoveNodeEventFunction(RestDriver driver, IUCExample uc) : base() { this.driver = driver; this.uc = uc; } public override void onRemoveNodeEvent(removeNodeEvent response) { Console.WriteLine("onRemoveNodeEvent received !!!"); Task task = this.uc.detectCriticalDivergenceOnNodeAsync(response.node, IUCExample.Action.ADD, driver, processInstanceId); } public void setProcessInstanceId(string processInstanceId) { this.processInstanceId = processInstanceId; } } } }
, multiple selections available,
Related content
Driver csharp
Driver csharp
More like this
How to use python driver
How to use python driver
More like this
Configuration Port R-IOsuite
Configuration Port R-IOsuite
More like this
How to connect Riosuite with Neo4j
How to connect Riosuite with Neo4j
More like this