Add passthrough pointer, better Makefile.

This commit is contained in:
Ian Gulliver
2015-06-10 19:50:26 -07:00
parent b9564576d3
commit d94b3d08ae
4 changed files with 23 additions and 9 deletions

View File

@@ -1,13 +1,25 @@
CC ?= gcc CC ?= gcc
CFLAGS ?= -Wall -Werror -I/usr/local/include -fpic CFLAGS ?= -Wall -Werror -I/usr/local/include -fpic -O
LDFLAGS ?= -Wall -L/usr/local/lib -L. LDFLAGS ?= -Wall -L/usr/local/lib -L. -O
LIBS ?= -lcurl -ljansson LIBS ?= -lcurl -ljansson
all: libcosmopolite.so
test: test.o libcosmopolite.so test: test.o libcosmopolite.so
$(CC) $(LDFLAGS) -o test test.o -lcosmopolite $(LIBS) $(CC) $(LDFLAGS) -o test test.o -lcosmopolite $(LIBS)
./test
libcosmopolite.so: cosmopolite.o libcosmopolite.so: cosmopolite.o
$(CC) -shared $(LDFLAGS) -o libcosmopolite.so cosmopolite.o $(LIBS) $(CC) -shared $(LDFLAGS) -o libcosmopolite.so cosmopolite.o $(LIBS)
%.o: %.c %.o: %.c *.h
$(CC) -c $(CFLAGS) $< -o $@ $(CC) -c $(CFLAGS) $< -o $@
install: libcosmopolite.so cosmopolite.h
cp libcosmopolite.so /usr/local/lib
cp cosmopolite.h /usr/local/include
chown root /usr/local/lib/libcosmopolite.so /usr/local/include/cosmopolite.h
chmod 0644 /usr/local/lib/libcosmopolite.so /usr/local/include/cosmopolite.h
clean:
rm -f test libcosmopolite.so *.o

View File

@@ -180,7 +180,7 @@ static void cosmo_handle_message(cosmo *instance, json_t *event) {
assert(!pthread_mutex_unlock(&instance->lock)); assert(!pthread_mutex_unlock(&instance->lock));
if (instance->callbacks.message) { if (instance->callbacks.message) {
instance->callbacks.message(event); instance->callbacks.message(event, instance->passthrough);
} }
} }
@@ -435,7 +435,7 @@ json_t *cosmo_get_last_message(cosmo *instance, json_t *subject) {
return ret; return ret;
} }
cosmo *cosmo_create(const char *base_url, const char *client_id, const cosmo_callbacks *callbacks) { cosmo *cosmo_create(const char *base_url, const char *client_id, const cosmo_callbacks *callbacks, void *passthrough) {
curl_global_init(CURL_GLOBAL_DEFAULT); curl_global_init(CURL_GLOBAL_DEFAULT);
srandomdev(); srandomdev();
@@ -446,6 +446,7 @@ cosmo *cosmo_create(const char *base_url, const char *client_id, const cosmo_cal
cosmo_uuid(instance->instance_id); cosmo_uuid(instance->instance_id);
memcpy(&instance->callbacks, callbacks, sizeof(instance->callbacks)); memcpy(&instance->callbacks, callbacks, sizeof(instance->callbacks));
instance->passthrough = passthrough;
assert(!pthread_mutex_init(&instance->lock, NULL)); assert(!pthread_mutex_init(&instance->lock, NULL));
assert(!pthread_cond_init(&instance->cond, NULL)); assert(!pthread_cond_init(&instance->cond, NULL));

View File

@@ -9,13 +9,14 @@
#define COSMO_UUID_SIZE 37 #define COSMO_UUID_SIZE 37
typedef struct { typedef struct {
void (*message)(const json_t *); void (*message)(const json_t *, void *);
} cosmo_callbacks; } cosmo_callbacks;
typedef struct { typedef struct {
char client_id[COSMO_UUID_SIZE]; char client_id[COSMO_UUID_SIZE];
char instance_id[COSMO_UUID_SIZE]; char instance_id[COSMO_UUID_SIZE];
cosmo_callbacks callbacks; cosmo_callbacks callbacks;
void *passthrough;
pthread_mutex_t lock; pthread_mutex_t lock;
pthread_cond_t cond; pthread_cond_t cond;
@@ -31,7 +32,7 @@ typedef struct {
void cosmo_uuid(char *uuid); void cosmo_uuid(char *uuid);
cosmo *cosmo_create(const char *base_url, const char *client_id, const cosmo_callbacks *callbacks); cosmo *cosmo_create(const char *base_url, const char *client_id, const cosmo_callbacks *callbacks, void *passthrough);
void cosmo_shutdown(cosmo *instance); void cosmo_shutdown(cosmo *instance);
const char *cosmo_current_profile(cosmo *instance); const char *cosmo_current_profile(cosmo *instance);

View File

@@ -2,7 +2,7 @@
#include "cosmopolite.h" #include "cosmopolite.h"
void on_message(const json_t *message) { void on_message(const json_t *message, void *passthrough) {
printf("new message: %lld\n", json_integer_value(json_object_get(message, "id"))); printf("new message: %lld\n", json_integer_value(json_object_get(message, "id")));
} }
@@ -14,7 +14,7 @@ int main(int argc, char *argv[]) {
.message = on_message .message = on_message
}; };
cosmo *instance = cosmo_create("https://playground.cosmopolite.org/cosmopolite", client_id, &callbacks); cosmo *instance = cosmo_create("https://playground.cosmopolite.org/cosmopolite", client_id, &callbacks, NULL);
json_t *subject = cosmo_subject("foobar", NULL, NULL); json_t *subject = cosmo_subject("foobar", NULL, NULL);
cosmo_subscribe(instance, subject, -1, 0); cosmo_subscribe(instance, subject, -1, 0);
json_decref(subject); json_decref(subject);