indexing description: "A message consumer." author: "Patrick Ruckstuhl " date: "$Date$" revision: "$Revision$" class MESSAGE_CONSUMER inherit WRAPPER_BASE create {SESSION} make feature -- Actions receive: MESSAGE is -- Receive a message. local l_msg: POINTER do l_msg := cpp_receive (item) if cpp_is_map_message (l_msg) then create {MAP_MESSAGE}Result.make (l_msg) elseif cpp_is_text_message (l_msg) then create {TEXT_MESSAGE}Result.make (l_msg) else create {MESSAGE}Result.make (l_msg) end end receive_timeout (a_timeout: INTEGER): MESSAGE is -- Receive a message wait for a_timeout ms at maximum, return Void on timeout. local l_msg: POINTER do l_msg := cpp_receive_timeout (item, a_timeout) if l_msg = l_msg.default_pointer then Result := Void elseif cpp_is_map_message (l_msg) then create {MAP_MESSAGE}Result.make (l_msg) elseif cpp_is_text_message (l_msg) then create {TEXT_MESSAGE}Result.make (l_msg) elseif cpp_is_bytes_message (l_msg) then create {BYTES_MESSAGE}Result.make (l_msg) else create {MESSAGE}Result.make (l_msg) end end close is -- Close the consumer. do cpp_close (item) end feature {NONE} -- C++ methods cpp_is_map_message (a_object: POINTER): BOOLEAN is -- Is a_object a map message? external "C++ inline use " alias "[ return dynamic_cast((cms::Message*)$a_object) != 0; ]" end cpp_is_text_message (a_object: POINTER): BOOLEAN is -- Is a_object a text message? external "C++ inline use " alias "[ return dynamic_cast((cms::Message*)$a_object) != 0; ]" end cpp_is_bytes_message (a_object: POINTER): BOOLEAN is -- Is a_object a bytes message? external "C++ inline use " alias "[ return dynamic_cast((cms::Message*)$a_object) != 0; ]" end cpp_receive (a_object: POINTER): POINTER is -- Receive a message. external "C++ blocking inline use " alias "[ try{ return ((cms::MessageConsumer*)$a_object)->receive(); }catch(cms::CMSException& e){ eraise((char*)(e.getStackTraceString().c_str()), EN_PROG); } ]" end cpp_receive_timeout (a_object: POINTER; a_timeout: INTEGER): POINTER is -- Receive a message in a certain timeout. external "C++ blocking inline use " alias "[ try{ return ((cms::MessageConsumer*)$a_object)->receive($a_timeout); }catch(cms::CMSException& e){ eraise((char*)(e.getStackTraceString().c_str()), EN_PROG); } ]" end cpp_close (a_object: POINTER) is -- Close consumer. external "C++ inline use " alias "[ try{ ((cms::MessageConsumer*)$a_object)->close(); }catch(cms::CMSException& e){ eraise((char*)(e.getStackTraceString().c_str()), EN_PROG); } ]" end cpp_delete (a_object: POINTER) is -- Delete cpp object. external "C++ inline use " alias "[ delete (cms::MessageConsumer*)$a_object; ]" end end