Bruce Harold wrote:

> This sounds eminently sensible to me.  Otherwise its 
> TransportSender/Receiver in the same workbench (if that is possible).

It is... See the attached workbench (FME Professional, build 5024). It's 
almost like magic :) I do wonder how 'smooth' this would be in a big 
workbench with a lot of data running through it. I'll see if I have some 
time for benchmarking soon...
-- 
Hans van der Maarel
Red Geographics

Zevenbergsepoort 44b            www.redgeographics.com
4791 AE  Klundert               [EMAIL PROTECTED]
The Netherlands                 phone: +31-168-401035




For insights into what's up at Safe Software and what's on the development 
horizon, visit Safe's blog at spatial-etl.blogspot.com.

Love FME? Then open your diary to March 6-7, 2008 and write this... "Second 
Worldwide FME User Conference - Must Attend!" See 
http://www.safe.com/company/fmeuc2008/index.php for more details. 
Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/fme/

<*> Your email settings:
    Individual Email | Traditional

<*> To change settings online go to:
    http://groups.yahoo.com/group/fme/join
    (Yahoo! ID required)

<*> To change settings via email:
    mailto:[EMAIL PROTECTED] 
    mailto:[EMAIL PROTECTED]

<*> To unsubscribe from this group, send an email to:
    [EMAIL PROTECTED]

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/
 
