blob: be48833e12468ab645ce7c6473bce4c2e31192b6 [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.
*/
/*
* etch_plainmailbox.h
* standard mailbox using a fixed size queue
*/
#ifndef ETCHPLAINMBOX_H
#define ETCHPLAINMBOX_H
#include "etch_mailbox.h"
#include "etch_mailbox_manager.h"
#include "etch_simpletimer.h"
#include "etch_thread.h"
#include "etch_queue.h"
#ifdef __cplusplus
extern "C" {
#endif
#define MBOX_LIFETIME_UNTIL_CLOSE 0
#define MBOX_DEFMAXMESSAGES 8
#define ETCH_MAILBOX_RESULT_ALREADY_CLOSED 1
#define ETCH_MAILBOX_STATE_INITIAL 0
#define ETCH_MAILBOX_STATE_OPEN 2
#define ETCH_MAILBOX_STATE_CLOSED_DELIVERY 4
#define ETCH_MAILBOX_STATE_CLOSED_READ 6
#define ETCH_MAILBOX_STATE_SHUTDOWN 8
typedef etch_timer_callback etch_alarm_wakeup;
#if(0)
PLAINMAILBOX(MAILBOXMANAGER)
|- ALARMLISTENER
| etch_alarm_wakeup()
- MAILBOX
| etch_mailbox_message()
| etch_mailbox_read()
| etch_mailbox_read_withwait()
| etch_mailbox_close_delivery()
| etch_mailbox_close_read()
| etch_mailbox_register_notify()
| etch_mailbox_unregister_notify()
| etch_mailbox_is_empty()
| etch_mailbox_is_closed()
| etch_mailbox_is_full()
| etch_mailbox_get_message_id()
-
#endif
struct i_mailbox_manager;
/*
* etch_plainmailbox
* this object is instantiated, and is also a mask over any other mailbox
* class object which may be defined. etch_plainmailbox is therefore
* typedef'ed below as etch_mailbox.
*/
typedef struct etch_plainmailbox
{
etch_object object;
void* impl;
struct i_mailbox_manager* manager;
/* - - - - - - - - - - - - - - -
* notify interface
* - - - - - - - - - - - - - - -
*/
etch_mailbox_notify notify;
/* - - - - - - - - - - - - - - -
* alarm listener interface
* - - - - - - - - - - - - - - -
*/
etch_alarm_wakeup wakeup;
/* - - - - - - - - - - - - - - -
* i_mailbox interface
* - - - - - - - - - - - - - - -
*/
i_mailbox* imailbox;
etch_mailbox_message message;
etch_mailbox_read read;
etch_mailbox_read_withwait read_withwait;
etch_mailbox_close_delivery close_delivery;
etch_mailbox_close_read close_read;
etch_mailbox_register_notify register_notify;
etch_mailbox_unregister_notify unregister_notify;
etch_mailbox_is_empty is_empty;
etch_mailbox_is_closed is_closed;
etch_mailbox_is_full is_full;
etch_mailbox_get_message_id get_message_id;
/* - - - - - - - - - - - - - - -
* etch_mailbox instance data
* - - - - - - - - - - - - - - -
*/
int lifetime;
int max_messages;
int max_message_delay;
int64 message_id;
etch_queue* queue;
etch_timer* lifetimer;
etch_mutex* rwlock; /* global read write lock - not owned */
etch_mutex* readlock; /* unused - lose it */
etch_object* notify_state;
unsigned char is_alarm_set;
unsigned char mailbox_state;
unsigned char unused_a;
unsigned char unused_b;
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* derivations must include all the above and define data following
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
*/
} etch_plainmailbox;
etch_mailbox* new_mailbox
( struct i_mailbox_manager*,
const int64 message_id,
const int max_msgdelay,
const int lifetime,
const int max_messages
);
int etchmbox_contains_message(etch_mailbox*, etch_message*);
int etchmbox_get_readlock (etch_plainmailbox*, const char*);
int etchmbox_release_readlock (etch_plainmailbox*, const char*);
int etchmbox_get_readlockex (etch_mutex*, const char*);
int etchmbox_release_readlockex (etch_mutex*, const char*);
#ifdef __cplusplus
}
#endif
#endif /* ETCHPLAINMBOX_H */