[Ace-users] [ace-users] problems linking streams

Wasilios Goutas wasili at goutas.de
Wed Oct 17 14:55:06 CDT 2007


    ACE VERSION: 5.6

    HOST MACHINE and OPERATING SYSTEM:
        Windows XP

    COMPILER NAME AND VERSION (AND PATCHLEVEL):
       VC 8

    THE $ACE_ROOT/ace/config.h FILE
        #include "ace/config-win32.h"

    AREA/CLASS/EXAMPLE AFFECTED:
       ACE_Stream::link()

     SYNOPSIS:
       messages passed into a linked stream does not get processed by 
its modules      

    DESCRIPTION:
       I wrote a module containing a file reading and a file writing 
task and another wich acts as echo module by passing the messages back 
to its sibling down the stream.
       This works as long as these two modules are part of the same 
ACE_Stream instance, but when I split this modules to two streams and 
link them together, the messages of the first are not passed to the 
second module.



int ACE_TMAIN ( int argc, ACE_TCHAR *argv[] )
{
  ACE_TRACE( ACE_TEXT("ACE_TMAIN\n") );

  ACE_Stream<ACE_MT_SYNCH> *fileIOStream = new ACE_Stream<ACE_MT_SYNCH>();
  IO_Posix_InOut_Module    *inout_module = new 
IO_Posix_InOut_Module(argv[0],
    
"--io_posix_out_task_file=D:/Projects/privat/WeatherBox/libs/io/posix/streams/tests/io/io_posix_stream_test.out 
"
    
"--io_posix_in_task_file=D:/Projects/privat/WeatherBox/libs/io/posix/tasks/tests/in/io.posix.in.task.test.txt");
  ModuleBridge_Module      *module_bridge = new ModuleBridge_Module();

  ACE_Stream<ACE_MT_SYNCH> *echoStream   = new ACE_Stream<ACE_MT_SYNCH>();
  echoStream->push(module_bridge);
  fileIOStream->link(*echoStream);
  fileIOStream->push(inout_module);

/*
  fileIOStream->push(module_bridge);
  fileIOStream->push(inout_module);
*/
 
  fileIOStream->wait();
  return 0;
}


    REPEAT BY:

I debuged the application and find out, that some default modules 
containing ACE_Stream_Head and ACE_Stream_Tail tasks are created and 
pushed into the streams and
my message is processed by the ACE_Stream_Tail instance.
I tryied to replace the tail module with my one, but this seems not to 
work, because my messages are still processed by an ACE_Stream_Tail 
instance.

int ACE_TMAIN ( int argc, ACE_TCHAR *argv[] )
{
  ACE_TRACE( ACE_TEXT("ACE_TMAIN\n") );

  ACE_Stream<ACE_MT_SYNCH> *fileIOStream = new ACE_Stream<ACE_MT_SYNCH>();
  IO_Posix_InOut_Module    *inout_module = new 
IO_Posix_InOut_Module(argv[0],
    
"--io_posix_out_task_file=D:/Projects/privat/WeatherBox/libs/io/posix/streams/tests/io/io_posix_stream_test.out 
"
    
"--io_posix_in_task_file=D:/Projects/privat/WeatherBox/libs/io/posix/tasks/tests/in/io.posix.in.task.test.txt");
  ModuleBridge_Module      *module_bridge = new ModuleBridge_Module();

  ACE_Stream<ACE_MT_SYNCH> *echoStream   = new ACE_Stream<ACE_MT_SYNCH>();
 
  echoStream->replace(echoStream->tail()->name(), module_bridge);
  fileIOStream->link(*echoStream);
  fileIOStream->push(inout_module);

/*
  fileIOStream->push(module_bridge);
  fileIOStream->push(inout_module);
*/
 
  fileIOStream->wait();
  return 0;
}



Is it possible to get messages passed across linked streams?

bye
Wasili









More information about the Ace-users mailing list