#! <?xml version="1.0" encoding="iso-8859-1" ?>
#! <WORKSPACE
#    
#    
#    Commandline to run this workspace:
#    
#    
#    fme.exe tunnel.fmw
#    
#    
#! MAX_LOG_FEATURES="200"
#! SOURCE="NONE"
#! END_TCL=""
#! DESTINATION="NONE"
#! SHOW_BOOKMARKS="true"
#! GRID_VISIBLE="false"
#! GRID_HEIGHT="50"
#! SHOW_INFO_NODES="true"
#! BEGIN_PYTHON=""
#! BEGIN_TCL=""
#! VIEW_POSITION="0 0"
#! ZOOM_SCALE="100"
#! PASSWORD=""
#! VIEW_PAGE_BREAKS="false"
#! FME_CACHED_OBJECTS_HINT="7500"
#! SHOW_ANNOTATIONS="true"
#! LOG_MAX_RECORDED_FEATURES="200"
#! END_PYTHON=""
#! FME_REPROJECTION_ENGINE="FME"
#! FME_BUILD_NUM="5024"
#! GRID_SNAPTO="false"
#! GRID_WIDTH="50"
#! SOURCE_ROUTING_DIR=""
#! LOG_FILE=""
#! DESTINATION_ROUTING_DIR=""
#! WORKSPACE_VERSION="1"
#! TITLE=""
#! FME_USE_RICH_GEOMETRY="Classic"
#! IGNORE_READER_FAILURE="No"
#! ATTR_TYPE_ENCODING="SDF"
#! >
#! <DATASETS>
#! </DATASETS>
#! <DATA_TYPES>
#! </DATA_TYPES>
#! <GEOM_TYPES>
#! </GEOM_TYPES>
#! <FEATURE_TYPES>
#! </FEATURE_TYPES>
#! <GLOBAL_PARAMETERS>
#! </GLOBAL_PARAMETERS>
#! <COMMENTS>
#! <COMMENT
#! IDENTIFIER="6"
#! COMMENT_VALUE="Lots of other stuff goes here...|"
#! POSITION="1514 -745"
#! ORDER="7"
#! FOLLOW_ANCHOR="true"
#! INFO_NODE="false"
#! />
#! </COMMENTS>
#! <CONSTANTS>
#! </CONSTANTS>
#! <BOOKMARKS>
#! <BOOKMARK
#! IDENTIFIER="7"
#! NAME="The rest of the workbench"
#! DESCRIPTION=""
#! TOP_LEFT="1306 -327"
#! BOTTOM_RIGHT="2306 -1269"
#! STICKY="true"
#! COLOUR="0.584887,0.664205,0.640889"
#! />
#! </BOOKMARKS>
#! <TRANSFORMERS>
#! <TRANSFORMER
#! IDENTIFIER="0"
#! TYPE="2DGridCreator"
#! VERSION="1"
#! POSITION="187 -685"
#! ORDER="3"
#! PARMS_EDITED="true"
#! ENABLED="true"
#! >
#! <OUTPUT_FEAT NAME="CREATED"/>
#! <FEAT_COLLAPSED COLLAPSED="0"/>
#! <XFORM_ATTR ATTR_NAME="_row" IS_USER_CREATED="false" FEAT_INDEX="0"/>
#! <XFORM_ATTR ATTR_NAME="_column" IS_USER_CREATED="false" FEAT_INDEX="0"/>
#! <XFORM_PARM PARM_NAME="NUMROWS" PARM_VALUE="10"/>
#! <XFORM_PARM PARM_NAME="GRID_TYPE" PARM_VALUE="Polygons"/>
#! <XFORM_PARM PARM_NAME="COL_ATTR" PARM_VALUE="_column"/>
#! <XFORM_PARM PARM_NAME="XFORMER_NAME" PARM_VALUE="2DGridCreator"/>
#! <XFORM_PARM PARM_NAME="YINC" PARM_VALUE="10"/>
#! <XFORM_PARM PARM_NAME="LOWERLEFTX" PARM_VALUE="0"/>
#! <XFORM_PARM PARM_NAME="NUMCOLS" PARM_VALUE="10"/>
#! <XFORM_PARM PARM_NAME="XINC" PARM_VALUE="10"/>
#! <XFORM_PARM PARM_NAME="LOWERLEFTY" PARM_VALUE="0"/>
#! <XFORM_PARM PARM_NAME="ROW_ATTR" PARM_VALUE="_row"/>
#! </TRANSFORMER>
#! <TRANSFORMER
#! IDENTIFIER="1"
#! TYPE="TransporterSender"
#! VERSION="1"
#! POSITION="816 -686"
#! ORDER="4"
#! PARMS_EDITED="true"
#! ENABLED="true"
#! >
#! <XFORM_PARM PARM_NAME="MODE" PARM_VALUE="TCP/IP"/>
#! <XFORM_PARM PARM_NAME="FEATURES_PER_FILE" PARM_VALUE="&lt;Unused&gt;"/>
#! <XFORM_PARM PARM_NAME="FILE_NAME" PARM_VALUE="&lt;Unused&gt;"/>
#! <XFORM_PARM PARM_NAME="XFORMER_NAME" PARM_VALUE="TransporterSender"/>
#! <XFORM_PARM PARM_NAME="PORT" PARM_VALUE="8586"/>
#! <XFORM_PARM PARM_NAME="INITIATION_SEQUENCE" PARM_VALUE="ESTABLISH"/>
#! <XFORM_PARM PARM_NAME="HOST" PARM_VALUE="localhost"/>
#! </TRANSFORMER>
#! <TRANSFORMER
#! IDENTIFIER="3"
#! TYPE="TransporterReceiver"
#! VERSION="1"
#! POSITION="2388 -750"
#! ORDER="5"
#! PARMS_EDITED="true"
#! ENABLED="true"
#! >
#! <OUTPUT_FEAT NAME="TRANSPORTED"/>
#! <FEAT_COLLAPSED COLLAPSED="0"/>
#! <XFORM_PARM PARM_NAME="MODE" PARM_VALUE="TCP/IP"/>
#! <XFORM_PARM PARM_NAME="XFORMER_NAME" PARM_VALUE="TransporterReceiver"/>
#! <XFORM_PARM PARM_NAME="PORT" PARM_VALUE="8586"/>
#! <XFORM_PARM PARM_NAME="INITIATION_SEQUENCE" PARM_VALUE="CONNECT"/>
#! <XFORM_PARM PARM_NAME="HOST" PARM_VALUE="localhost"/>
#! </TRANSFORMER>
#! <TRANSFORMER
#! IDENTIFIER="4"
#! TYPE="Visualizer"
#! VERSION="1"
#! POSITION="3236 -731"
#! ORDER="6"
#! PARMS_EDITED="false"
#! ENABLED="true"
#! >
#! <XFORM_PARM PARM_NAME="TACKATTRS" PARM_VALUE=""/>
#! <XFORM_PARM PARM_NAME="AREA_COLOR" PARM_VALUE=""/>
#! <XFORM_PARM PARM_NAME="XFORMER_NAME" 
PARM_VALUE="TransporterReceiver_TRANSPORTED"/>
#! <XFORM_PARM PARM_NAME="PEN_COLOR" PARM_VALUE=""/>
#! </TRANSFORMER>
#! </TRANSFORMERS>
#! <FEAT_LINKS>
#! <FEAT_LINK
#! IDENTIFIER="2"
#! SOURCE_NODE="0"
#! TARGET_NODE="1"
#! SOURCE_PORT_DESC="fo 0"
#! TARGET_PORT_DESC="fi 0"
#! ENABLED="true"
#! EXTRA_POINTS=""
#! />
#! <FEAT_LINK
#! IDENTIFIER="5"
#! SOURCE_NODE="3"
#! TARGET_NODE="4"
#! SOURCE_PORT_DESC="fo 0"
#! TARGET_PORT_DESC="fi 0"
#! ENABLED="true"
#! EXTRA_POINTS=""
#! />
#! </FEAT_LINKS>
#! <ATTR_LINKS>
#! </ATTR_LINKS>
#! <SUBDOCUMENTS>
#! </SUBDOCUMENTS>
#! <LOOKUP_TABLES>
#! </LOOKUP_TABLES>
#! </WORKSPACE>
#! 
#! START_HEADER
#! START_WB_HEADER
READER_TYPE NULL
READER_KEYWORD NULL_SOURCE
NULL_SOURCE_DATASET null
WRITER_TYPE NULL
WRITER_KEYWORD NULL_DEST
NULL_DEST_DATASET null
#! END_WB_HEADER
#! END_HEADER

