diff options
Diffstat (limited to 'cpp')
-rw-r--r-- | cpp/demo/IcePack/simple/app.xml | 42 | ||||
-rw-r--r-- | cpp/src/IceGrid/ServerI.cpp | 33 |
2 files changed, 46 insertions, 29 deletions
diff --git a/cpp/demo/IcePack/simple/app.xml b/cpp/demo/IcePack/simple/app.xml index 0beefda81b8..78ab68dc7cd 100644 --- a/cpp/demo/IcePack/simple/app.xml +++ b/cpp/demo/IcePack/simple/app.xml @@ -13,13 +13,30 @@ <application name="Simple"> + <variable name="icepatch.directory" value=""/> + <variable name="icepatch.proxy" value="IcePatch2/server:tcp -p 13000"/> + + <patch id="patch1" proxy="${icepatch.proxy}" destination="${icepatch.directory}"> + <directory>simple</directory> + <directory>hello/db</directory> + </patch> + + <patch id="patch2" proxy="${icepatch.proxy}" destination="/home/benoit/icepatch_data/destination"> + <directory>simple</directory> + <directory>hello</directory> + </patch> + + <replicated-adapter id="ReplicatedHelloAdapter"> + <object identity="hello" type="::Demo::Hello"/> + </replicated-adapter> + <server-template id="ServerTemplate"> <parameter name="name"/> - <server id="${name}" exe="./server"> - <adapter name="Hello" endpoints="tcp" register="true"> - <object identity="${server}-hello1" type="::Demo::Hello"/> - </adapter> - <property name="Identity" value="${server}-hello1"/> + <server id="${name}" exe="./simple/server" activation="on-demand"> + <use-patch id="patch1"/> + <use-patch id="patch2"/> + <adapter name="Hello" endpoints="tcp" register="true" id="ReplicatedHelloAdapter"/> + <property name="Identity" value="hello"/> </server> </server-template> @@ -37,6 +54,10 @@ <server-template id="IceBoxTemplate"> <parameter name="name"/> <icebox id="${name}" exe="icebox" interpreter="icebox" endpoints="default"> + <env>LD_LIBRARY_PATH=$${LD_LIBRARY_PATH}:./simple</env> + <env>PATH=./simple:$PATH:$TOTO</env> + <env>TEST=$LKLK:$USER</env> + <use-patch id="patch1"/> <service-instance template="HelloService" name="Hello"/> <service name="HelloService2" entry="HelloService:create"> <adapter name="Hello" endpoints="tcp"> @@ -50,15 +71,12 @@ <node name="node"> - <server-instance template="IceBoxTemplate" name="IceBox"/> - <server-instance template="ServerTemplate" name="Server"/> + <server-instance template="ServerTemplate" name="Server1"/> <server-instance template="ServerTemplate" name="Server2"/> + <server-instance template="ServerTemplate" name="Server3"/> + <server-instance template="ServerTemplate" name="Server4"/> - <server id="node-1" exe="icegridnode"> - <adapter name="IceGrid.Node" endpoints="default"/> - <property name="IceGrid.Node.Name" value="${server}"/> - <property name="IceGrid.Node.Data" value="db/${server}"/> - </server> + <server-instance template="IceBoxTemplate" name="IceBox1"/> </node> diff --git a/cpp/src/IceGrid/ServerI.cpp b/cpp/src/IceGrid/ServerI.cpp index 575212c5a91..ff57da37a09 100644 --- a/cpp/src/IceGrid/ServerI.cpp +++ b/cpp/src/IceGrid/ServerI.cpp @@ -79,24 +79,23 @@ struct EnvironmentEval : std::unary_function<string, string> string v = value.substr(assignment + 1); assert(v.size()); string::size_type beg = 0; + string::size_type end; #ifdef _WIN32 -// char buf[32767]; -// while((beg = v.find("%", beg)) != string::npos && beg < v.size() - 1) -// { -// end = v.find("%"); -// if(end == string::npos) -// { -// return v; -// } -// string variable = v.substr(beg + 2, end - beg - 2); -// int ret = GetEnvironmentVariable(variable.c_str(), buf, sizeof(buf)); -// string valstr = ret > 0 ? string(buf) : ""; -// v.replace(beg, end - beg + 1, valstr); -// beg += strlen(value); -// } - return value; + char buf[32767]; + while((beg = v.find("%", beg)) != string::npos && beg < v.size() - 1) + { + end = v.find("%", beg + 1); + if(end == string::npos) + { + break; + } + string variable = v.substr(beg + 1, end - beg - 1); + int ret = GetEnvironmentVariable(variable.c_str(), buf, sizeof(buf)); + string valstr = (ret > 0 && ret < sizeof(buf)) ? string(buf) : ""; + v.replace(beg, end - beg + 1, valstr); + beg += valstr.size(); + } #else - string::size_type end;
while((beg = v.find("$", beg)) != string::npos && beg < v.size() - 1) { string variable; @@ -105,7 +104,7 @@ struct EnvironmentEval : std::unary_function<string, string> end = v.find("}"); if(end == string::npos) { - return v; + break; } variable = v.substr(beg + 2, end - beg - 2); } |