The programs below contain the minimum code and supporting material. Their purpose is to verify that the user's build and run-time environments are set up correctly. They also give a basic introduction to the LBM API.
This source code example is provided by 29West for educational and evaluation purposes only.
This is a source code listing of a minimal source (sender) program. You may find it helpful to download the source code (most browsers let you right-click on the link and use the save link target function, or some variation).
/*file: minsrc.c - minimal source (sender) program.
*
* Copyright (c) 2005-2007 29West, Inc. Permission is granted to licensees to use
* or alter this software for any purpose, including commercial applications,
* according to the terms laid out in the Software License Agreement.
*/
#include <stdio.h>
#if defined(_MSC_VER)
/* Windows-only includes */
#include <winsock2.h>
#define SLEEP(s) Sleep((s)*1000)
#else
/* Unix-only includes */
#include <stdlib.h>
#include <unistd.h>
#define SLEEP(s) sleep(s)
#endif
#include <lbm.h>
main()
{
lbm_context_t *ctx; /* pointer to context object */
lbm_topic_t *topic; /* pointer to topic object */
lbm_src_t *src; /* pointer to source (sender) object */
int lbm_failed; /* return status of lbm functions */
#if defined(_MSC_VER)
/* windows-specific code */
WSADATA wsadata;
int wsStat = WSAStartup(MAKEWORD(2,2), &wsadata);
if (wsStat != 0) {printf("line %s: %d\n", __LINE__, wsStat); exit(1);}
#endif
lbm_failed = lbm_context_create(&ctx, NULL, NULL, NULL);
if (lbm_failed) {printf("line %s: %s\n", __LINE__, lbm_errmsg()); exit(1);}
lbm_failed = lbm_src_topic_alloc(&topic, ctx, "Greeting", NULL);
if (lbm_failed) {printf("line %s: %s\n", __LINE__, lbm_errmsg()); exit(1);}
lbm_failed = lbm_src_create(&src, ctx, topic, NULL, NULL, NULL);
if (lbm_failed) {printf("line %s: %s\n", __LINE__, lbm_errmsg()); exit(1);}
SLEEP(3);
lbm_failed = lbm_src_send(src, "Hello!", 6, LBM_MSG_FLUSH | LBM_SRC_BLOCK);
if (lbm_failed) {printf("line %s: %s\n", __LINE__, lbm_errmsg()); exit(1);}
SLEEP(2);
/* Finished all sending to this topic, delete the source object. */
lbm_src_delete(src);
/* Do not need to delete the topic object - LBM keeps track of topic
* objects and deletes them as-needed. */
/* Finished with all LBM functions, delete the context object. */
lbm_context_delete(ctx);
#if defined(_MSC_VER)
WSACleanup();
#endif
} /* main */






This is a source code listing of a minimal receiver program. You may find it helpful to download the source code (most browsers let you right-click on the link and use the save link target function, or some variation).
/*file: minrcv.c - minimal receiver program. * * Copyright (c) 2005-2007 29West, Inc. Permission is granted to licensees to use * or alter this software for any purpose, including commercial applications, * according to the terms laid out in the Software License Agreement. */ #include <stdio.h> #if defined(_MSC_VER) /* Windows-only includes */ #include <winsock2.h> #define SLEEP(s) Sleep((s)*1000) #else /* Unix-only includes */ #include <stdlib.h> #include <unistd.h> #define SLEEP(s) sleep(s) #endif #include <lbm.h> /* * A global variable is used to communicate from the receiver callback to * the main application thread. */ int msgs_rcvd = 0; int app_rcv_callback(lbm_rcv_t *rcv, lbm_msg_t *msg, void *clientd){ /* There are several different events that can cause the receiver callback * to be called. Decode the event that caused this. */ switch (msg->type) { case LBM_MSG_DATA: /* a received message */ printf("Received %d bytes on topic %s: '%.*s'\n",
msg->len, msg->topic_name, msg->len, msg->data); /* Tell main thread that we've received our message. */ ++ msgs_rcvd; break; default: /* unexpected receiver event */ printf("line %s: %d\n", __LINE__, msg->type); exit(1); } /* switch msg->type */ return 0; } /* app_rcv_callback */ main() { lbm_context_t *ctx; /* pointer to context object */ lbm_topic_t *topic; /* pointer to topic object */ lbm_rcv_t *rcv; /* pointer to receiver object */ int lbm_failed; /* return status of lbm functions */ #if defined(_MSC_VER) /* windows-specific code */ WSADATA wsadata; int wsStat = WSAStartup(MAKEWORD(2,2), &wsadata); if (wsStat != 0) {printf("line %s: %d\n", __LINE__, wsStat); exit(1);} #endif lbm_failed = lbm_context_create(&ctx, NULL, NULL, NULL);
if (lbm_failed) {printf("line %s: %s\n", __LINE__, lbm_errmsg()); exit(1);} lbm_failed = lbm_rcv_topic_lookup(&topic, ctx, "Greeting", NULL);
if (lbm_failed) {printf("line %s: %s\n", __LINE__, lbm_errmsg()); exit(1);} lbm_failed = lbm_rcv_create(&rcv, ctx, topic, app_rcv_callback, NULL, NULL);
if (lbm_failed) {printf("line %s: %s\n", __LINE__, lbm_errmsg()); exit(1);} while (msgs_rcvd == 0) SLEEP(1); /* Finished all receiving from this topic, delete the receiver object. */ lbm_rcv_delete(rcv); /* Do not need to delete the topic object - LBM keeps track of topic * objects and deletes them as-needed. */ /* Finished with all LBM functions, delete the context object. */ lbm_context_delete(ctx); #if defined(_MSC_VER) WSACleanup(); #endif } /* main */





Copyright 2004 - 2007 29West, Inc. -- 29West Confidential