LightMessaging: Difference between revisions

From iPhone Development Wiki
No edit summary
No edit summary
Line 1: Line 1:
LightMessaging is an [[IPC]] framework by [[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]].
LightMessaging is an [[IPC|inter-process communication]] framework by [[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 6: Line 6:
* Everyone else is using it.
* Everyone else is using it.


== Including this in your project ==
== How to integrate this library with 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 ([[RocketBootstrap#How_to_use_this_library|instructions here]]).


== Server ==
== Server ==


It is recommended that this is done in somewhere better designed to act as a server, such as SpringBoard or a daemon.
It is recommended that this is done in somewhere better designed to act as a server, such as [[SpringBoard.app|SpringBoard]] or a daemon.


=== Starting the Server ===
=== Starting the Server ===
Line 73: Line 73:
== Type helpers ==
== 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 [https://github.com/rpetrich/LightMessaging/blob/master/LightMessaging.h header file] or other examples to see how to use them.





Revision as of 05:06, 3 August 2016

LightMessaging is an inter-process communication framework by 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.

How to integrate this library with 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 (instructions here).

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.


Examples

External links