LOG_FILENAME "$(FME_MF_DIR)tunnel.log"
LOG_APPEND NO
LOG_MAX_FEATURES 200
LOG_MAX_RECORDED_FEATURES 200
FME_CACHED_OBJECTS_HINT 7500
FME_REPROJECTION_ENGINE FME
FME_USE_RICH_GEOMETRY no
# -------------------------------------------------------------------------

MULTI_READER_CONTINUE_ON_READER_FAILURE No

# -------------------------------------------------------------------------

MACRO WORKSPACE_NAME tunnel
DEFAULT_MACRO WB_CURRENT_CONTEXT
# -------------------------------------------------------------------------

FACTORY_DEF * CreationFactory    FACTORY_NAME 2DGridCreator    2D_GEOMETRY 0 0  
  NUMBER_TO_CREATE @Evaluate("10 * 10")    OUTPUT FEATURE_TYPE __TO_TESTER__    
    _column @Evaluate(int("(&creation_instance+0) / 10"))        _row 
@Evaluate("(&creation_instance+0) % 10")        xOffset @Evaluate(&_column * 
10)        yOffset @Evaluate(&_row * 10)        @Offset(&xOffset,&yOffset)      
  @RemoveAttributes(xOffset,yOffset,creation_instance)
FACTORY_DEF * TestFactory    FACTORY_NAME 2DGridCreator_Tester    INPUT 
FEATURE_TYPE __TO_TESTER__    TEST Polygons == "Points"    OUTPUT PASSED 
FEATURE_TYPE __TO_CLEANER__    OUTPUT FAILED FEATURE_TYPE __TO_CLEANER__       
xPt @XValue()       yPt @YValue()       @XValue(&xPt,RESET)       @YValue(&yPt) 
      @XValue(&xPt)       @YValue(@Evaluate(&yPt+10))       
@XValue(@Evaluate(&xPt+10))       @YValue(@Evaluate(&yPt+10))       
@XValue(@Evaluate(&xPt+10))       @YValue(&yPt)       @XValue(&xPt)       
@YValue(&yPt)       @GeometryType(fme_polygon)       @RemoveAttributes(xPt,yPt)
FACTORY_DEF * TeeFactory    FACTORY_NAME 2DGridCreator_Cleaner    INPUT 
FEATURE_TYPE __TO_CLEANER__    OUTPUT FEATURE_TYPE 2DGridCreator_CREATED

# -------------------------------------------------------------------------
#
FACTORY_DEF * TransporterFactory    FACTORY_NAME TransporterSender    INPUT  
FEATURE_TYPE 2DGridCreator_CREATED    MODE TCP/IP    HOST localhost    
INITIATION_SEQUENCE ESTABLISH    DIRECTION SEND    PORT 8586    FILE_NAME 
<Unused>    FEATURES_PER_FILE <Unused>

# -------------------------------------------------------------------------
#
FACTORY_DEF * TransporterFactory    FACTORY_NAME TransporterReceiver    MODE 
TCP/IP    HOST localhost    INITIATION_SEQUENCE CONNECT    DIRECTION RECEIVE    
PORT 8586    OUTPUT TRANSPORTED FEATURE_TYPE TransporterReceiver_TRANSPORTED

# -------------------------------------------------------------------------

# Set the directive to add all the meta-attributes to the features.
# We do this so users see all possible information in the viewed
# features.

