// Copyright 2017-2018 The NATS Authors // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #include static void onMsg(natsConnection *nc, natsSubscription *sub, natsMsg *msg, void *closure) { printf("Received msg: %s - %.*s\n", natsMsg_GetSubject(msg), natsMsg_GetDataLength(msg), natsMsg_GetData(msg)); // Need to destroy the message! natsMsg_Destroy(msg); // Notify the main thread that we are done. *(bool *)(closure) = true; } int main(int argc, char **argv) { natsConnection *conn = NULL; natsSubscription *sub = NULL; natsStatus s; volatile bool done = false; printf("Listening on subject 'foo'\n"); // Creates a connection to the default NATS URL s = natsConnection_ConnectTo(&conn, NATS_DEFAULT_URL); if (s == NATS_OK) { // Creates an asynchronous subscription on subject "foo". // When a message is sent on subject "foo", the callback // onMsg() will be invoked by the client library. // You can pass a closure as the last argument. s = natsConnection_Subscribe(&sub, conn, "foo", onMsg, (void*) &done); } if (s == NATS_OK) { for (;!done;) { nats_Sleep(100); } } // Anything that is created need to be destroyed natsSubscription_Destroy(sub); natsConnection_Destroy(conn); // If there was an error, print a stack trace and exit if (s != NATS_OK) { nats_PrintLastErrorStack(stderr); exit(2); } return 0; }