Manages a simple two-way messaging connection to another process, using either a socket or a named pipe as the transport medium. More...
Inherits Thread.
Public Member Functions | |
| InterprocessConnection (bool callbacksOnMessageThread=true, uint32 magicMessageHeaderNumber=0xf2b49e2c) | |
| Creates a connection. | |
| ~InterprocessConnection () | |
| Destructor. | |
| bool | connectToSocket (const String &hostName, int portNumber, int timeOutMillisecs) |
| Tries to connect this object to a socket. | |
| bool | connectToPipe (const String &pipeName, int pipeReceiveMessageTimeoutMs) |
| Tries to connect the object to an existing named pipe. | |
| bool | createPipe (const String &pipeName, int pipeReceiveMessageTimeoutMs) |
| Tries to create a new pipe for other processes to connect to. | |
| void | disconnect () |
| Disconnects and closes any currently-open sockets or pipes. | |
| bool | isConnected () const |
| True if a socket or pipe is currently active. | |
| StreamingSocket * | getSocket () const noexcept |
| Returns the socket that this connection is using (or nullptr if it uses a pipe). | |
| NamedPipe * | getPipe () const noexcept |
| Returns the pipe that this connection is using (or nullptr if it uses a socket). | |
| String | getConnectedHostName () const |
| Returns the name of the machine at the other end of this connection. | |
| bool | sendMessage (const MemoryBlock &message) |
| Tries to send a message to the other end of this connection. | |
| virtual void | connectionMade ()=0 |
| Called when the connection is first connected. | |
| virtual void | connectionLost ()=0 |
| Called when the connection is broken. | |
| virtual void | messageReceived (const MemoryBlock &message)=0 |
| Called when a message arrives. | |
Additional Inherited Members | |
Private Types inherited from Thread | |
| typedef void * | ThreadID |
| A value type used for thread IDs. | |
Private Member Functions inherited from Thread | |
| Thread (const String &threadName) | |
| Creates a thread. | |
| virtual | ~Thread () |
| Destructor. | |
| void | startThread () |
| Starts the thread running. | |
| void | startThread (int priority) |
| Starts the thread with a given priority. | |
| void | stopThread (int timeOutMilliseconds) |
| Attempts to stop the thread running. | |
| bool | isThreadRunning () const |
| Returns true if the thread is currently active. | |
| void | signalThreadShouldExit () |
| Sets a flag to tell the thread it should stop. | |
| bool | threadShouldExit () const |
| Checks whether the thread has been told to stop running. | |
| bool | waitForThreadToExit (int timeOutMilliseconds) const |
| Waits for the thread to stop. | |
| bool | setPriority (int priority) |
| Changes the thread's priority. | |
| void | setAffinityMask (uint32 affinityMask) |
| Sets the affinity mask for the thread. | |
| bool | wait (int timeOutMilliseconds) const |
| Makes the thread wait for a notification. | |
| void | notify () const |
| Wakes up the thread. | |
| ThreadID | getThreadId () const noexcept |
| Returns the ID of this thread. | |
| const String & | getThreadName () const |
| Returns the name of the thread. | |
Static Private Member Functions inherited from Thread | |
| static bool | setCurrentThreadPriority (int priority) |
| Changes the priority of the caller thread. | |
| static void | setCurrentThreadAffinityMask (uint32 affinityMask) |
| Changes the affinity mask for the caller thread. | |
| static void JUCE_CALLTYPE | sleep (int milliseconds) |
| static void JUCE_CALLTYPE | yield () |
| Yields the calling thread's current time-slot. | |
| static ThreadID | getCurrentThreadId () |
| Returns an id that identifies the caller thread. | |
| static Thread * | getCurrentThread () |
| Finds the thread object that is currently running. | |
| static void | setCurrentThreadName (const String &newThreadName) |
| Changes the name of the caller thread. | |
Manages a simple two-way messaging connection to another process, using either a socket or a named pipe as the transport medium.
To connect to a waiting socket or an open pipe, use the connectToSocket() or connectToPipe() methods. If this succeeds, messages can be sent to the other end, and incoming messages will result in a callback via the messageReceived() method.
To open a pipe and wait for another client to connect to it, use the createPipe() method.
To act as a socket server and create connections for one or more client, see the InterprocessConnectionServer class.
| InterprocessConnection::InterprocessConnection | ( | bool | callbacksOnMessageThread = true, |
| uint32 | magicMessageHeaderNumber = 0xf2b49e2c |
||
| ) |
Creates a connection.
Connections are created manually, connecting them with the connectToSocket() or connectToPipe() methods, or they are created automatically by a InterprocessConnectionServer when a client wants to connect.
| callbacksOnMessageThread | if true, callbacks to the connectionMade(), connectionLost() and messageReceived() methods will always be made using the message thread; if false, these will be called immediately on the connection's own thread. |
| magicMessageHeaderNumber | a magic number to use in the header to check the validity of the data blocks being sent and received. This can be any number, but the sender and receiver must obviously use matching values or they won't recognise each other. |
| InterprocessConnection::~InterprocessConnection | ( | ) |
Destructor.
| bool InterprocessConnection::connectToSocket | ( | const String & | hostName, |
| int | portNumber, | ||
| int | timeOutMillisecs | ||
| ) |
Tries to connect this object to a socket.
For this to work, the machine on the other end needs to have a InterprocessConnectionServer object waiting to receive client connections on this port number.
| hostName | the host computer, either a network address or name |
| portNumber | the socket port number to try to connect to |
| timeOutMillisecs | how long to keep trying before giving up |
| bool InterprocessConnection::connectToPipe | ( | const String & | pipeName, |
| int | pipeReceiveMessageTimeoutMs | ||
| ) |
Tries to connect the object to an existing named pipe.
For this to work, another process on the same computer must already have opened an InterprocessConnection object and used createPipe() to create a pipe for this to connect to.
| pipeName | the name to use for the pipe - this should be unique to your app |
| pipeReceiveMessageTimeoutMs | a timeout length to be used when reading or writing to the pipe, or -1 for an infinite timeout. |
| bool InterprocessConnection::createPipe | ( | const String & | pipeName, |
| int | pipeReceiveMessageTimeoutMs | ||
| ) |
Tries to create a new pipe for other processes to connect to.
This creates a pipe with the given name, so that other processes can use connectToPipe() to connect to the other end.
| pipeName | the name to use for the pipe - this should be unique to your app |
| pipeReceiveMessageTimeoutMs | a timeout length to be used when reading or writing to the pipe, or -1 for an infinite timeout. |
| void InterprocessConnection::disconnect | ( | ) |
Disconnects and closes any currently-open sockets or pipes.
| bool InterprocessConnection::isConnected | ( | ) | const |
True if a socket or pipe is currently active.
|
noexcept |
Returns the socket that this connection is using (or nullptr if it uses a pipe).
|
noexcept |
Returns the pipe that this connection is using (or nullptr if it uses a socket).
| String InterprocessConnection::getConnectedHostName | ( | ) | const |
Returns the name of the machine at the other end of this connection.
This may return an empty string if the name is unknown.
| bool InterprocessConnection::sendMessage | ( | const MemoryBlock & | message | ) |
Tries to send a message to the other end of this connection.
This will fail if it's not connected, or if there's some kind of write error. If it succeeds, the connection object at the other end will receive the message by a callback to its messageReceived() method.
|
pure virtual |
Called when the connection is first connected.
If the connection was created with the callbacksOnMessageThread flag set, then this will be called on the message thread; otherwise it will be called on a server thread.
|
pure virtual |
Called when the connection is broken.
If the connection was created with the callbacksOnMessageThread flag set, then this will be called on the message thread; otherwise it will be called on a server thread.
|
pure virtual |
Called when a message arrives.
When the object at the other end of this connection sends us a message with sendMessage(), this callback is used to deliver it to us.
If the connection was created with the callbacksOnMessageThread flag set, then this will be called on the message thread; otherwise it will be called on a server thread.