cameo issueshttps://code.ill.fr/cameo/cameo/-/issues2018-07-13T08:38:50+02:00https://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/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/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/133Multi Responder2022-03-18T10:55:13+01:00yannick legocMulti ResponderUsing the multithreaded server example, it is possible to define a multithreaded Responder.
Archi:
Router = socket ROUTER + DEALER
Responder = socket REPUsing the multithreaded server example, it is possible to define a multithreaded Responder.
Archi:
Router = socket ROUTER + DEALER
Responder = socket REPMischttps://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/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/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/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/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/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/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/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/19Refactor use of ZeroMQ2020-10-01T14:17:32+02:00yannick legocRefactor use of ZeroMQGather code: Socket calls.
Manage exceptions from ZeroMQ (ex: invalid host generates an exception).Gather code: Socket calls.
Manage exceptions from ZeroMQ (ex: invalid host generates an exception).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/83Remove cerr2022-04-20T13:40:16+02:00yannick legocRemove cerrMischttps://code.ill.fr/cameo/cameo/-/issues/78Remove deprecated ZMQ methods from C++ API2022-01-20T16:45:20+01:00Shervin NourbakhshRemove deprecated ZMQ methods from C++ APIWhen compiling, I got several warnings about deprecated declarations using zmq methods.
```
./cameo/src/impl/SubscriberImpl.cpp:210:36: warning: ‘bool zmq::detail::socket_base::recv(zmq::message_t*, int)’ is deprecated: from 4.3.1, use ...When compiling, I got several warnings about deprecated declarations using zmq methods.
```
./cameo/src/impl/SubscriberImpl.cpp:210:36: warning: ‘bool zmq::detail::socket_base::recv(zmq::message_t*, int)’ is deprecated: from 4.3.1, use recv taking a reference to message_t and recv_flags [-Wdeprecated-declarations]
m_subscriber->recv(message.get());
^
In file included from /opt/panosc/cameo/src/impl/SocketWaitingImpl.h:23,
from /opt/panosc/cameo/src/impl/SubscriberImpl.h:20,
from /opt/panosc/cameo/src/impl/SubscriberImpl.cpp:17:
/usr/include/zmq.hpp:1267:10: note: declared here
bool recv(message_t *msg_, int flags_ = 0)
^~~~
```New version of APIshttps://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/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/80Request names refactoring2020-10-09T10:53:27+02:00yannick legocRequest names refactoringServer 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.