cameo issueshttps://code.ill.fr/cameo/cameo/-/issues2022-04-22T09:21:36+02:00https://code.ill.fr/cameo/cameo/-/issues/14toString format2022-04-22T09:21:36+02:00yannick legoctoString formatThe encoding of toString methods can be improved by using JSON.The encoding of toString methods can be improved by using JSON.JSON and nameshttps://code.ill.fr/cameo/cameo/-/issues/17Port strategy2020-10-21T10:29:11+02:00yannick legocPort strategyOnly the client API can check for a new available port because a tier program can reserve a port.
Solution:
- Add the server request PORT_UNAVAILABLE: the server stores the list of unavailable ports.
- The request REQUEST_PORT returns a...Only the client API can check for a new available port because a tier program can reserve a port.
Solution:
- Add the server request PORT_UNAVAILABLE: the server stores the list of unavailable ports.
- The request REQUEST_PORT returns a port available (not in the list of unavailable ports).
Use case:
1. The client requests a port.
2. The client tries to open the port. If successful, the procedure is finished.
3. If not successful, the client informs the server that the port is unavailable. Go to 1.Server v1 update (1)https://code.ill.fr/cameo/cameo/-/issues/18Display stream with multiple=yes2020-10-13T14:42:42+02:00yannick legocDisplay stream with multiple=yesImplement multiple stream for multiple applications:
- The cameo server accepts and starts a stream thread.
- The clients must filter the stream message on the application id.
For instance, the class OutputPrintThread.Implement multiple stream for multiple applications:
- The cameo server accepts and starts a stream thread.
- The clients must filter the stream message on the application id.
For instance, the class OutputPrintThread.Server v1 update (1)https://code.ill.fr/cameo/cameo/-/issues/20Request version of the server in API2020-10-01T14:24:02+02:00yannick legocRequest version of the server in APICan be used later to check the compatibility.
Console application must be updated to provide a version command that will return a simple value in case the request does not exist.Can be used later to check the compatibility.
Console application must be updated to provide a version command that will return a simple value in case the request does not exist.https://code.ill.fr/cameo/cameo/-/issues/23Documentation2020-10-06T14:53:56+02:00yannick legocDocumentationThe documentation with concepts and commented examples must be written
Explain:
* What is an application
* What is an App = application instance
Draw the general case: multiple App instance -> multiple instance process -> application
*...The documentation with concepts and commented examples must be written
Explain:
* What is an application
* What is an App = application instance
Draw the general case: multiple App instance -> multiple instance process -> application
* Configuration file with options
* Managed and unmanaged applications
* Communication patterns
It will also contain:
* Publisher/Subscriber: dead publisher application. Clarify: Subscriber.hasEnded() returns false
* Study how the project is related to others: for documentation/article
* Asynchronous API, future/promise model, how it is not enough.
* Study Erlang
https://en.wikipedia.org/wiki/Erlang_(programming_language)
* thread safety: clarifyMischttps://code.ill.fr/cameo/cameo/-/issues/24Check null values passed to send data functions/methods2020-10-01T14:20:25+02:00yannick legocCheck null values passed to send data functions/methodsFor functions: This.setResult, Publisher.send, Requester.send.
The simplest solution is to do nothing if data are null.For functions: This.setResult, Publisher.send, Requester.send.
The simplest solution is to do nothing if data are null.Mischttps://code.ill.fr/cameo/cameo/-/issues/26Define more than one Requester on the same Responder in one instance2017-09-01T10:41:38+02:00yannick legocDefine more than one Requester on the same Responder in one instanceThe Cameo API is limited to the definition of a single Requester for a given Responder.
We can modify the API to enable to have multiple requesters:
RequesterImpl.getRequesterPortName() must have another implementation:
return REQUESTER...The Cameo API is limited to the definition of a single Requester for a given Responder.
We can modify the API to enable to have multiple requesters:
RequesterImpl.getRequesterPortName() must have another implementation:
return REQUESTER_PREFIX + name + "." + responderId + "." + requesterCounter;
With requesterCounter a static integer incremented by concurrent access.
To be implemented in Java and C++.https://code.ill.fr/cameo/cameo/-/issues/27Keep app in the list with state UNKNOWN2020-10-01T14:26:03+02:00yannick legocKeep app in the list with state UNKNOWNWe keep the app with state UNKNOWN if it is still alive but has not a running state.
For instance, when an app is terminating but the process is still alive.We keep the app with state UNKNOWN if it is still alive but has not a running state.
For instance, when an app is terminating but the process is still alive.https://code.ill.fr/cameo/cameo/-/issues/28Messages.proto to move into cameo-commons2018-07-13T08:38:50+02:00yannick legocMessages.proto to move into cameo-commonsTo avoid class duplication in Java. Then cameo-commons becomes a Java project that depends cameo-server and cameo-java-api.To avoid class duplication in Java. Then cameo-commons becomes a Java project that depends cameo-server and cameo-java-api.https://code.ill.fr/cameo/cameo/-/issues/29States in objects2020-10-01T14:27:54+02:00yannick legocStates in objectsEach connected object must have a clear state.Each connected object must have a clear state.New version of APIshttps://code.ill.fr/cameo/cameo/-/issues/4Migration to Java 9: unify managed and unmanaged applications2021-04-22T13:01:01+02:00yannick legocMigration to Java 9: unify managed and unmanaged applicationsCurrently the Java 8 API does not allow to control the execution of a Process that is not started by the parent JVM. The Java 9 API will solve this by adding:
* Concept of *ProcessHandle* that can be accessed for all running processes u...Currently the Java 8 API does not allow to control the execution of a Process that is not started by the parent JVM. The Java 9 API will solve this by adding:
* Concept of *ProcessHandle* that can be accessed for all running processes using the *allProcesses* method.
* Process ID accessible for any process on any platform.
The documentation can be read here: [Java 9 Process API](https://aboullaite.me/java-9-process-api-got-a-new-boost/).
Before migrating, we will have to check that Android supports Java 9.
Notice that currently there can be strange behaviours. For example when starting an application as unmanaged, it is possible to connect to it in a different program but trying to kill and wait for its termination will block.https://code.ill.fr/cameo/cameo/-/issues/3Object lifecycle management: terminate()2022-01-18T15:40:19+01:00yannick legocObject lifecycle management: terminate()The example of a use of Cameo in a real project [nomad-client-cpp](https://code.ill.fr/instrument-control-protos/nomad-client-cpp) shows that the lifecycle of objects can be improved.
The Python API binding should require this too.
The...The example of a use of Cameo in a real project [nomad-client-cpp](https://code.ill.fr/instrument-control-protos/nomad-client-cpp) shows that the lifecycle of objects can be improved.
The Python API binding should require this too.
The objects associated to the context of server, e.g subscriber must be destroyed before server. That is realised by forcing This::terminate() because the shared pointer of subscriber is attached to the internal stop handler.
Is it possible to simplify and avoid this call?
A solution is to call terminate() on all objects.Mischttps://code.ill.fr/cameo/cameo/-/issues/33Log messages in cameo.log : level in config2020-10-06T14:20:53+02:00yannick legocLog messages in cameo.log : level in configThe level displayed must be set by its value and not debug="ON" i.e log="FINE"The level displayed must be set by its value and not debug="ON" i.e log="FINE"Server v1 update (1)https://code.ill.fr/cameo/cameo/-/issues/34Console output stream sync2020-10-14T15:48:47+02:00yannick legocConsole output stream syncUsed in console, the output stream can block.
It seems to come from the fact that the subscriber has not yet subscribed.
Solution: use a sync socket to check it is really.
That means that we must define a new request SYNC_STREAM like SYN...Used in console, the output stream can block.
It seems to come from the fact that the subscriber has not yet subscribed.
Solution: use a sync socket to check it is really.
That means that we must define a new request SYNC_STREAM like SYNC.
The server sends a SYNC_STREAM message on the concerned output stream.Mischttps://code.ill.fr/cameo/cameo/-/issues/35Implement blocking and non blocking responder2020-10-01T14:42:32+02:00yannick legocImplement blocking and non blocking responderCurrent implementation of the responder is non blocking.Current implementation of the responder is non blocking.https://code.ill.fr/cameo/cameo/-/issues/36Optimise the opening and closing of sockets : redesign communication between ...2020-10-01T14:53:05+02:00yannick legocOptimise the opening and closing of sockets : redesign communication between appsTo optimise the sockets, it is better to define 1 socket REP per app so that only simple messages are sent.
Do not block, the REP answers immediately as Acknowledge.
It is simpler to implement the timeouts.
The publisher and subscriber u...To optimise the sockets, it is better to define 1 socket REP per app so that only simple messages are sent.
Do not block, the REP answers immediately as Acknowledge.
It is simpler to implement the timeouts.
The publisher and subscriber use this common message queue.
A complete redesign is required.
All sockets must have a lifetime greater than a simple request: sockets connected to server also live the time of the process.https://code.ill.fr/cameo/cameo/-/issues/37Maven modules and a single project for all the projects2018-11-29T11:22:49+01:00yannick legocMaven modules and a single project for all the projectsInclude c++ into project: create directory cpp-api (next to Java modules).Include c++ into project: create directory cpp-api (next to Java modules).https://code.ill.fr/cameo/cameo/-/issues/38Add the method This.init(string, string)2020-11-02T15:19:20+01:00yannick legocAdd the method This.init(string, string)In case of unmanaged application, it is better to have a new method:
* This.init(String applicationName, String endpoint)In case of unmanaged application, it is better to have a new method:
* This.init(String applicationName, String endpoint)New version of APIshttps://code.ill.fr/cameo/cameo/-/issues/39Output stream incomplete when process is crashing2020-10-01T14:44:00+02:00yannick legocOutput stream incomplete when process is crashingWhen a process is crashing e.g. nomad server at init, the output is not complete. Check if this is related to Java streams and cannot be improved in cameo server.When a process is crashing e.g. nomad server at init, the output is not complete. Check if this is related to Java streams and cannot be improved in cameo server.https://code.ill.fr/cameo/cameo/-/issues/40Stopping time and stop handler2020-11-02T18:31:10+01:00yannick legocStopping time and stop handlerThe stopping time meaning has been reviewed: it is used only when a stop handler is defined (by handleStop() or executable). It can be overriden with handleStop().The stopping time meaning has been reviewed: it is used only when a stop handler is defined (by handleStop() or executable). It can be overriden with handleStop().Mischttps://code.ill.fr/cameo/cameo/-/issues/43Quit console without killing the application in exec2020-10-09T08:52:56+02:00yannick legocQuit console without killing the application in execConsole updatehttps://code.ill.fr/cameo/cameo/-/issues/44Gather name and id to unify syntax in console2020-10-01T14:52:06+02:00yannick legocGather name and id to unify syntax in consoleAllow
```
$ cmo stop ns.1
```Allow
```
$ cmo stop ns.1
```https://code.ill.fr/cameo/cameo/-/issues/45Server version request2020-10-04T20:55:29+02:00yannick legocServer version requestAdd the function in APIs.Add the function in APIs.Server v1 update (1)https://code.ill.fr/cameo/cameo/-/issues/46Ban delete and use unique_ptr instead2019-11-27T09:23:02+01:00yannick legocBan delete and use unique_ptr insteadhttps://code.ill.fr/cameo/cameo/-/issues/47String output of requester2020-10-01T14:52:30+02:00yannick legocString output of requesterThe output should show the remote responder in @endpoint.The output should show the remote responder in @endpoint.https://code.ill.fr/cameo/cameo/-/issues/48Add the default constructor to Server class2022-04-20T13:47:11+02:00yannick legocAdd the default constructor to Server classWith Application::getEndpoint() as endpoint.With Application::getEndpoint() as endpoint.New version of APIshttps://code.ill.fr/cameo/cameo/-/issues/49Add the function This::init(string, string) in C++2020-10-01T14:52:57+02:00yannick legocAdd the function This::init(string, string) in C++In case of unmanaged application, it is better to have the function This::init(const std::string& endpoint, const std::string& applicationName).In case of unmanaged application, it is better to have the function This::init(const std::string& endpoint, const std::string& applicationName).https://code.ill.fr/cameo/cameo/-/issues/53Review getActualState()2020-10-10T10:24:25+02:00yannick legocReview getActualState()It seems that sometimes the function Instance::now() does not return the current state. It happens with NomadGUI.
Does it come from the zeromq pub/sub? Some events could be lost?
If it is the case, one solution would be to poll at a low ...It seems that sometimes the function Instance::now() does not return the current state. It happens with NomadGUI.
Does it come from the zeromq pub/sub? Some events could be lost?
If it is the case, one solution would be to poll at a low frequency.
Test: start and kill an application. Follow it using now() in parallel. The workflow should never block.Mischttps://code.ill.fr/cameo/cameo/-/issues/55Switch to cmake for C++2020-10-07T11:23:08+02:00yannick legocSwitch to cmake for C++Python APIShervin NourbakhshShervin Nourbakhshhttps://code.ill.fr/cameo/cameo/-/issues/2Timeouts2022-10-19T14:14:50+02:00yannick legocTimeoutsEvery blocking call must be able to return after a timeout.
For a blocking call like waitFor, periodical tests should be provided.
Zeromq reliability: http://zguide.zeromq.org/php:chapter4
Failure example: remote app starts but a netwo...Every blocking call must be able to return after a timeout.
For a blocking call like waitFor, periodical tests should be provided.
Zeromq reliability: http://zguide.zeromq.org/php:chapter4
Failure example: remote app starts but a network failure happens before the setResult.
The change of state is ok but not the starter which blocks on getResult in the recv call.
Server initialization must throw a ConnectionTimeout or return boolean in case of timeout.New version of APIshttps://code.ill.fr/cameo/cameo/-/issues/1Blocking calls: cancel2023-07-25T08:32:28+02:00yannick legocBlocking calls: cancelThe C++ and Java API provide blocking calls:
* Publisher.waitForSubscribers
* Subscriber.receive
* Requester.request
* Responder.receive
* Instance.waitFor
The current implementation of cancel - e.g. called from a stop handler does not ...The C++ and Java API provide blocking calls:
* Publisher.waitForSubscribers
* Subscriber.receive
* Requester.request
* Responder.receive
* Instance.waitFor
The current implementation of cancel - e.g. called from a stop handler does not work well. It supposes the objects are waiting in a previous call.
An improvement must be done:
* Each object has the state waiting: true/false
* Each object has the state canceled: true/false
The canceled state is terminal: once an object is canceled it cannot revert to uncanceled.
These states must be managed properly by the associated waiting object.
* A common mutex blocks the access of the two states
* waiting false then canceled true: does not send the cancel "signal"
* waiting true then canceled true: sends the cancel "signal"
* canceled true then waiting true: does not send the cancel "signal" but the call returns immediately
We can add the create calls for the different objects except Instance. How to manage?New version of APIshttps://code.ill.fr/cameo/cameo/-/issues/56Refactor OuputStreamSocket2022-04-20T13:42:52+02:00yannick legocRefactor OuputStreamSocketChange namespace/package. Return null instead of end in case of end.Change namespace/package. Return null instead of end in case of end.New version of APIshttps://code.ill.fr/cameo/cameo/-/issues/57Add the possibility to send text and binary content2020-10-01T14:56:30+02:00yannick legocAdd the possibility to send text and binary contentFor all the send/reply functions/methods.
Or unify with only binary and an interpreter to convert easily a text part.For all the send/reply functions/methods.
Or unify with only binary and an interpreter to convert easily a text part.https://code.ill.fr/cameo/cameo/-/issues/59Correct ApplicationConfig.toString in cameo-server2020-10-01T14:58:30+02:00yannick legocCorrect ApplicationConfig.toString in cameo-servererrorComand must be correctederrorComand must be correctedhttps://code.ill.fr/cameo/cameo/-/issues/60Add a sync mode to subscriber2023-09-22T09:12:22+02:00yannick legocAdd a sync mode to subscriberThe subscriber does not know when it is really connected. We need to add an option at the creation of the subscriber.
However this implies to review the publisher which must have a thread running the responder.The subscriber does not know when it is really connected. We need to add an option at the creation of the subscriber.
However this implies to review the publisher which must have a thread running the responder.Mischttps://code.ill.fr/cameo/cameo/-/issues/61Review unique_ptr vs shared_ptr2020-10-01T15:00:36+02:00yannick legocReview unique_ptr vs shared_ptrRequest::getServer() should return a shared_ptr because it can be called many times.Request::getServer() should return a shared_ptr because it can be called many times.New version of APIshttps://code.ill.fr/cameo/cameo/-/issues/62Request::getServer to be reviewed2022-03-01T15:44:23+01:00yannick legocRequest::getServer to be reviewedProvide a way to create the server outside? And do not keep it inside the Request.Provide a way to create the server outside? And do not keep it inside the Request.New version of APIshttps://code.ill.fr/cameo/cameo/-/issues/65Console improvements2020-10-06T10:19:17+02:00yannick legocConsole improvements- Print server version
- Print endpoint
- Arguments:
-e host:port (no tcp://)
-p 10000 (only port to localhost)
Provide length args: -e = --endpoint, -p = --port, -a = --app- Print server version
- Print endpoint
- Arguments:
-e host:port (no tcp://)
-p 10000 (only port to localhost)
Provide length args: -e = --endpoint, -p = --port, -a = --appConsole updatehttps://code.ill.fr/cameo/cameo/-/issues/66Config file in JSON2020-10-09T15:24:05+02:00yannick legocConfig file in JSONSo that there is only JSON in the project: is more trendySo that there is only JSON in the project: is more trendyJSON and nameshttps://code.ill.fr/cameo/cameo/-/issues/68Check compatibility2022-05-19T14:59:05+02:00yannick legocCheck compatibilityWhen connecting to a remote cameo server, it is necessary to check the version so that it is compatible with the API version.
The server must verify that the request is acceptable or not (i.e. a request from API v1 is not compatible with...When connecting to a remote cameo server, it is necessary to check the version so that it is compatible with the API version.
The server must verify that the request is acceptable or not (i.e. a request from API v1 is not compatible with v2).New version of APIshttps://code.ill.fr/cameo/cameo/-/issues/69Server application storage2020-10-09T09:12:30+02:00yannick legocServer application storageProvide requests to save string data for each application.
The goal is to provide a general way to implement communication patterns.Provide requests to save string data for each application.
The goal is to provide a general way to implement communication patterns.Server v1 update (1)https://code.ill.fr/cameo/cameo/-/issues/70Switch Java Request/Responder/Publisher/Subscriber to application storage2022-03-01T15:46:13+01:00yannick legocSwitch Java Request/Responder/Publisher/Subscriber to application storageJava API code reviewhttps://code.ill.fr/cameo/cameo/-/issues/71Java API impl2022-03-01T15:45:12+01:00yannick legocJava API implReview the implementation classes.
How to manage dependencies:
Request.connectToRequester
depends on InstanceReview the implementation classes.
How to manage dependencies:
Request.connectToRequester
depends on InstanceJava API code reviewhttps://code.ill.fr/cameo/cameo/-/issues/72Review LifecycleApplicationThread2020-10-01T21:54:35+02:00yannick legocReview LifecycleApplicationThreadDefine clearly the state graph with all the concepts:
- starting time
- etc.
The error state should only happen when the process returns an error code.Define clearly the state graph with all the concepts:
- starting time
- etc.
The error state should only happen when the process returns an error code.Mischttps://code.ill.fr/cameo/cameo/-/issues/73API Names refactoring2022-04-19T13:10:14+02:00yannick legocAPI Names refactoring- Class application.Instance will be renamed into App (aka Application process proxy).
- Use of nested classes for Output, Config, Info (in App): possible to bind nested class in Python?
- Add App.getConfig()
- Review the java packages t...- Class application.Instance will be renamed into App (aka Application process proxy).
- Use of nested classes for Output, Config, Info (in App): possible to bind nested class in Python?
- Add App.getConfig()
- Review the java packages to prepare the module definition.New version of APIshttps://code.ill.fr/cameo/cameo/-/issues/74Console commands improvements2020-10-07T15:11:21+02:00yannick legocConsole commands improvements* Replace listen by connect -m (--mute)
* Start and connect connect -s (starts if not running)
connect --start
* Exec without output exec -q
exec --quiet* Replace listen by connect -m (--mute)
* Start and connect connect -s (starts if not running)
connect --start
* Exec without output exec -q
exec --quietConsole updatehttps://code.ill.fr/cameo/cameo/-/issues/75Console error code with command exec or connect2020-10-12T09:54:07+02:00yannick legocConsole error code with command exec or connectWhen command is exec, return the process error code when the execution is not a success.
The cameo server must be modified as well as the APIs.
Modify sendStatus on cameo server: add exit_code that is optional and only there when there...When command is exec, return the process error code when the execution is not a success.
The cameo server must be modified as well as the APIs.
Modify sendStatus on cameo server: add exit_code that is optional and only there when there is an error.
Add Instance.getErrorCode()Console updatehttps://code.ill.fr/cameo/cameo/-/issues/76Add commands to console: state, past states2020-10-13T17:05:28+02:00yannick legocAdd commands to console: state, past statespast state returns a list with , separator.past state returns a list with , separator.Console updatehttps://code.ill.fr/cameo/cameo/-/issues/77Replace Instance.exists() by an exception2022-04-20T13:41:19+02:00yannick legocReplace Instance.exists() by an exceptionIndeed, it is important to unify behaviour between different classes/methods:
* connect(name) throws UndefinedApplicationException.
* start(name) throws UndefinedApplicationException.
Idea: any undefined resource throws an exception (ke...Indeed, it is important to unify behaviour between different classes/methods:
* connect(name) throws UndefinedApplicationException.
* start(name) throws UndefinedApplicationException.
Idea: any undefined resource throws an exception (key, app, etc.)
* start() return a non-null Instance.
* connect() may return a null Instance if nothing executes.New version of APIshttps://code.ill.fr/cameo/cameo/-/issues/79Windows compilation with CMake2020-10-09T07:43:13+02:00yannick legocWindows compilation with CMakeCMakehttps://code.ill.fr/cameo/cameo/-/issues/80Request names refactoring2020-10-09T10:53:27+02:00yannick legocRequest names refactoringServer v1 update (1)https://code.ill.fr/cameo/cameo/-/issues/81Add options to connect() and start()2023-09-01T16:24:08+02:00yannick legocAdd options to connect() and start()Some options can be interesting:
- STOP : stop the application if executing
- KILL : kill the application if executing
- START : start the application if not executing (for connect)Some options can be interesting:
- STOP : stop the application if executing
- KILL : kill the application if executing
- START : start the application if not executing (for connect)New version of APIshttps://code.ill.fr/cameo/cameo/-/issues/82Add connect(id)2022-04-20T13:39:33+02:00yannick legocAdd connect(id)New version of APIshttps://code.ill.fr/cameo/cameo/-/issues/83Remove cerr2022-04-20T13:40:16+02:00yannick legocRemove cerrMischttps://code.ill.fr/cameo/cameo/-/issues/90Improve list output in Console2020-10-14T07:54:55+02:00yannick legocImprove list output in ConsoleList command: how to display long names: display until the max length.
Apps: idem: display name until the max length. Add the args.List command: how to display long names: display until the max length.
Apps: idem: display name until the max length. Add the args.Console updatehttps://code.ill.fr/cameo/cameo/-/issues/91Storage events2020-10-15T16:31:20+02:00yannick legocStorage eventsIt is necessary to send events for storage requests, especially the store request.
Implement:
- Store key event
- Remove key eventIt is necessary to send events for storage requests, especially the store request.
Implement:
- Store key event
- Remove key eventServer v1 update (1)https://code.ill.fr/cameo/cameo/-/issues/92Review server code2020-11-02T10:26:25+01:00yannick legocReview server codeReview all the server code:
- Format the code
- Document the methods
- Document the request processReview all the server code:
- Format the code
- Document the methods
- Document the request processServer v1 update (2)https://code.ill.fr/cameo/cameo/-/issues/93Port strategy applied to server ports2020-10-21T14:54:09+02:00yannick legocPort strategy applied to server portsThe cameo server opens some ports by itself.
We can apply the port strategy to them.The cameo server opens some ports by itself.
We can apply the port strategy to them.Server v1 update (1)https://code.ill.fr/cameo/cameo/-/issues/94Rename State UNKNOWN into NIL2022-04-22T09:20:50+02:00yannick legocRename State UNKNOWN into NILNew version of APIshttps://code.ill.fr/cameo/cameo/-/issues/95Review info string passed as arg2020-11-02T10:23:36+01:00yannick legocReview info string passed as argUnify the format of the app and the starter app:
```
<name>.id@<endpoint>
```
Or
```
<name>@<endpoint>
```
For unmanaged applications.
Define parse() to get the infos in the class Strings.Unify the format of the app and the starter app:
```
<name>.id@<endpoint>
```
Or
```
<name>@<endpoint>
```
For unmanaged applications.
Define parse() to get the infos in the class Strings.Server v1 update (1)https://code.ill.fr/cameo/cameo/-/issues/96Application inheritance in server2020-10-26T09:24:37+01:00yannick legocApplication inheritance in serverDo not inherit Application from ApplicationConfig. Pass the object in field.
Define ApplicationAndStarterIdentity at the creation of the object.Do not inherit Application from ApplicationConfig. Pass the object in field.
Define ApplicationAndStarterIdentity at the creation of the object.Server v1 update (2)https://code.ill.fr/cameo/cameo/-/issues/98Review attribute names in config2020-11-03T19:43:11+01:00yannick legocReview attribute names in configFor instance, pass_info may be replaced by arg_info or argument_info or identityFor instance, pass_info may be replaced by arg_info or argument_info or identityServer v1 update (2)https://code.ill.fr/cameo/cameo/-/issues/100Unify behavior of connect2022-04-20T13:37:13+02:00yannick legocUnify behavior of connectJava socket returns a boolean that is false if the endpoint is not accessible.
Check if the C++ connect can do the same thing.Java socket returns a boolean that is false if the endpoint is not accessible.
Check if the C++ connect can do the same thing.New version of APIshttps://code.ill.fr/cameo/cameo/-/issues/101Bad error message in Console when endpoint is not accessible2022-04-19T13:09:37+02:00yannick legocBad error message in Console when endpoint is not accessibleExample:
```
$ cmo -e toto list
Cannot connect to server: tcp://toto:7000 is not a valid endpoint
fr.ill.ics.cameo.InvalidArgumentException: tcp://toto:7000 is not a valid endpoint
at fr.ill.ics.cameo.impl.ServerImpl.<init>(ServerImpl.j...Example:
```
$ cmo -e toto list
Cannot connect to server: tcp://toto:7000 is not a valid endpoint
fr.ill.ics.cameo.InvalidArgumentException: tcp://toto:7000 is not a valid endpoint
at fr.ill.ics.cameo.impl.ServerImpl.<init>(ServerImpl.java:99)
at fr.ill.ics.cameo.Server.<init>(Server.java:54)
at fr.ill.ics.cameo.console.Console.<init>(Console.java:245)
at fr.ill.ics.cameo.console.Console.main(Console.java:868)
```Console updatehttps://code.ill.fr/cameo/cameo/-/issues/102Review log level for requests2022-03-18T11:42:51+01:00yannick legocReview log level for requestsSet finerSet finerServer v1 update (2)https://code.ill.fr/cameo/cameo/-/issues/104Execute unregistered apps by cmo2021-06-07T16:36:12+02:00yannick legocExecute unregistered apps by cmo```
cmo exec <program> <args>
```
If program is not a registered app then execute by adding the necessary JSON argument.```
cmo exec <program> <args>
```
If program is not a registered app then execute by adding the necessary JSON argument.Console updatehttps://code.ill.fr/cameo/cameo/-/issues/105Log more info when localhost is selected in Cameo server2022-03-01T15:41:53+01:00yannick legocLog more info when localhost is selected in Cameo serverExplain that localhost is a default value.Explain that localhost is a default value.https://code.ill.fr/cameo/cameo/-/issues/106Java Package for server and console2021-04-30T09:10:06+02:00yannick legocJava Package for server and consoleDepends on modularization.Depends on modularization.https://code.ill.fr/cameo/cameo/-/issues/107Build server2021-04-30T09:35:48+02:00yannick legocBuild serverhttps://code.ill.fr/cameo/cameo/-/issues/108Correct cmo help2021-12-16T15:49:44+01:00yannick legocCorrect cmo helpEndpoint definition by the cameo server to be updated.Endpoint definition by the cameo server to be updated.https://code.ill.fr/cameo/cameo/-/issues/109Default values in server config file2022-04-22T10:38:48+02:00yannick legocDefault values in server config fileDefault values not set with the "default" string but by the absence of the attribute.Default values not set with the "default" string but by the absence of the attribute.https://code.ill.fr/cameo/cameo/-/issues/110Check exceptions in Python binding2022-04-20T13:33:28+02:00yannick legocCheck exceptions in Python bindinghttps://code.ill.fr/cameo/cameo/-/issues/111Implement toString() for all Python classes2022-04-19T11:40:49+02:00yannick legocImplement toString() for all Python classeshttps://code.ill.fr/cameo/cameo/-/issues/112Change Java get() and getBinary()2022-04-19T11:41:06+02:00yannick legocChange Java get() and getBinary()Keep only get() (binary) and provide a conversion method to string.Keep only get() (binary) and provide a conversion method to string.https://code.ill.fr/cameo/cameo/-/issues/113Directory reorganization2022-01-20T16:44:35+01:00yannick legocDirectory reorganization```
cameo/java/server
/api
/console
/cpp/api
/coms
/python/api
...
``````
cameo/java/server
/api
/console
/cpp/api
/coms
/python/api
...
```Mischttps://code.ill.fr/cameo/cameo/-/issues/114Default argument values and argument names in Python binding2021-05-07T16:17:46+02:00yannick legocDefault argument values and argument names in Python bindingFor all functions that have arguments.For all functions that have arguments.https://code.ill.fr/cameo/cameo/-/issues/115Review documentation2023-07-18T16:56:18+02:00yannick legocReview documentationKeep the markdown files in the project and generate a wiki or a website so that the files are always readable from the project.Keep the markdown files in the project and generate a wiki or a website so that the files are always readable from the project.Mischttps://code.ill.fr/cameo/cameo/-/issues/116Refactor unmanaged2022-01-26T10:03:17+01:00yannick legocRefactor unmanagedIn the server we could have AttachedApplication and StartedApplication.
Or RegisteredApplication and UnregisteredApplication.In the server we could have AttachedApplication and StartedApplication.
Or RegisteredApplication and UnregisteredApplication.Server v1 update (2)https://code.ill.fr/cameo/cameo/-/issues/117Launch server with multiple config files2022-01-18T15:48:56+01:00yannick legocLaunch server with multiple config filesAdd the possibility to provide a list of config files rather than only one.
The endpoint port is the one of the first config file.Add the possibility to provide a list of config files rather than only one.
The endpoint port is the one of the first config file.Server v1 update (2)https://code.ill.fr/cameo/cameo/-/issues/118Launch server with a special endpoint port2021-07-07T09:24:42+02:00yannick legocLaunch server with a special endpoint portOverride the XML config file(s) port with the option --port <port>Override the XML config file(s) port with the option --port <port>https://code.ill.fr/cameo/cameo/-/issues/119Reimplement Requester/Responder2022-03-01T15:41:10+01:00yannick legocReimplement Requester/ResponderSee multithreaded server:
https://zguide.zeromq.org/docs/chapter2/#sockets-and-patterns
Theory:
https://zguide.zeromq.org/docs/chapter3/See multithreaded server:
https://zguide.zeromq.org/docs/chapter2/#sockets-and-patterns
Theory:
https://zguide.zeromq.org/docs/chapter3/Com reviewhttps://code.ill.fr/cameo/cameo/-/issues/120Java projects modularization2021-11-26T11:25:41+01:00yannick legocJava projects modularizationImplement Java 9 modules.Implement Java 9 modules.https://code.ill.fr/cameo/cameo/-/issues/122Move tests into Cameo project2022-01-20T16:44:27+01:00yannick legocMove tests into Cameo projectTests should be incorporated into the Cameo project.Tests should be incorporated into the Cameo project.Mischttps://code.ill.fr/cameo/cameo/-/issues/123Unify error and stop executables arguments2022-04-22T10:58:31+02:00yannick legocUnify error and stop executables argumentsRemove $PID replacement and set the PID as the first argument.Remove $PID replacement and set the PID as the first argument.Server v1 update (2)https://code.ill.fr/cameo/cameo/-/issues/124Check This initialization in coms creation2022-01-17T15:00:29+01:00yannick legocCheck This initialization in coms creationMischttps://code.ill.fr/cameo/cameo/-/issues/129Limit length of names: app and coms2022-02-22T13:32:30+01:00yannick legocLimit length of names: app and comsLimit to 100 chars.Limit to 100 chars.JSON and nameshttps://code.ill.fr/cameo/cameo/-/issues/130Merge init requests2022-02-28T10:37:34+01:00yannick legocMerge init requestsMerge Server API init requests: version, proxy ports, etc.Merge Server API init requests: version, proxy ports, etc.Mischttps://code.ill.fr/cameo/cameo/-/issues/134Automated tests2022-04-20T14:15:43+02:00yannick legocAutomated testsUse assertions.
Use setResult to verify execution of apps.Use assertions.
Use setResult to verify execution of apps.https://code.ill.fr/cameo/cameo/-/issues/135Synchronize the methods and functions in API2022-04-22T09:08:56+02:00yannick legocSynchronize the methods and functions in APIAlso use atomic values.Also use atomic values.https://code.ill.fr/cameo/cameo/-/issues/136Check initialization of Cameo objects2022-05-10T15:52:50+02:00yannick legocCheck initialization of Cameo objectsA cameo object must raise an exception if a call is made whereas it is not initialized.A cameo object must raise an exception if a call is made whereas it is not initialized.https://code.ill.fr/cameo/cameo/-/issues/141Automated deployment of version2022-10-19T14:14:22+02:00yannick legocAutomated deployment of versionhttps://code.ill.fr/cameo/cameo/-/issues/142Cancel and timeout for Requester and Subscriber init()2023-09-01T15:28:59+02:00yannick legocCancel and timeout for Requester and Subscriber init()https://code.ill.fr/cameo/cameo/-/issues/144Add timeout when contacting starter server2023-09-01T16:25:19+02:00yannick legocAdd timeout when contacting starter serverAn app can block when its starter is unreachable. Add a timeout?An app can block when its starter is unreachable. Add a timeout?https://code.ill.fr/cameo/cameo/-/issues/147Check concurrent calls2023-06-15T16:46:50+02:00yannick legocCheck concurrent callsCancel calls may have trouble.
For instance, in Subscriber::cancel() could m_requester->cancel() provoke a segmentation fault if m_requester is destroyed during the call?Cancel calls may have trouble.
For instance, in Subscriber::cancel() could m_requester->cancel() provoke a segmentation fault if m_requester is destroyed during the call?https://code.ill.fr/cameo/cameo/-/issues/148Start cameo server from main program2023-09-22T09:13:25+02:00yannick legocStart cameo server from main programIn case the cameo server cannot be installed as service, it would be interested to attach to one process: started and stopped automatically.In case the cameo server cannot be installed as service, it would be interested to attach to one process: started and stopped automatically.https://code.ill.fr/cameo/cameo/-/issues/149Subscriber receive() timeout2024-01-23T16:56:33+01:00yannick legocSubscriber receive() timeoutAdd a possible timeout on receive() calls.Add a possible timeout on receive() calls.https://code.ill.fr/cameo/cameo/-/issues/150Multiple configuration files2023-11-08T16:01:10+01:00yannick legocMultiple configuration filesAdd the possibility to give multiple configuration files: a directory or a list of filesAdd the possibility to give multiple configuration files: a directory or a list of fileshttps://code.ill.fr/cameo/cameo/-/issues/151Option values in API2024-01-24T10:48:28+01:00yannick legocOption values in APIHave a dedicated namespace i.e. cameo::options::UNLINKED, etc.Have a dedicated namespace i.e. cameo::options::UNLINKED, etc.https://code.ill.fr/cameo/cameo/-/issues/153This::init() with Endpoint parameter2024-01-29T15:52:10+01:00yannick legocThis::init() with Endpoint parameter