| /////////////////////////////////////////////////////////////////////////////// |
| // // |
| // Copyright (c) 2000-2019 Ericsson Telecom AB // |
| // // |
| // All rights reserved. This program and the accompanying materials // |
| // are made available under the terms of the Eclipse Public License v2.0 // |
| // which accompanies this distribution, and is available at // |
| // https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html // |
| /////////////////////////////////////////////////////////////////////////////// |
| |
| /////////////////////////////////////////////////////////// |
| // Module: EPTF_CLL_Rendezvous_Definitions |
| // |
| // Purpose: |
| // This module contains definitions of EPTF_CLL_Rendezvous feature. |
| // |
| // Module depends on: |
| // <EPTF_CLL_Base_Definitions> |
| // <EPTF_CLL_Common_Definitions> |
| // <EPTF_CLL_Semaphore_Definitions> |
| // <EPTF_CLL_Logging_Definitions> |
| // <EPTF_CLL_FBQ_Definitions> |
| // <EPTF_CLL_HashMap_Definitions> |
| // |
| // Current Owner: |
| // Bence Molnar (EBENMOL) |
| // |
| // Last Review Date: |
| // 2009-06-08 |
| // |
| // Detailed Comments: |
| // - |
| // |
| /////////////////////////////////////////////////////////// |
| |
| module EPTF_CLL_Rendezvous_Definitions |
| { |
| |
| import from EPTF_CLL_Base_Definitions all; |
| import from EPTF_CLL_Common_Definitions all; |
| |
| import from EPTF_CLL_Semaphore_Definitions all; |
| import from EPTF_CLL_Logging_Definitions all; |
| import from EPTF_CLL_FBQ_Definitions all; |
| import from EPTF_CLL_HashMap_Definitions all; |
| |
| |
| modulepar charstring tsp_EPTF_Rendezvous_loggingComponentMask := "EPTF_Rendezvous"; |
| modulepar charstring tsp_EPTF_RendezvousClient_loggingComponentMask := "EPTF_RendezvousClient"; |
| |
| /////////////////////////////////////////////////////////// |
| // Template: t_EPTF_Rendezvous_WaitForATrigger |
| // |
| // Purpose: |
| // An <EPTF_Rendezvous_Msg> type template. |
| // This is a WaitForATrigger request message. |
| // |
| // |
| ////////////////////////////////////////////////////////// |
| |
| template EPTF_Rendezvous_Msg t_EPTF_Rendezvous_WaitForATrigger:={ |
| Rendezvous_Client_Req:={ |
| rendezvousType:=WaitForATrigger, |
| semaphoreID:=?, |
| rendezvousID:=?, |
| rendezvousParam:=*, |
| extendedRendezvousID := * |
| } |
| } |
| |
| /////////////////////////////////////////////////////////// |
| // Template: t_EPTF_Rendezvous_WaitForNTrigger |
| // |
| // Purpose: |
| // An <EPTF_Rendezvous_Msg> type template. |
| // This is a WaitForNTrigger request message. |
| // |
| // |
| ////////////////////////////////////////////////////////// |
| |
| template EPTF_Rendezvous_Msg t_EPTF_Rendezvous_WaitForNTrigger:={ |
| Rendezvous_Client_Req:={ |
| rendezvousType:=WaitForNTrigger, |
| semaphoreID:=?, |
| rendezvousID:=?, |
| rendezvousParam:=*, |
| extendedRendezvousID := * |
| } |
| } |
| |
| template EPTF_Rendezvous_Msg t_EPTF_Rendezvous_StateTrigger:={ |
| Rendezvous_Client_Req:={ |
| rendezvousType:=StateTrigger, |
| semaphoreID:=?, |
| rendezvousID:=?, |
| rendezvousParam:=?, |
| extendedRendezvousID := ? |
| } |
| } |
| |
| |
| /////////////////////////////////////////////////////////// |
| // Template: t_EPTF_Rendezvous_WaitForATrigger_Resp |
| // |
| // Purpose: |
| // An <EPTF_Rendezvous_Msg> type template. |
| // This is a WaitForATrigger response message. |
| // |
| // |
| ////////////////////////////////////////////////////////// |
| |
| template EPTF_Rendezvous_Msg t_EPTF_Rendezvous_WaitForATrigger_Resp:={ |
| Rendezvous_Client_Resp:={ |
| rendezvousType:=WaitForATrigger, |
| semaphoreID:=?, |
| rendezvousID:=?, |
| rendezvousParam:=*, |
| extendedRendezvousID := * |
| } |
| } |
| |
| /////////////////////////////////////////////////////////// |
| // Template: t_EPTF_Rendezvous_WaitForNTrigger_Resp |
| // |
| // Purpose: |
| // An <EPTF_Rendezvous_Msg> type template. |
| // This is a WaitForNTrigger response message. |
| // |
| // |
| ////////////////////////////////////////////////////////// |
| |
| template EPTF_Rendezvous_Msg t_EPTF_Rendezvous_WaitForNTrigger_Resp:={ |
| Rendezvous_Client_Resp:={ |
| rendezvousType:=WaitForNTrigger, |
| semaphoreID:=?, |
| rendezvousID:=?, |
| rendezvousParam:=*, |
| extendedRendezvousID := * |
| } |
| } |
| |
| template EPTF_Rendezvous_Msg t_EPTF_Rendezvous_StateTrigger_Resp :={ |
| Rendezvous_Client_Resp:={ |
| rendezvousType:=StateTrigger, |
| semaphoreID:=-1, |
| rendezvousID:=?, |
| rendezvousParam:=?, |
| extendedRendezvousID := ? |
| } |
| } |
| |
| /////////////////////////////////////////////////////////// |
| // Type: EPTF_Rendezvous_WaitForNTriggerClients |
| // |
| // Purpose: |
| // Record for storing WaitForNTrigger type clients |
| // |
| // Elements: |
| // maxClients - *integer* - the maximum number of clients |
| // registeredClients - *integer* - the clients already registered for the rendezvous |
| // clientIDs - <EPTF_IntegerList> - the IDs of the registered clients |
| // semaphoreIDs - <EPTF_IntegerList> - the semaphore IDs of the registered clients |
| // |
| // Detailed Comments: |
| // |
| ////////////////////////////////////////////////////////// |
| |
| type record EPTF_Rendezvous_WaitForNTriggerClients |
| { |
| integer maxClients, |
| integer registeredClients, |
| EPTF_IntegerList clientIDs, |
| EPTF_IntegerList semaphoreIDs |
| } |
| |
| type record EPTF_Rendezvous_StateTriggerClients{ |
| integer fired, |
| integer registeredClients, |
| EPTF_IntegerList clientIDs, |
| EPTF_IntegerList actionIDs, |
| EPTF_IntegerList paramList |
| } |
| |
| /////////////////////////////////////////////////////////// |
| // Type: EPTF_Rendezvous_WaitForNTriggerClientsList |
| // |
| // Purpose: |
| // A list for storing WaitForNTrigger type clients |
| /////////////////////////////////////////////////////////// |
| |
| type record of EPTF_Rendezvous_WaitForNTriggerClients EPTF_Rendezvous_WaitForNTriggerClientsList |
| type record of EPTF_Rendezvous_StateTriggerClients EPTF_Rendezvous_StateTriggerClientsList |
| |
| /////////////////////////////////////////////////////////// |
| // Type: Rendezvous_Client_Req_Type |
| // |
| // Purpose: |
| // Request type message |
| // |
| // Elements: |
| // rendezvousType - <EPTF_Rendezvous_types> - the type of rendezvous |
| // semaphoreID - *integer* - the ID of the locking semaphore |
| // rendezvousID - *integer* - the ID of the rendezvous type |
| // rendezvousParam - <EPTF_IntegerList> - rendezvous type parameters |
| // extendedRendezvousID - *charstring* - charstring ID of the rendezvous type |
| // |
| // Detailed Comments: |
| // |
| ////////////////////////////////////////////////////////// |
| |
| type record Rendezvous_Client_Req_Type |
| { |
| EPTF_Rendezvous_types rendezvousType, |
| integer semaphoreID, |
| integer rendezvousID, |
| EPTF_IntegerList rendezvousParam optional, |
| charstring extendedRendezvousID optional |
| } |
| |
| /////////////////////////////////////////////////////////// |
| // Type: Rendezvous_Client_Resp_Type |
| // |
| // Purpose: |
| // Response type message |
| // |
| // Elements: |
| // rendezvousType - <EPTF_Rendezvous_types> - the type of rendezvous |
| // semaphoreID - *integer* - the ID of the locking semaphore |
| // rendezvousID - *integer* - the ID of the rendezvous type |
| // rendezvousParam - <EPTF_IntegerList> - rendezvous type parameters |
| // extendedRendezvousID - *charstring* - charstring ID of the rendezvous type |
| // |
| // Detailed Comments: |
| // |
| ////////////////////////////////////////////////////////// |
| |
| type record Rendezvous_Client_Resp_Type |
| { |
| EPTF_Rendezvous_types rendezvousType, |
| integer semaphoreID, |
| integer rendezvousID, |
| EPTF_IntegerList rendezvousParam optional, |
| charstring extendedRendezvousID optional |
| } |
| |
| /////////////////////////////////////////////////////////// |
| // Type: EPTF_Rendezvous_Msg |
| // |
| // Purpose: |
| // Rendezvous message type what can be sent on <EPTF_RendezvousPort_PT> |
| // |
| // Elements: |
| // Rendezvous_Client_Req - <Rendezvous_Client_Req_Type> - request type message. |
| // Rendezvous_Client_Resp - <Rendezvous_Client_Resp_Type> - response type message. |
| // |
| // Detailed Comments: |
| // There are two types of messages Request type and Response type. Request can be sent by rendezvous clients. |
| // After receiving the Request, Rendezvous servers send Responses back to the clients. |
| // Rendezvous Messages can be sent on <EPTF_RendezvousPort_PT>. |
| // |
| /////////////////////////////////////////////////////////// |
| |
| type union EPTF_Rendezvous_Msg |
| { |
| Rendezvous_Client_Req_Type Rendezvous_Client_Req, |
| Rendezvous_Client_Resp_Type Rendezvous_Client_Resp |
| } |
| |
| /////////////////////////////////////////////////////////// |
| // Type: EPTF_RendezvousPort_PT |
| // |
| // Purpose: |
| // Internal message port type for exchanging configuration messages. |
| // |
| // Elements: |
| // - |
| // |
| // Detailed Comments: |
| // Can bothway send messages type <EPTF_Rendezvous_Msg>. |
| /////////////////////////////////////////////////////////// |
| |
| type port EPTF_RendezvousPort_PT message { |
| inout EPTF_Rendezvous_Msg; |
| } with {extension "internal"} |
| |
| /////////////////////////////////////////////////////////// |
| // Type: EPTF_Rendezvous_types |
| // |
| // Purpose: |
| // Enumerated type for chosing rendezvous types. |
| // |
| // Elements: |
| // WaitForATrigger - WaitForATrigger type rendezvous for 2 clients |
| // WaitForNTrigger - WaitForNTrigger type rendezvous for n clients |
| // |
| // Detailed Comments: |
| // Enumerated type for chosing possible rendezvous types. |
| /////////////////////////////////////////////////////////// |
| |
| type enumerated EPTF_Rendezvous_types { |
| WaitForATrigger(0), |
| WaitForNTrigger(1), |
| StateTrigger (2) |
| } |
| |
| type function ft_EPTF_Rendezvous_NotifyAction(in charstring rendezvousID, in integer rendezvousID_int) runs on self; |
| type record of ft_EPTF_Rendezvous_NotifyAction EPTF_Rendezvous_ActionList; |
| |
| /////////////////////////////////////////////////////////// |
| // Type: EPTF_Rendezvous_CT |
| // |
| // Purpose: |
| // Rendezvous Server component. |
| // |
| // Elements: |
| // v_EPTF_RendezvousServer_def - *default* - default altstep in RendezvousServer component |
| // v_EPTF_RendezvousServer_initialized - *boolean* - if the server is initialized |
| // vg_EPTF_Rendezvous_Wait4TriggerLookupTable - *charstring* - the name of the lookup table for WaitForATrigger type rendezvous. |
| // vg_EPTF_Rendezvous_Wait4TriggerLookupTableID - *integer* - the ID of the lookup table for WaitForATrigger type rendezvous. |
| // vg_EPTF_Rendezvous_Wait4NTriggerLookupTable - *charstring* - the name of the lookup table for WaitForNTrigger type rendezvous. |
| // vg_EPTF_Rendezvous_Wait4NTriggerLookupTableID - *integer* - the ID of the lookup table for WaitForNTrigger type rendezvous. |
| // vg_EPTF_Rendezvous_freeBusyQueue - <EPTF_FreeBusyQueue> - A FreeBusyQueue, storing client list IDs for WaitForNTrigger type rendezvous. |
| // vg_WaitForNTriggerClients - <EPTF_Rendezvous_WaitForNTriggerClientsList> - List, storing clientIDs for WaitForNTrigger type rendezvous. |
| // |
| // Detailed Comments: |
| // This is the Rendezvous Server component. The rendezvous server supports a set of rendezvous services with |
| // predefined types. Supported rendezvous types are "Wait for a trigger", "Wait for N trigger" rendezvous. |
| // |
| /////////////////////////////////////////////////////////// |
| |
| type component EPTF_Rendezvous_CT extends EPTF_Base_CT, EPTF_Logging_CT, EPTF_HashMap_CT, EPTF_FBQ_CT { |
| private port EPTF_RendezvousPort_PT EPTF_RendezvousServer_Port_CP; |
| |
| private var default v_EPTF_RendezvousServer_def := null; |
| private var boolean v_EPTF_RendezvousServer_initialized:=false; |
| private var charstring vg_EPTF_Rendezvous_Wait4TriggerLookupTable; |
| private var integer vg_EPTF_Rendezvous_Wait4TriggerLookupTableID; |
| private var charstring vg_EPTF_Rendezvous_Wait4NTriggerLookupTable; |
| private var integer vg_EPTF_Rendezvous_Wait4NTriggerLookupTableID; |
| private var charstring vg_EPTF_Rendezvous_StateTriggerLookupTable; |
| private var integer vg_EPTF_Rendezvous_StateTriggerLookupTableID; |
| private var EPTF_FreeBusyQueue vg_EPTF_Rendezvous_freeBusyQueue; |
| private var EPTF_FreeBusyQueue vg_EPTF_Rendezvous_StateTriggerQueue; |
| private var EPTF_Rendezvous_WaitForNTriggerClientsList vg_WaitForNTriggerClients; |
| private var EPTF_Rendezvous_StateTriggerClientsList vg_StateTriggerClients; |
| |
| // logging |
| private var integer v_Rendezvous_loggingMaskId := c_EPTF_Logging_invalidMaskId; |
| } |
| |
| /////////////////////////////////////////////////////////// |
| // Type: EPTF_RendezvousClient_CT |
| // |
| // Purpose: |
| // Rendezvous Client component. |
| // |
| // Elements: |
| // v_EPTF_RendezvousClient_def - *default* - the default receive altstep |
| // v_EPTF_RendezvousClient_initialized - *boolean* - if the server is initialized |
| // v_EPTF_RendezvousClient_Server - <EPTF_Rendezvous_CT> - the rendezvous server component |
| // |
| // Detailed Comments: |
| // This is the Rendezvous Client component. The rendezvous client sends the rendezvous requests and |
| // wait for the response. |
| // |
| /////////////////////////////////////////////////////////// |
| |
| type component EPTF_RendezvousClient_CT extends EPTF_Base_CT, EPTF_Semaphore_CT, EPTF_Logging_CT { |
| private port EPTF_RendezvousPort_PT EPTF_RendezvousClient_Port_CP; |
| |
| private var default v_EPTF_RendezvousClient_def:=null |
| private var boolean v_EPTF_RendezvousClient_initialized := false; |
| private var EPTF_Rendezvous_CT v_EPTF_RendezvousClient_Server; |
| |
| private var EPTF_FreeBusyQueue v_EPTF_RendezvousClient_ActionQueue; |
| private var EPTF_Rendezvous_ActionList v_EPTF_RendezvousClient_Actions := {}; |
| // logging |
| private var integer v_RendezvousClient_loggingMaskId := c_EPTF_Logging_invalidMaskId; |
| } |
| |
| const integer c_StateTrigger_OPERATIONIDX := 0; |
| const integer c_StateTrigger_SUBSCRIBE := 0; |
| const integer c_StateTrigger_NEWSTATE := 1; |
| const integer c_StateTrigger_NOTIFY := 2; |
| const integer c_StateTrigger_UNSUBS := 3; |
| |
| const integer c_StateTrigger_ACTIONIDX := 1; |
| |
| const integer c_StateTrigger_PARAMIDX := 2; |
| const integer c_StateTrigger_NOPARAM := 0; |
| const integer c_StateTrigger_PERMANENTSUBS := 1; |
| |
| const EPTF_IntegerList c_StateTrigger_InitinalParams := {-1,-1,0}; |
| |
| /////////////////////////////////////////////////////////// |
| // Constant: c_EPTF_Rendezvous_loggingEventClasses |
| // |
| // Purpose: |
| // list of logging event class names used on the Rendezvous |
| // |
| // Detailed Comments: |
| // <EPTF_Logging_EventClassPrefixList> { "Warning", "Debug" } |
| /////////////////////////////////////////////////////////// |
| const EPTF_Logging_EventClassPrefixList c_EPTF_Rendezvous_loggingEventClasses := { "Warning", "Debug" }; |
| |
| /////////////////////////////////////////////////////////// |
| // Constant: c_EPTF_Rendezvous_loggingClassIdx_Warning |
| // |
| // Purpose: |
| // logging class index for Error |
| // |
| // Detailed Comments: |
| // *0* |
| /////////////////////////////////////////////////////////// |
| const integer c_EPTF_Rendezvous_loggingClassIdx_Warning := 0; |
| /////////////////////////////////////////////////////////// |
| // Constant: c_EPTF_Rendezvous_loggingClassIdx_Debug |
| // |
| // Purpose: |
| // logging class index for Error |
| // |
| // Detailed Comments: |
| // *1* |
| /////////////////////////////////////////////////////////// |
| const integer c_EPTF_Rendezvous_loggingClassIdx_Debug := 1; |
| |
| } // end of module |