Difference between revisions of "LightMessaging"

From iPhone Development Wiki
Jump to: navigation, search
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