blob: a3acbe3fa8ef19bfb5751ef2ee221644550ed763 [file] [log] [blame]
// Copyright (c) 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <stdio.h>
#include "base/basictypes.h"
#include "mojo/public/system/core.h"
#include "mojo/system/core_impl.h"
#if defined(OS_WIN)
#if !defined(CDECL)
#define CDECL __cdecl
#endif
#define SAMPLE_APP_EXPORT __declspec(dllexport)
#else
#define CDECL
#define SAMPLE_APP_EXPORT __attribute__((visibility("default")))
#endif
char* ReadStringFromPipe(mojo::Handle pipe) {
uint32_t len = 0;
char* buf = NULL;
MojoResult result = mojo::ReadMessage(pipe, buf, &len, NULL, NULL,
MOJO_READ_MESSAGE_FLAG_NONE);
if (result == MOJO_RESULT_RESOURCE_EXHAUSTED) {
buf = new char[len];
result = mojo::ReadMessage(pipe, buf, &len, NULL, NULL,
MOJO_READ_MESSAGE_FLAG_NONE);
}
if (result < MOJO_RESULT_OK) {
// Failure..
if (buf)
delete[] buf;
return NULL;
}
return buf;
}
class SampleMessageWaiter {
public:
explicit SampleMessageWaiter(mojo::Handle pipe) : pipe_(pipe) {}
~SampleMessageWaiter() {}
void Read() {
char* string = ReadStringFromPipe(pipe_);
if (string) {
printf("Read string from pipe: %s\n", string);
delete[] string;
string = NULL;
}
}
void WaitAndRead() {
MojoResult result = mojo::Wait(pipe_, MOJO_WAIT_FLAG_READABLE, 100);
if (result < MOJO_RESULT_OK) {
// Failure...
}
Read();
}
private:
mojo::Handle pipe_;
DISALLOW_COPY_AND_ASSIGN(SampleMessageWaiter);
};
extern "C" SAMPLE_APP_EXPORT MojoResult CDECL MojoMain(
mojo::Handle pipe) {
SampleMessageWaiter(pipe).WaitAndRead();
return MOJO_RESULT_OK;
}