Public Member Functions

InterprocessConnection Class Reference

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, and MessageListener.

List of all members.

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=-1)
 Tries to connect the object to an existing named pipe.
bool createPipe (const String &pipeName, int pipeReceiveMessageTimeoutMs=-1)
 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.
StreamingSocketgetSocket () const noexcept
 Returns the socket that this connection is using (or null if it uses a pipe).
NamedPipegetPipe () const noexcept
 Returns the pipe that this connection is using (or null 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.

Detailed Description

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.

See also:
InterprocessConnectionServer, Socket, NamedPipe

Constructor & Destructor Documentation

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.

Parameters:
callbacksOnMessageThreadif 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.
magicMessageHeaderNumbera 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.


Member Function Documentation

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.

Parameters:
hostNamethe host computer, either a network address or name
portNumberthe socket port number to try to connect to
timeOutMillisecshow long to keep trying before giving up
Returns:
true if the connection is established successfully
See also:
Socket
bool InterprocessConnection::connectToPipe ( const String pipeName,
int  pipeReceiveMessageTimeoutMs = -1 
)

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.

You can optionally specify a timeout length to be passed to the NamedPipe::read() method.

Returns:
true if it connects successfully.
See also:
createPipe, NamedPipe
bool InterprocessConnection::createPipe ( const String pipeName,
int  pipeReceiveMessageTimeoutMs = -1 
)

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.

You can optionally specify a timeout length to be passed to the NamedPipe::read() method.

If another process is already using this pipe, this will fail and return false.

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.

StreamingSocket* InterprocessConnection::getSocket (  ) const

Returns the socket that this connection is using (or null if it uses a pipe).

NamedPipe* InterprocessConnection::getPipe (  ) const

Returns the pipe that this connection is using (or null if it uses a socket).

String InterprocessConnection::getConnectedHostName (  ) const

Returns the name of the machine at the other end of this connection.

This will return an empty string if the other machine isn't known for some reason.

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.

See also:
messageReceived
virtual void InterprocessConnection::connectionMade (  ) [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.

virtual void InterprocessConnection::connectionLost (  ) [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.

virtual void InterprocessConnection::messageReceived ( const MemoryBlock message ) [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.

See also:
sendMessage

The documentation for this class was generated from the following file:
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Defines