READER_META_ATTRIBUTES fme_feature_type fme_dataset fme_basename
# First, set up the temporary directory that will be used for
# the recordings we will be viewing (these three lines do this)
# They assume that the WORKSPACE_NAME macro has already been set

DEFAULT_MACRO WORKSPACE_TEMP_DIR
INCLUDE [ if {[string length {$(WORKSPACE_TEMP_DIR)}] < 2} {               if 
{[info exists env(TEMP)]}                  {set gVisualizerTemp $env(TEMP)}     
          else                  {set gVisualizerTemp c:} ;               regsub 
-all {[ ,]} {$(WORKSPACE_NAME)} {_} wsname;               set gVisualizerTemp 
$gVisualizerTemp\\${wsname}_[clock format [clock seconds] -format %H%M%S] ;     
          puts "MACRO WORKSPACE_TEMP_DIR $gVisualizerTemp";         } ;         
if { [string length {}] > 0 } {             set catter "" ;             set 
comma "" ;             foreach attr "" {                 set catter 
"$catter$comma&$attr" ;                 set comma ",_," ;             } ;       
      puts "MACRO CATMAC [EMAIL PROTECTED]($catter)" ;         }         else { 
            puts "MACRO CATMAC " ;         };         set safeName "[regsub 
-all {[^a-zA-Z0-9]} {TransporterReceiver_TRANSPORTED} _]_[expr round(rand() * 
1000000)]_[clock clicks]";         puts "MACRO SAFE_FFS_NAME $safeName";        
 ]
# Make the temporary directory that the FFS files will live in.
FACTORY_DEF * CreationFactory      FACTORY_NAME 
TransporterReceiver_TRANSPORTED_DirCreator      OUTPUT FEATURE_TYPE __nukeme__  
        @Tcl2("catch {file mkdir {$(WORKSPACE_TEMP_DIR)}}")
FACTORY_DEF * TeeFactory    FACTORY_NAME 
TransporterReceiver_TRANSPORTED_DirCreatorCleanerUpper    INPUT FEATURE_TYPE 
__nukeme__
# Now route all the features into the recorder, changing their
# feature type to the transformer name so that they view nicely

FACTORY_DEF * TeeFactory    FACTORY_NAME 
TransporterReceiver_TRANSPORTED_SetterUpper    INPUT  FEATURE_TYPE 
TransporterReceiver_TRANSPORTED    OUTPUT FEATURE_TYPE __viewme__
FACTORY_DEF * RecorderFactory    FACTORY_NAME 
TransporterReceiver_TRANSPORTED_Recorder    INPUT FEATURE_TYPE __viewme__ 
@FeatureType(TransporterReceiver_TRANSPORTED$(CATMAC))    FEATURE_FILE 
"$(WORKSPACE_TEMP_DIR)/$(SAFE_FFS_NAME).ffs"    MODE RECORD_PASS_THROUGH
FACTORY_DEF * CreationFactory      FACTORY_NAME 
TransporterReceiver_TRANSPORTED_Trigger      CREATE_AT_END      OUTPUT 
FEATURE_TYPE __nukeme__          @TCL("lappend gVisualizerFilesToView 
$(SAFE_FFS_NAME)")
FACTORY_DEF * TeeFactory    FACTORY_NAME 
TransporterReceiver_TRANSPORTED_CleanerUpper    INPUT FEATURE_TYPE __nukeme__

# -------------------------------------------------------------------------

FACTORY_DEF * TestFactory   FACTORY_NAME "Final Output Feature Type Router"   
INPUT FEATURE_TYPE *   TEST @Value(__wb_out_feat_type__) != ""   OUTPUT PASSED 
FEATURE_TYPE *     @FeatureType(@Value(__wb_out_feat_type__))
# -------------------------------------------------------------------------

DEFAULT_MACRO WORKSPACE_TEMP_DIR
INCLUDE [ if {{$(WORKSPACE_TEMP_DIR)} == {}} { puts {MACRO 
__WB_ENABLE_VISUALIZER__ no} } else { puts {MACRO __WB_ENABLE_VISUALIZER__ *} } 
]
FACTORY_DEF $(__WB_ENABLE_VISUALIZER__) CreationFactory   CREATE_AT_END   
OUTPUT FEATURE_TYPE __NUKEME__   @TCL("eval FME_Execute System \173fmeview 
/ownffs {$(WORKSPACE_TEMP_DIR)} $gVisualizerFilesToView & }")
FACTORY_DEF * TeeFactory   INPUT FEATURE_TYPE __NUKEME__

Reply via email to