blob: 074a4a3920a126576f26e59031805ded05bad32f [file] [log] [blame]
/* $Id$
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to you 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.
*/
#ifndef __ETCHPLAINMAILBOXMANAGER_H__
#define __ETCHPLAINMAILBOXMANAGER_H__
#include "capu/os/Mutex.h"
#include "common/EtchString.h"
#include "transport/EtchMailboxManager.h"
#include "support/EtchPlainMailbox.h"
#include "util/EtchURL.h"
#include "util/EtchResources.h"
#include "util/EtchIdGenerator.h"
class EtchRuntime;
class EtchPlainMailboxManager : public EtchMailboxManager {
public:
/**
* @param transport used to deliver messages to our peer.
* @param uri
* @param resources
*/
EtchPlainMailboxManager(EtchRuntime* runtime, EtchTransportMessage* transport, const EtchString& url, EtchResources* resources);
/**
* Destructure
*/
virtual ~EtchPlainMailboxManager();
/**
* @return the transport.
*/
EtchTransportMessage* getTransport();
/**
* @see EtchMailboxManager
*/
status_t redeliver(capu::SmartPointer<EtchWho> sender, capu::SmartPointer<EtchMessage> msg);
/**
* Adds a mailbox to the set of mailbox receiving responses
* to messages.
* @param mb
*/
status_t registerMailbox(capu::SmartPointer<EtchMailbox> mb);
/**
* @see EtchMailboxManager
*/
status_t unregisterMailbox(EtchLong mailboxId);
/**
* Returns the mailbox for the specified msgid. This is a testing api.
* @param msgid
* @return the mailbox for the specified msgid.
*/
status_t getMailbox(EtchLong msgid, capu::SmartPointer<EtchMailbox>& result);
////////////////////////////
// MessageHandler methods //
////////////////////////////
status_t sessionMessage(capu::SmartPointer<EtchWho> sender, capu::SmartPointer<EtchMessage> msg);
///////////////////////////
// MessageSource methods //
///////////////////////////
status_t transportCall(capu::SmartPointer<EtchWho> recipient, capu::SmartPointer<EtchMessage> msg, capu::SmartPointer<EtchMailbox>& result);
status_t transportMessage(capu::SmartPointer<EtchWho> recipient, capu::SmartPointer<EtchMessage> message);
///////////////////////////
// SourceHandler methods //
///////////////////////////
status_t sessionQuery(capu::SmartPointer<EtchObject> query, capu::SmartPointer<EtchObject> &result);
status_t sessionControl(capu::SmartPointer<EtchObject> control, capu::SmartPointer<EtchObject> value);
status_t sessionNotify(capu::SmartPointer<EtchObject> event);
////////////////////
// Source methods //
////////////////////
status_t transportQuery(capu::SmartPointer<EtchObject> query, capu::SmartPointer<EtchObject> *result);
status_t transportControl(capu::SmartPointer<EtchObject> control, capu::SmartPointer<EtchObject> value);
status_t transportNotify(capu::SmartPointer<EtchObject> event);
EtchSessionMessage* getSession();
void setSession(EtchSessionMessage* session);
capu::uint64_t count();
private:
EtchRuntime* mRuntime;
EtchSessionMessage* mSession;
EtchTransportMessage* mTransport;
capu::bool_t mUp;
EtchHashTable<EtchLong, capu::SmartPointer<EtchMailbox> > mMailboxes;
capu::Mutex mMutex;
EtchIdGenerator mIdGen;
};
#endif