(no) |
(expand on a few things) |
||
Line 1: | Line 1: | ||
LightMessaging is a | LightMessaging is a header-only [[IPC]] framework [[User:Rpetrich|Ryan Petrich]]. According to its [https://github.com/rpetrich/LightMessaging GitHub page], it is a "simple low-level replacement for CFMessagePort". It is usually used as an API to [[RocketBootstrap]]. | ||
== Why should I use this? == | == Why should I use this? == | ||
Line 8: | Line 8: | ||
== Including this in your project == | == Including this in your project == | ||
Grab the headers from [https://github.com/rpetrich/LightMessaging rpetrich/LightMessaging], and <code>#import <LightMessaging/LightMessaging.h></code>. In most use cases, be sure to build your project with RocketBootstrap as a dependency. | Grab the headers from [https://github.com/rpetrich/LightMessaging rpetrich/LightMessaging], and <code>#import <LightMessaging/LightMessaging.h></code>. In most use cases, be sure to build your project with [[RocketBootstrap]] as a dependency. | ||
== Server == | == Server == | ||
It is recommended that this is | It is recommended that this is done in somewhere better designed to act as a server, such as SpringBoard or a daemon. | ||
=== Starting the Server === | === Starting the Server === | ||
Line 51: | Line 51: | ||
== Client == | == Client == | ||
This can be | This can be run anywhere that has the appropriate permissions to send/receive data on a message port. | ||
<source lang="objc"> | <source lang="objc"> | ||
Line 71: | Line 71: | ||
</source> | </source> | ||
== | == Type helpers == | ||
There are some cool helper functions for if you want to send Images / PropertyLists / etc instead of just strings. Look at the header file or other examples to see how to use them. | There are some cool helper functions for if you want to send Images / PropertyLists / etc instead of just strings. Look at the header file or other examples to see how to use them. |
Revision as of 01:56, 3 August 2016
LightMessaging is a header-only IPC framework Ryan Petrich. According to its GitHub page, it is a "simple low-level replacement for CFMessagePort". It is usually used as an API to RocketBootstrap.
Why should I use this?
- Ryan Petrich.
- Everyone else is using it.
Including this in your project
Grab the headers from rpetrich/LightMessaging, and #import <LightMessaging/LightMessaging.h>
. In most use cases, be sure to build your project with RocketBootstrap as a dependency.
Server
It is recommended that this is done in somewhere better designed to act as a server, such as SpringBoard or a daemon.
Starting the Server
LMStartService("net.iphonedevwiki.some.server", CFRunLoopGetCurrent(), (CFMachPortCallBack)some_callback);
The Callback
void some_callback(CFMachPortRef port,
LMMessage *request,
CFIndex size,
void *info)
{
// get the reply port
mach_port_t replyPort = request->head.msgh_remote_port;
// sanity check
if(size < sizeof(LMMessage)) {
LMSendReply(replyPort, NULL, 0);
LMResponseBufferFree((LMResponseBuffer *)request);
return;
}
// get the data you recieved
void *data = LMMessageGetData(request);
// send some data back
const char *msg = "lol";
LMSendReply(replyPort, msg, strlen(msg) + 1);
// free the response buffer??
LMResponseBufferFree((LMResponseBuffer *)request);
}
Client
This can be run anywhere that has the appropriate permissions to send/receive data on a message port.
// setup connection
LMConnection connection = {
MACH_PORT_NULL,
"net.iphonedevwiki.some.server"
};
//send message
LMResponseBuffer buffer;
const char *msg = "lol wtf";
SInt32 messageId = 0x1111; // this is arbitrary i think
LMConnectionSendTwoWay(connection, messageId, msg, strlen(msg) + 1, &buffer);
LMMessage *response = &(buffer.message);
// do whatever you want !!!!
const char *data = LMMessageGetData(response);
Type helpers
There are some cool helper functions for if you want to send Images / PropertyLists / etc instead of just strings. Look at the header file or other examples to see how to use them.
References
Working, Digestible Example Code
- libcanopenurl (client and server are in the same file)
- Lucy (client, server)