| /* $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_mailboxint.h" | |
| #include "etch_mailboxmgr.h" | |
| #include "etch_simpletimer.h" | |
| #include "etchthread.h" | |
| #include "etch_queue.h" | |
| #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 | |
| typedef struct i_mailbox_manager 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 | |
| { | |
| unsigned int hashkey; | |
| unsigned short obj_type; | |
| unsigned short class_id; | |
| struct objmask* vtab; | |
| int (*destroy)(void*); | |
| void*(*clone) (void*); | |
| obj_gethashkey get_hashkey; | |
| struct objmask* parent; | |
| etchresult* result; | |
| unsigned int refcount; | |
| unsigned int length; | |
| unsigned char is_null; | |
| unsigned char is_copy; | |
| unsigned char is_static; | |
| unsigned char reserved; | |
| void* impl; | |
| 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; | |
| etchmutex* rwlock; /* global read write lock - not owned */ | |
| etchmutex* readlock; /* unused - lose it */ | |
| objmask* 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; | |
| typedef struct etch_plainmailbox etch_mailbox; | |
| etch_mailbox* new_mailbox | |
| ( 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 (etchmutex*, const char*); | |
| int etchmbox_release_readlockex (etchmutex*, const char*); | |
| #endif /* ETCHPLAINMBOX_H */ |