unsigned/size_t/shared ptrs
This commit is contained in:
174
.cproject
174
.cproject
@@ -3,11 +3,11 @@
|
|||||||
|
|
||||||
<cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
|
<cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
|
||||||
<storageModule moduleId="org.eclipse.cdt.core.settings">
|
<storageModule moduleId="org.eclipse.cdt.core.settings">
|
||||||
<cconfiguration id="cdt.managedbuild.toolchain.gnu.base.1356606915">
|
<cconfiguration id="0.1711304068">
|
||||||
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.toolchain.gnu.base.1356606915" moduleId="org.eclipse.cdt.core.settings" name="Default">
|
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="0.1711304068" moduleId="org.eclipse.cdt.core.settings" name="Default">
|
||||||
<externalSettings/>
|
<externalSettings/>
|
||||||
<extensions>
|
<extensions>
|
||||||
<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
|
<extension id="org.eclipse.cdt.core.VCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
|
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
@@ -16,44 +16,28 @@
|
|||||||
</extensions>
|
</extensions>
|
||||||
</storageModule>
|
</storageModule>
|
||||||
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||||
<configuration artifactName="${ProjName}" buildProperties="" description="" id="cdt.managedbuild.toolchain.gnu.base.1356606915" name="Default" parent="org.eclipse.cdt.build.core.emptycfg">
|
<configuration buildProperties="" description="" id="0.1711304068" name="Default" parent="org.eclipse.cdt.build.core.prefbase.cfg">
|
||||||
<folderInfo id="cdt.managedbuild.toolchain.gnu.base.1356606915.922814002" name="/" resourcePath="">
|
<folderInfo id="0.1711304068." name="/" resourcePath="">
|
||||||
<toolChain id="cdt.managedbuild.toolchain.gnu.base.1290391524" name="cdt.managedbuild.toolchain.gnu.base" superClass="cdt.managedbuild.toolchain.gnu.base">
|
<toolChain id="org.eclipse.cdt.build.core.prefbase.toolchain.1124923904" name="No ToolChain" resourceTypeBasedDiscovery="false" superClass="org.eclipse.cdt.build.core.prefbase.toolchain">
|
||||||
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="cdt.managedbuild.target.gnu.platform.base.1695206694" name="Debug Platform" osList="linux,hpux,aix,qnx" superClass="cdt.managedbuild.target.gnu.platform.base"/>
|
<targetPlatform id="org.eclipse.cdt.build.core.prefbase.toolchain.1124923904.1662419075" name=""/>
|
||||||
<builder id="cdt.managedbuild.target.gnu.builder.base.1065831114" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" superClass="cdt.managedbuild.target.gnu.builder.base"/>
|
<builder id="org.eclipse.cdt.build.core.settings.default.builder.2130969774" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" superClass="org.eclipse.cdt.build.core.settings.default.builder"/>
|
||||||
<tool id="cdt.managedbuild.tool.gnu.archiver.base.766076070" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.base"/>
|
<tool id="org.eclipse.cdt.build.core.settings.holder.libs.1725950754" name="holder for library settings" superClass="org.eclipse.cdt.build.core.settings.holder.libs"/>
|
||||||
<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.base.1359276119" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.base">
|
<tool id="org.eclipse.cdt.build.core.settings.holder.1831860297" name="Assembly" superClass="org.eclipse.cdt.build.core.settings.holder">
|
||||||
<option id="gnu.cpp.compiler.option.include.paths.1856220007" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
|
<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.386696398" languageId="org.eclipse.cdt.core.assembly" languageName="Assembly" sourceContentType="org.eclipse.cdt.core.asmSource" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
|
||||||
<listOptionValue builtIn="false" value="/opt/epics/base/include"/>
|
</tool>
|
||||||
<listOptionValue builtIn="false" value="/opt/epics/base/include/os/Linux"/>
|
<tool id="org.eclipse.cdt.build.core.settings.holder.314251929" name="GNU C++" superClass="org.eclipse.cdt.build.core.settings.holder">
|
||||||
|
<option id="org.eclipse.cdt.build.core.settings.holder.incpaths.910187613" superClass="org.eclipse.cdt.build.core.settings.holder.incpaths" valueType="includePath">
|
||||||
|
<listOptionValue builtIn="false" value="/Users/msekoranja/tmp/pvDataCPP/include"/>
|
||||||
</option>
|
</option>
|
||||||
<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.1316200261" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
|
<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.1715506878" languageId="org.eclipse.cdt.core.g++" languageName="GNU C++" sourceContentType="org.eclipse.cdt.core.cxxSource,org.eclipse.cdt.core.cxxHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
|
||||||
</tool>
|
</tool>
|
||||||
<tool id="cdt.managedbuild.tool.gnu.c.compiler.base.1053490390" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.base">
|
<tool id="org.eclipse.cdt.build.core.settings.holder.1947872318" name="GNU C" superClass="org.eclipse.cdt.build.core.settings.holder">
|
||||||
<option id="gnu.c.compiler.option.include.paths.1102959803" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
|
<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.277964485" languageId="org.eclipse.cdt.core.gcc" languageName="GNU C" sourceContentType="org.eclipse.cdt.core.cSource,org.eclipse.cdt.core.cHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
|
||||||
<listOptionValue builtIn="false" value="/opt/epics/base/include"/>
|
|
||||||
<listOptionValue builtIn="false" value="/opt/epics/base/include/os/Linux"/>
|
|
||||||
</option>
|
|
||||||
<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.1997080176" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
|
|
||||||
</tool>
|
|
||||||
<tool id="cdt.managedbuild.tool.gnu.c.linker.base.1783519900" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.base"/>
|
|
||||||
<tool id="cdt.managedbuild.tool.gnu.cpp.linker.base.1802914254" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.base">
|
|
||||||
<inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.1133209566" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
|
|
||||||
<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
|
|
||||||
<additionalInput kind="additionalinput" paths="$(LIBS)"/>
|
|
||||||
</inputType>
|
|
||||||
</tool>
|
|
||||||
<tool id="cdt.managedbuild.tool.gnu.assembler.base.898309292" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.base">
|
|
||||||
<option id="gnu.both.asm.option.include.paths.288017456" name="Include paths (-I)" superClass="gnu.both.asm.option.include.paths"/>
|
|
||||||
<inputType id="cdt.managedbuild.tool.gnu.assembler.input.342310237" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
|
|
||||||
</tool>
|
</tool>
|
||||||
</toolChain>
|
</toolChain>
|
||||||
</folderInfo>
|
</folderInfo>
|
||||||
</configuration>
|
</configuration>
|
||||||
</storageModule>
|
</storageModule>
|
||||||
<storageModule moduleId="org.eclipse.cdt.core.externalSettings">
|
|
||||||
<externalSettings containerId="pvDataCPP;" factoryId="org.eclipse.cdt.core.cfg.export.settings.sipplier"/>
|
|
||||||
</storageModule>
|
|
||||||
<storageModule moduleId="scannerConfiguration">
|
<storageModule moduleId="scannerConfiguration">
|
||||||
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
|
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
|
||||||
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
|
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
|
||||||
@@ -302,44 +286,96 @@
|
|||||||
</scannerInfoProvider>
|
</scannerInfoProvider>
|
||||||
</profile>
|
</profile>
|
||||||
</scannerConfigBuildInfo>
|
</scannerConfigBuildInfo>
|
||||||
|
<scannerConfigBuildInfo instanceId="0.1711304068">
|
||||||
|
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
|
||||||
|
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
|
||||||
|
<buildOutputProvider>
|
||||||
|
<openAction enabled="true" filePath=""/>
|
||||||
|
<parser enabled="true"/>
|
||||||
|
</buildOutputProvider>
|
||||||
|
<scannerInfoProvider id="specsFile">
|
||||||
|
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
|
||||||
|
<parser enabled="true"/>
|
||||||
|
</scannerInfoProvider>
|
||||||
|
</profile>
|
||||||
|
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
|
||||||
|
<buildOutputProvider>
|
||||||
|
<openAction enabled="true" filePath=""/>
|
||||||
|
<parser enabled="true"/>
|
||||||
|
</buildOutputProvider>
|
||||||
|
<scannerInfoProvider id="makefileGenerator">
|
||||||
|
<runAction arguments="-E -P -v -dD" command="" useDefault="true"/>
|
||||||
|
<parser enabled="true"/>
|
||||||
|
</scannerInfoProvider>
|
||||||
|
</profile>
|
||||||
|
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
|
||||||
|
<buildOutputProvider>
|
||||||
|
<openAction enabled="true" filePath=""/>
|
||||||
|
<parser enabled="true"/>
|
||||||
|
</buildOutputProvider>
|
||||||
|
<scannerInfoProvider id="specsFile">
|
||||||
|
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
|
||||||
|
<parser enabled="true"/>
|
||||||
|
</scannerInfoProvider>
|
||||||
|
</profile>
|
||||||
|
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
|
||||||
|
<buildOutputProvider>
|
||||||
|
<openAction enabled="true" filePath=""/>
|
||||||
|
<parser enabled="true"/>
|
||||||
|
</buildOutputProvider>
|
||||||
|
<scannerInfoProvider id="specsFile">
|
||||||
|
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
|
||||||
|
<parser enabled="true"/>
|
||||||
|
</scannerInfoProvider>
|
||||||
|
</profile>
|
||||||
|
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
|
||||||
|
<buildOutputProvider>
|
||||||
|
<openAction enabled="true" filePath=""/>
|
||||||
|
<parser enabled="true"/>
|
||||||
|
</buildOutputProvider>
|
||||||
|
<scannerInfoProvider id="specsFile">
|
||||||
|
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
|
||||||
|
<parser enabled="true"/>
|
||||||
|
</scannerInfoProvider>
|
||||||
|
</profile>
|
||||||
|
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
|
||||||
|
<buildOutputProvider>
|
||||||
|
<openAction enabled="true" filePath=""/>
|
||||||
|
<parser enabled="true"/>
|
||||||
|
</buildOutputProvider>
|
||||||
|
<scannerInfoProvider id="specsFile">
|
||||||
|
<runAction arguments="-c 'gcc -E -P -v -dD "${plugin_state_location}/${specs_file}"'" command="sh" useDefault="true"/>
|
||||||
|
<parser enabled="true"/>
|
||||||
|
</scannerInfoProvider>
|
||||||
|
</profile>
|
||||||
|
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
|
||||||
|
<buildOutputProvider>
|
||||||
|
<openAction enabled="true" filePath=""/>
|
||||||
|
<parser enabled="true"/>
|
||||||
|
</buildOutputProvider>
|
||||||
|
<scannerInfoProvider id="specsFile">
|
||||||
|
<runAction arguments="-c 'g++ -E -P -v -dD "${plugin_state_location}/specs.cpp"'" command="sh" useDefault="true"/>
|
||||||
|
<parser enabled="true"/>
|
||||||
|
</scannerInfoProvider>
|
||||||
|
</profile>
|
||||||
|
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
|
||||||
|
<buildOutputProvider>
|
||||||
|
<openAction enabled="true" filePath=""/>
|
||||||
|
<parser enabled="true"/>
|
||||||
|
</buildOutputProvider>
|
||||||
|
<scannerInfoProvider id="specsFile">
|
||||||
|
<runAction arguments="-c 'gcc -E -P -v -dD "${plugin_state_location}/specs.c"'" command="sh" useDefault="true"/>
|
||||||
|
<parser enabled="true"/>
|
||||||
|
</scannerInfoProvider>
|
||||||
|
</profile>
|
||||||
|
</scannerConfigBuildInfo>
|
||||||
</storageModule>
|
</storageModule>
|
||||||
<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets">
|
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
|
||||||
<buildTargets>
|
<storageModule moduleId="org.eclipse.cdt.core.language.mapping"/>
|
||||||
<target name="all" path="" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
|
<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
|
||||||
<buildCommand>make</buildCommand>
|
|
||||||
<buildTarget>all</buildTarget>
|
|
||||||
<stopOnError>true</stopOnError>
|
|
||||||
<useDefaultCommand>true</useDefaultCommand>
|
|
||||||
<runAllBuilders>false</runAllBuilders>
|
|
||||||
</target>
|
|
||||||
<target name="clean" path="" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
|
|
||||||
<buildCommand>make</buildCommand>
|
|
||||||
<buildTarget>clean</buildTarget>
|
|
||||||
<stopOnError>true</stopOnError>
|
|
||||||
<useDefaultCommand>true</useDefaultCommand>
|
|
||||||
<runAllBuilders>false</runAllBuilders>
|
|
||||||
</target>
|
|
||||||
<target name="uninstall" path="" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
|
|
||||||
<buildCommand>make</buildCommand>
|
|
||||||
<buildArguments/>
|
|
||||||
<buildTarget>uninstall</buildTarget>
|
|
||||||
<stopOnError>true</stopOnError>
|
|
||||||
<useDefaultCommand>true</useDefaultCommand>
|
|
||||||
<runAllBuilders>false</runAllBuilders>
|
|
||||||
</target>
|
|
||||||
<target name="debug" path="" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
|
|
||||||
<buildCommand>make</buildCommand>
|
|
||||||
<buildArguments/>
|
|
||||||
<buildTarget>clean all DEBUG=1</buildTarget>
|
|
||||||
<stopOnError>true</stopOnError>
|
|
||||||
<useDefaultCommand>true</useDefaultCommand>
|
|
||||||
<runAllBuilders>false</runAllBuilders>
|
|
||||||
</target>
|
|
||||||
</buildTargets>
|
|
||||||
</storageModule>
|
|
||||||
</cconfiguration>
|
</cconfiguration>
|
||||||
</storageModule>
|
</storageModule>
|
||||||
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||||
<project id="pvAccessCPP.null.2070236580" name="pvAccessCPP"/>
|
<project id="pvAccessCPP.null.1359070792" name="pvAccessCPP"/>
|
||||||
</storageModule>
|
</storageModule>
|
||||||
</cproject>
|
</cproject>
|
||||||
|
|||||||
19
README
19
README
@@ -3,4 +3,21 @@ Define
|
|||||||
EPICS_BASE
|
EPICS_BASE
|
||||||
PVDATA_HOME
|
PVDATA_HOME
|
||||||
|
|
||||||
variables that points to EPICS base and pvDataCPP installation directory (includes and libraries) in configure/RELEASE.
|
variables that points to EPICS base and pvDataCPP installation directory (includes and libraries) in configure/RELEASE.local
|
||||||
|
|
||||||
|
Google C++ Testing Framework
|
||||||
|
----------------------------
|
||||||
|
Download:
|
||||||
|
http://code.google.com/p/googletest/
|
||||||
|
|
||||||
|
Extract, go to its root directory and in run:
|
||||||
|
export GTEST_DIR=$PWD
|
||||||
|
g++ -g -O3 -I${GTEST_DIR}/include -I${GTEST_DIR} -c ${GTEST_DIR}/src/gtest-all.cc
|
||||||
|
g++ -g -O3 -I${GTEST_DIR}/include -I${GTEST_DIR} -c ${GTEST_DIR}/src/gtest_main.cc
|
||||||
|
ar -rv libgtest_main.a gtest_main.o gtest-all.o
|
||||||
|
|
||||||
|
mkdir -p $EPICS_HOME/gtest/lib
|
||||||
|
cp -r ${GTEST_DIR}/include $EPICS_HOME/gtest
|
||||||
|
cp libgtest_main.a $EPICS_HOME/gtest/lib
|
||||||
|
|
||||||
|
(you can use cmake, see gtest README)
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ private:
|
|||||||
return findMatchingBrace(request,closeBrace,numOpen-1);
|
return findMatchingBrace(request,closeBrace,numOpen-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void createFieldRequest(PVStructure* pvParent,std::string request,bool fieldListOK) {
|
static void createFieldRequest(PVStructurePtr const & pvParent,std::string request,bool fieldListOK) {
|
||||||
trim(request);
|
trim(request);
|
||||||
if(request.length()<=0) return;
|
if(request.length()<=0) return;
|
||||||
size_t comma = request.find(',');
|
size_t comma = request.find(',');
|
||||||
@@ -57,9 +57,12 @@ private:
|
|||||||
THROW_BASE_EXCEPTION("mismatched { }");
|
THROW_BASE_EXCEPTION("mismatched { }");
|
||||||
}
|
}
|
||||||
String fieldName = request.substr(0,openBrace);
|
String fieldName = request.substr(0,openBrace);
|
||||||
std::auto_ptr<PVStructure> pvStructure(getPVDataCreate()->createPVStructure(pvParent, fieldName, 0));
|
|
||||||
createFieldRequest(pvStructure.get(),request.substr(openBrace+1,closeBrace-openBrace-1),false);
|
PVFieldPtrArray fields;
|
||||||
pvParent->appendPVField(pvStructure.release());
|
StringArray fieldNames;
|
||||||
|
PVStructurePtr pvStructure(getPVDataCreate()->createPVStructure(fieldNames, fields));
|
||||||
|
createFieldRequest(pvStructure,request.substr(openBrace+1,closeBrace-openBrace-1),false);
|
||||||
|
pvParent->appendPVField(fieldName, pvStructure);
|
||||||
if(request.length()>closeBrace+1) {
|
if(request.length()>closeBrace+1) {
|
||||||
if(request.at(closeBrace+1) != ',') {
|
if(request.at(closeBrace+1) != ',') {
|
||||||
THROW_BASE_EXCEPTION("misssing , after }");
|
THROW_BASE_EXCEPTION("misssing , after }");
|
||||||
@@ -69,9 +72,9 @@ private:
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(openBracket==std::string::npos && fieldListOK) {
|
if(openBracket==std::string::npos && fieldListOK) {
|
||||||
std::auto_ptr<PVString> pvStringField(static_cast<PVString*>(getPVDataCreate()->createPVScalar(pvParent, "fieldList", pvString)));
|
PVStringPtr pvStringField(std::tr1::static_pointer_cast<PVString>(getPVDataCreate()->createPVScalar(pvString)));
|
||||||
pvStringField->put(request);
|
pvStringField->put(request);
|
||||||
pvParent->appendPVField(pvStringField.release());
|
pvParent->appendPVField("fieldList", pvStringField);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(openBracket!=std::string::npos && (comma==std::string::npos || comma>openBracket)) {
|
if(openBracket!=std::string::npos && (comma==std::string::npos || comma>openBracket)) {
|
||||||
@@ -95,30 +98,32 @@ private:
|
|||||||
createLeafFieldRequest(pvParent,request);
|
createLeafFieldRequest(pvParent,request);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void createLeafFieldRequest(PVStructure* pvParent,String request) {
|
static void createLeafFieldRequest(PVStructurePtr const & pvParent,String request) {
|
||||||
size_t openBracket = request.find('[');
|
size_t openBracket = request.find('[');
|
||||||
String fullName = request;
|
String fullName = request;
|
||||||
if(openBracket != std::string::npos) fullName = request.substr(0,openBracket);
|
if(openBracket != std::string::npos) fullName = request.substr(0,openBracket);
|
||||||
size_t indLast = fullName.rfind('.');
|
size_t indLast = fullName.rfind('.');
|
||||||
String fieldName = fullName;
|
String fieldName = fullName;
|
||||||
if(indLast>1 && indLast != std::string::npos) fieldName = fullName.substr(indLast+1);
|
if(indLast>1 && indLast != std::string::npos) fieldName = fullName.substr(indLast+1);
|
||||||
std::auto_ptr<PVStructure> pvStructure(getPVDataCreate()->createPVStructure(pvParent, fieldName, 0));
|
PVFieldPtrArray fields;
|
||||||
std::auto_ptr<PVStructure> pvLeaf(getPVDataCreate()->createPVStructure(pvStructure.get(),"leaf", 0));
|
StringArray fieldNames;
|
||||||
std::auto_ptr<PVString> pvStringField(static_cast<PVString*>(getPVDataCreate()->createPVScalar(pvLeaf.get(), "source", pvString)));
|
PVStructurePtr pvStructure(getPVDataCreate()->createPVStructure(fieldNames, fields));
|
||||||
|
PVStructurePtr pvLeaf(getPVDataCreate()->createPVStructure(fieldNames, fields));
|
||||||
|
PVStringPtr pvStringField(std::tr1::static_pointer_cast<PVString>(getPVDataCreate()->createPVScalar(pvString)));
|
||||||
pvStringField->put(fullName);
|
pvStringField->put(fullName);
|
||||||
pvLeaf->appendPVField(pvStringField.release());
|
pvLeaf->appendPVField("source", pvStringField);
|
||||||
if(openBracket != std::string::npos) {
|
if(openBracket != std::string::npos) {
|
||||||
size_t closeBracket = request.find(']');
|
size_t closeBracket = request.find(']');
|
||||||
if(closeBracket==std::string::npos) {
|
if(closeBracket==std::string::npos) {
|
||||||
THROW_BASE_EXCEPTION("option does not have matching []");
|
THROW_BASE_EXCEPTION("option does not have matching []");
|
||||||
}
|
}
|
||||||
createRequestOptions(pvLeaf.get(),request.substr(openBracket+1, closeBracket-openBracket-1));
|
createRequestOptions(pvLeaf,request.substr(openBracket+1, closeBracket-openBracket-1));
|
||||||
}
|
}
|
||||||
pvStructure->appendPVField(pvLeaf.release());
|
pvStructure->appendPVField("leaf", pvLeaf);
|
||||||
pvParent->appendPVField(pvStructure.release());
|
pvParent->appendPVField("fieldName", pvStructure);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void createRequestOptions(PVStructure* pvParent,std::string request) {
|
static void createRequestOptions(PVStructurePtr const & pvParent,std::string request) {
|
||||||
trim(request);
|
trim(request);
|
||||||
if(request.length()<=1) return;
|
if(request.length()<=1) return;
|
||||||
|
|
||||||
@@ -135,9 +140,9 @@ private:
|
|||||||
|
|
||||||
if (equalsPos != std::string::npos)
|
if (equalsPos != std::string::npos)
|
||||||
{
|
{
|
||||||
std::auto_ptr<PVString> pvStringField(static_cast<PVString*>(getPVDataCreate()->createPVScalar(pvParent, token.substr(0, equalsPos), pvString)));
|
PVStringPtr pvStringField(std::tr1::static_pointer_cast<PVString>(getPVDataCreate()->createPVScalar(pvString)));
|
||||||
pvStringField->put(token.substr(equalsPos+1));
|
pvStringField->put(token.substr(equalsPos+1));
|
||||||
pvParent->appendPVField(pvStringField.release());
|
pvParent->appendPVField(token.substr(0, equalsPos), pvStringField);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -146,11 +151,13 @@ public:
|
|||||||
|
|
||||||
virtual PVStructure::shared_pointer createRequest(String request)
|
virtual PVStructure::shared_pointer createRequest(String request)
|
||||||
{
|
{
|
||||||
static String emptyString;
|
static PVFieldPtrArray emptyFields;
|
||||||
|
static StringArray emptyFieldNames;
|
||||||
|
|
||||||
if (!request.empty()) trim(request);
|
if (!request.empty()) trim(request);
|
||||||
if (request.empty())
|
if (request.empty())
|
||||||
{
|
{
|
||||||
PVStructure::shared_pointer pvStructure(getPVDataCreate()->createPVStructure(0, emptyString, 0));
|
PVStructure::shared_pointer pvStructure(getPVDataCreate()->createPVStructure(emptyFieldNames, emptyFields));
|
||||||
return pvStructure;
|
return pvStructure;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -159,7 +166,7 @@ public:
|
|||||||
size_t offsetPutField = request.find("putField(");
|
size_t offsetPutField = request.find("putField(");
|
||||||
size_t offsetGetField = request.find("getField(");
|
size_t offsetGetField = request.find("getField(");
|
||||||
|
|
||||||
PVStructure::shared_pointer pvStructure(getPVDataCreate()->createPVStructure(0, emptyString, 0));
|
PVStructure::shared_pointer pvStructure(getPVDataCreate()->createPVStructure(emptyFieldNames, emptyFields));
|
||||||
|
|
||||||
if (offsetRecord != std::string::npos) {
|
if (offsetRecord != std::string::npos) {
|
||||||
size_t offsetBegin = request.find('[', offsetRecord);
|
size_t offsetBegin = request.find('[', offsetRecord);
|
||||||
@@ -167,9 +174,9 @@ public:
|
|||||||
if(offsetEnd == std::string::npos) {
|
if(offsetEnd == std::string::npos) {
|
||||||
THROW_BASE_EXCEPTION("record[ does not have matching ]");
|
THROW_BASE_EXCEPTION("record[ does not have matching ]");
|
||||||
}
|
}
|
||||||
std::auto_ptr<PVStructure> pvStruct(getPVDataCreate()->createPVStructure(pvStructure.get(), "record", 0));
|
PVStructure::shared_pointer pvStruct(getPVDataCreate()->createPVStructure(emptyFieldNames, emptyFields));
|
||||||
createRequestOptions(pvStruct.get(),request.substr(offsetBegin+1, offsetEnd-offsetBegin-1));
|
createRequestOptions(pvStruct,request.substr(offsetBegin+1, offsetEnd-offsetBegin-1));
|
||||||
pvStructure->appendPVField(pvStruct.release());
|
pvStructure->appendPVField("record", pvStruct);
|
||||||
}
|
}
|
||||||
if (offsetField != std::string::npos) {
|
if (offsetField != std::string::npos) {
|
||||||
size_t offsetBegin = request.find('(', offsetField);
|
size_t offsetBegin = request.find('(', offsetField);
|
||||||
@@ -177,9 +184,9 @@ public:
|
|||||||
if(offsetEnd == std::string::npos) {
|
if(offsetEnd == std::string::npos) {
|
||||||
THROW_BASE_EXCEPTION("field( does not have matching )");
|
THROW_BASE_EXCEPTION("field( does not have matching )");
|
||||||
}
|
}
|
||||||
std::auto_ptr<PVStructure> pvStruct(getPVDataCreate()->createPVStructure(pvStructure.get(), "field", 0));
|
PVStructure::shared_pointer pvStruct(getPVDataCreate()->createPVStructure(emptyFieldNames, emptyFields));
|
||||||
createFieldRequest(pvStruct.get(),request.substr(offsetBegin+1, offsetEnd-offsetBegin-1),true);
|
createFieldRequest(pvStruct,request.substr(offsetBegin+1, offsetEnd-offsetBegin-1),true);
|
||||||
pvStructure->appendPVField(pvStruct.release());
|
pvStructure->appendPVField("field", pvStruct);
|
||||||
}
|
}
|
||||||
if (offsetPutField != std::string::npos) {
|
if (offsetPutField != std::string::npos) {
|
||||||
size_t offsetBegin = request.find('(', offsetPutField);
|
size_t offsetBegin = request.find('(', offsetPutField);
|
||||||
@@ -187,9 +194,9 @@ public:
|
|||||||
if(offsetEnd == std::string::npos) {
|
if(offsetEnd == std::string::npos) {
|
||||||
THROW_BASE_EXCEPTION("putField( does not have matching )");
|
THROW_BASE_EXCEPTION("putField( does not have matching )");
|
||||||
}
|
}
|
||||||
std::auto_ptr<PVStructure> pvStruct(getPVDataCreate()->createPVStructure(pvStructure.get(), "putField", 0));
|
PVStructure::shared_pointer pvStruct(getPVDataCreate()->createPVStructure(emptyFieldNames, emptyFields));
|
||||||
createFieldRequest(pvStruct.get(),request.substr(offsetBegin+1, offsetEnd-offsetBegin-1),true);
|
createFieldRequest(pvStruct,request.substr(offsetBegin+1, offsetEnd-offsetBegin-1),true);
|
||||||
pvStructure->appendPVField(pvStruct.release());
|
pvStructure->appendPVField("putField", pvStruct);
|
||||||
}
|
}
|
||||||
if (offsetGetField != std::string::npos) {
|
if (offsetGetField != std::string::npos) {
|
||||||
size_t offsetBegin = request.find('(', offsetGetField);
|
size_t offsetBegin = request.find('(', offsetGetField);
|
||||||
@@ -197,12 +204,12 @@ public:
|
|||||||
if(offsetEnd == std::string::npos) {
|
if(offsetEnd == std::string::npos) {
|
||||||
THROW_BASE_EXCEPTION("getField( does not have matching )");
|
THROW_BASE_EXCEPTION("getField( does not have matching )");
|
||||||
}
|
}
|
||||||
std::auto_ptr<PVStructure> pvStruct(getPVDataCreate()->createPVStructure(pvStructure.get(), "getField", 0));
|
PVStructure::shared_pointer pvStruct(getPVDataCreate()->createPVStructure(emptyFieldNames, emptyFields));
|
||||||
createFieldRequest(pvStruct.get(),request.substr(offsetBegin+1, offsetEnd-offsetBegin-1),true);
|
createFieldRequest(pvStruct,request.substr(offsetBegin+1, offsetEnd-offsetBegin-1),true);
|
||||||
pvStructure->appendPVField(pvStruct.release());
|
pvStructure->appendPVField("getField", pvStruct);
|
||||||
}
|
}
|
||||||
if (pvStructure.get()->getStructure()->getNumberFields()==0) {
|
if (pvStructure.get()->getStructure()->getNumberFields()==0) {
|
||||||
createFieldRequest(pvStructure.get(),request,true);
|
createFieldRequest(pvStructure,request,true);
|
||||||
}
|
}
|
||||||
return pvStructure;
|
return pvStructure;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ namespace epics {
|
|||||||
|
|
||||||
void AbstractResponseHandler::handleResponse(osiSockAddr* responseFrom,
|
void AbstractResponseHandler::handleResponse(osiSockAddr* responseFrom,
|
||||||
Transport::shared_pointer const & transport, int8 version, int8 command,
|
Transport::shared_pointer const & transport, int8 version, int8 command,
|
||||||
int payloadSize, ByteBuffer* payloadBuffer) {
|
size_t payloadSize, ByteBuffer* payloadBuffer) {
|
||||||
if(_debug) {
|
if(_debug) {
|
||||||
char ipAddrStr[48];
|
char ipAddrStr[48];
|
||||||
ipAddrToDottedIP(&responseFrom->ia, ipAddrStr, sizeof(ipAddrStr));
|
ipAddrToDottedIP(&responseFrom->ia, ipAddrStr, sizeof(ipAddrStr));
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ namespace epics {
|
|||||||
acquire(client);
|
acquire(client);
|
||||||
|
|
||||||
// use immediate for clients
|
// use immediate for clients
|
||||||
setSendQueueFlushStrategy(IMMEDIATE);
|
setSendQueueFlushStrategy(DELAYED);
|
||||||
|
|
||||||
// setup connection timeout timer (watchdog)
|
// setup connection timeout timer (watchdog)
|
||||||
epicsTimeGetCurrent(&_aliveTimestamp);
|
epicsTimeGetCurrent(&_aliveTimestamp);
|
||||||
|
|||||||
@@ -28,7 +28,8 @@ namespace pvAccess {
|
|||||||
_lastChannelSID(0)
|
_lastChannelSID(0)
|
||||||
{
|
{
|
||||||
// for performance testing
|
// for performance testing
|
||||||
// setSendQueueFlushStrategy(IMMEDIATE);
|
setSendQueueFlushStrategy(DELAYED);
|
||||||
|
_delay = 0.000;
|
||||||
|
|
||||||
// NOTE: priority not yet known, default priority is used to register/unregister
|
// NOTE: priority not yet known, default priority is used to register/unregister
|
||||||
// TODO implement priorities in Reactor... not that user will
|
// TODO implement priorities in Reactor... not that user will
|
||||||
|
|||||||
@@ -124,20 +124,20 @@ namespace epics {
|
|||||||
bool waitUntilVerified(double timeout);
|
bool waitUntilVerified(double timeout);
|
||||||
|
|
||||||
virtual void flush(bool lastMessageCompleted);
|
virtual void flush(bool lastMessageCompleted);
|
||||||
virtual void startMessage(epics::pvData::int8 command, int ensureCapacity);
|
virtual void startMessage(epics::pvData::int8 command, std::size_t ensureCapacity);
|
||||||
virtual void endMessage();
|
virtual void endMessage();
|
||||||
|
|
||||||
virtual void flushSerializeBuffer() {
|
virtual void flushSerializeBuffer() {
|
||||||
flush(false);
|
flush(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void ensureBuffer(int size);
|
virtual void ensureBuffer(std::size_t size);
|
||||||
|
|
||||||
virtual void alignBuffer(int alignment);
|
virtual void alignBuffer(std::size_t alignment);
|
||||||
|
|
||||||
virtual void ensureData(int size);
|
virtual void ensureData(std::size_t size);
|
||||||
|
|
||||||
virtual void alignData(int alignment);
|
virtual void alignData(std::size_t alignment);
|
||||||
|
|
||||||
virtual void close(bool force);
|
virtual void close(bool force);
|
||||||
|
|
||||||
@@ -165,10 +165,15 @@ namespace epics {
|
|||||||
|
|
||||||
//void enqueueMonitorSendRequest(TransportSender::shared_pointer const & sender);
|
//void enqueueMonitorSendRequest(TransportSender::shared_pointer const & sender);
|
||||||
|
|
||||||
|
virtual void enqueueOnlySendRequest(TransportSender::shared_pointer const & sender);
|
||||||
|
|
||||||
|
virtual void flushSendQueue();
|
||||||
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
virtual void processReadCached(bool nestedCall,
|
virtual void processReadCached(bool nestedCall,
|
||||||
ReceiveStage inStage, int requiredBytes);
|
ReceiveStage inStage, std::size_t requiredBytes);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called to any resources just before closing transport
|
* Called to any resources just before closing transport
|
||||||
@@ -199,11 +204,12 @@ namespace epics {
|
|||||||
/**
|
/**
|
||||||
* Default marker period.
|
* Default marker period.
|
||||||
*/
|
*/
|
||||||
static const int MARKER_PERIOD = 1024;
|
static const std::size_t MARKER_PERIOD = 1024;
|
||||||
|
|
||||||
static const int MAX_ENSURE_DATA_BUFFER_SIZE = 1024;
|
static const std::size_t MAX_ENSURE_DATA_BUFFER_SIZE = 1024;
|
||||||
|
|
||||||
static const double _delay;
|
// TODO
|
||||||
|
double _delay;
|
||||||
|
|
||||||
/****** finally initialized at construction time and after start (called by the same thread) ********/
|
/****** finally initialized at construction time and after start (called by the same thread) ********/
|
||||||
|
|
||||||
@@ -230,10 +236,12 @@ namespace epics {
|
|||||||
*/
|
*/
|
||||||
std::auto_ptr<ResponseHandler> _responseHandler;
|
std::auto_ptr<ResponseHandler> _responseHandler;
|
||||||
|
|
||||||
|
// TODO review int vs std::size_t
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Send buffer size.
|
* Send buffer size.
|
||||||
*/
|
*/
|
||||||
int _maxPayloadSize;
|
std::size_t _maxPayloadSize;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Send buffer size.
|
* Send buffer size.
|
||||||
@@ -333,16 +341,16 @@ namespace epics {
|
|||||||
// initialized at construction time
|
// initialized at construction time
|
||||||
epics::pvData::ByteBuffer* _socketBuffer;
|
epics::pvData::ByteBuffer* _socketBuffer;
|
||||||
|
|
||||||
int _startPosition;
|
std::size_t _startPosition;
|
||||||
|
|
||||||
int _storedPayloadSize;
|
std::size_t _storedPayloadSize;
|
||||||
int _storedPosition;
|
std::size_t _storedPosition;
|
||||||
int _storedLimit;
|
std::size_t _storedLimit;
|
||||||
|
|
||||||
epics::pvData::int8 _version;
|
epics::pvData::int8 _version;
|
||||||
epics::pvData::int8 _packetType;
|
epics::pvData::int8 _packetType;
|
||||||
epics::pvData::int8 _command;
|
epics::pvData::int8 _command;
|
||||||
int _payloadSize;
|
std::size_t _payloadSize;
|
||||||
|
|
||||||
ReceiveStage _stage;
|
ReceiveStage _stage;
|
||||||
|
|
||||||
|
|||||||
@@ -76,11 +76,12 @@ namespace pvAccess {
|
|||||||
|
|
||||||
PVDATA_REFCOUNT_MONITOR_DEFINE(blockingTCPTransport);
|
PVDATA_REFCOUNT_MONITOR_DEFINE(blockingTCPTransport);
|
||||||
|
|
||||||
const double BlockingTCPTransport::_delay = 0.01;
|
//const double BlockingTCPTransport::_delay = 0.000;
|
||||||
|
|
||||||
BlockingTCPTransport::BlockingTCPTransport(Context::shared_pointer const & context,
|
BlockingTCPTransport::BlockingTCPTransport(Context::shared_pointer const & context,
|
||||||
SOCKET channel, std::auto_ptr<ResponseHandler>& responseHandler,
|
SOCKET channel, std::auto_ptr<ResponseHandler>& responseHandler,
|
||||||
int receiveBufferSize, int16 priority) :
|
int receiveBufferSize, int16 priority) :
|
||||||
|
_delay(0.0),
|
||||||
_channel(channel),
|
_channel(channel),
|
||||||
_priority(priority),
|
_priority(priority),
|
||||||
_responseHandler(responseHandler),
|
_responseHandler(responseHandler),
|
||||||
@@ -221,7 +222,7 @@ namespace pvAccess {
|
|||||||
LOG(logLevelDebug, "Starting thread: %s",threadName.c_str());
|
LOG(logLevelDebug, "Starting thread: %s",threadName.c_str());
|
||||||
|
|
||||||
_sendThreadId = epicsThreadCreate(threadName.c_str(),
|
_sendThreadId = epicsThreadCreate(threadName.c_str(),
|
||||||
epicsThreadPriorityMedium,
|
epicsThreadPriorityMedium,
|
||||||
epicsThreadGetStackSize(epicsThreadStackMedium),
|
epicsThreadGetStackSize(epicsThreadStackMedium),
|
||||||
BlockingTCPTransport::sendThreadRunner, this);
|
BlockingTCPTransport::sendThreadRunner, this);
|
||||||
}
|
}
|
||||||
@@ -330,7 +331,7 @@ namespace pvAccess {
|
|||||||
startMessage(_lastSegmentedMessageCommand, 0);
|
startMessage(_lastSegmentedMessageCommand, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void BlockingTCPTransport::startMessage(int8 command, int ensureCapacity) {
|
void BlockingTCPTransport::startMessage(int8 command, size_t ensureCapacity) {
|
||||||
_lastMessageStartPosition = -1;
|
_lastMessageStartPosition = -1;
|
||||||
ensureBuffer(CA_MESSAGE_HEADER_SIZE+ensureCapacity);
|
ensureBuffer(CA_MESSAGE_HEADER_SIZE+ensureCapacity);
|
||||||
_lastMessageStartPosition = _sendBuffer->getPosition();
|
_lastMessageStartPosition = _sendBuffer->getPosition();
|
||||||
@@ -346,8 +347,8 @@ namespace pvAccess {
|
|||||||
endMessage(false);
|
endMessage(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void BlockingTCPTransport::ensureBuffer(int size) {
|
void BlockingTCPTransport::ensureBuffer(size_t size) {
|
||||||
if(likely((int)(_sendBuffer->getRemaining())>=size)) return;
|
if(likely(_sendBuffer->getRemaining()>=size)) return;
|
||||||
|
|
||||||
// too large for buffer...
|
// too large for buffer...
|
||||||
if(unlikely(_maxPayloadSize<size)) {
|
if(unlikely(_maxPayloadSize<size)) {
|
||||||
@@ -357,16 +358,16 @@ namespace pvAccess {
|
|||||||
THROW_BASE_EXCEPTION(temp.str().c_str());
|
THROW_BASE_EXCEPTION(temp.str().c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
while(((int)_sendBuffer->getRemaining())<size && !_closed.get())
|
while(_sendBuffer->getRemaining()<size && !_closed.get())
|
||||||
flush(false);
|
flush(false);
|
||||||
|
|
||||||
if (unlikely(_closed.get())) THROW_BASE_EXCEPTION("transport closed");
|
if (unlikely(_closed.get())) THROW_BASE_EXCEPTION("transport closed");
|
||||||
}
|
}
|
||||||
|
|
||||||
void BlockingTCPTransport::alignBuffer(int alignment) {
|
void BlockingTCPTransport::alignBuffer(size_t alignment) {
|
||||||
// not space optimal (always requires 7-bytes), but fast
|
// not space optimal (always requires 7-bytes), but fast
|
||||||
|
|
||||||
if(unlikely((int)(_sendBuffer->getRemaining())<(alignment-1)))
|
if(unlikely(_sendBuffer->getRemaining()<(alignment-1)))
|
||||||
ensureBuffer(alignment-1);
|
ensureBuffer(alignment-1);
|
||||||
|
|
||||||
_sendBuffer->align(alignment);
|
_sendBuffer->align(alignment);
|
||||||
@@ -425,9 +426,9 @@ namespace pvAccess {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void BlockingTCPTransport::ensureData(int size) {
|
void BlockingTCPTransport::ensureData(size_t size) {
|
||||||
// enough of data?
|
// enough of data?
|
||||||
if(likely(((int)_socketBuffer->getRemaining())>=size)) return;
|
if(likely(_socketBuffer->getRemaining()>=size)) return;
|
||||||
|
|
||||||
// too large for buffer...
|
// too large for buffer...
|
||||||
if(unlikely(MAX_ENSURE_DATA_BUFFER_SIZE<size)) {
|
if(unlikely(MAX_ENSURE_DATA_BUFFER_SIZE<size)) {
|
||||||
@@ -479,24 +480,24 @@ namespace pvAccess {
|
|||||||
_storedLimit));
|
_storedLimit));
|
||||||
|
|
||||||
// add if missing...
|
// add if missing...
|
||||||
if(unlikely(!_closed.get()&&((int)_socketBuffer->getRemaining())<size))
|
if(unlikely(!_closed.get()&&(_socketBuffer->getRemaining()<size)))
|
||||||
ensureData(size);
|
ensureData(size);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(unlikely(_closed.get())) THROW_BASE_EXCEPTION("transport closed");
|
if(unlikely(_closed.get())) THROW_BASE_EXCEPTION("transport closed");
|
||||||
}
|
}
|
||||||
|
|
||||||
void BlockingTCPTransport::alignData(int alignment) {
|
void BlockingTCPTransport::alignData(size_t alignment) {
|
||||||
// not space optimal (always requires 7-bytes), but fast
|
// not space optimal (always requires 7-bytes), but fast
|
||||||
|
|
||||||
if(unlikely((int)(_socketBuffer->getRemaining())<(alignment-1)))
|
if(unlikely(_socketBuffer->getRemaining()<(alignment-1)))
|
||||||
ensureData(alignment-1);
|
ensureData(alignment-1);
|
||||||
|
|
||||||
_socketBuffer->align(alignment);
|
_socketBuffer->align(alignment);
|
||||||
}
|
}
|
||||||
|
|
||||||
void BlockingTCPTransport::processReadCached(bool nestedCall,
|
void BlockingTCPTransport::processReadCached(bool nestedCall,
|
||||||
ReceiveStage inStage, int requiredBytes) {
|
ReceiveStage inStage, size_t requiredBytes) {
|
||||||
try {
|
try {
|
||||||
while(likely(!_closed.get())) {
|
while(likely(!_closed.get())) {
|
||||||
if(_stage==READ_FROM_SOCKET||inStage!=UNDEFINED_STAGE) {
|
if(_stage==READ_FROM_SOCKET||inStage!=UNDEFINED_STAGE) {
|
||||||
@@ -521,7 +522,7 @@ namespace pvAccess {
|
|||||||
|
|
||||||
// read at least requiredBytes bytes
|
// read at least requiredBytes bytes
|
||||||
|
|
||||||
uintptr_t requiredPosition = (currentStartPosition+requiredBytes);
|
size_t requiredPosition = (currentStartPosition+requiredBytes);
|
||||||
while(_socketBuffer->getPosition()<requiredPosition) {
|
while(_socketBuffer->getPosition()<requiredPosition) {
|
||||||
// read
|
// read
|
||||||
int pos = _socketBuffer->getPosition();
|
int pos = _socketBuffer->getPosition();
|
||||||
@@ -689,7 +690,7 @@ namespace pvAccess {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_socketBuffer->setLimit(_storedLimit);
|
_socketBuffer->setLimit(_storedLimit);
|
||||||
int newPosition = _storedPosition+_storedPayloadSize;
|
size_t newPosition = _storedPosition+_storedPayloadSize;
|
||||||
if(unlikely(newPosition>_storedLimit)) {
|
if(unlikely(newPosition>_storedLimit)) {
|
||||||
newPosition -= _storedLimit;
|
newPosition -= _storedLimit;
|
||||||
_socketBuffer->setPosition(_storedLimit);
|
_socketBuffer->setPosition(_storedLimit);
|
||||||
@@ -778,6 +779,7 @@ namespace pvAccess {
|
|||||||
int bytesToSend = limit-buffer->getPosition();
|
int bytesToSend = limit-buffer->getPosition();
|
||||||
|
|
||||||
//LOG(logLevelInfo,"Total bytes to send: %d", bytesToSend);
|
//LOG(logLevelInfo,"Total bytes to send: %d", bytesToSend);
|
||||||
|
//printf("Total bytes to send: %d\n", bytesToSend);
|
||||||
|
|
||||||
// limit sending
|
// limit sending
|
||||||
if(bytesToSend>maxBytesToSend) {
|
if(bytesToSend>maxBytesToSend) {
|
||||||
@@ -1010,6 +1012,18 @@ printf("sendThreadRunnner exception\n");
|
|||||||
_sendQueueEvent.signal();
|
_sendQueueEvent.signal();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void BlockingTCPTransport::enqueueOnlySendRequest(TransportSender::shared_pointer const & sender) {
|
||||||
|
Lock lock(_sendQueueMutex);
|
||||||
|
if(unlikely(_closed.get())) return;
|
||||||
|
_sendQueue.push_back(sender);
|
||||||
|
}
|
||||||
|
|
||||||
|
void BlockingTCPTransport::flushSendQueue() {
|
||||||
|
Lock lock(_sendQueueMutex);
|
||||||
|
if(unlikely(_closed.get())) return;
|
||||||
|
_sendQueueEvent.signal();
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
void BlockingTCPTransport::enqueueMonitorSendRequest(TransportSender::shared_pointer sender) {
|
void BlockingTCPTransport::enqueueMonitorSendRequest(TransportSender::shared_pointer sender) {
|
||||||
Lock lock(_monitorMutex);
|
Lock lock(_monitorMutex);
|
||||||
|
|||||||
@@ -110,15 +110,15 @@ namespace epics {
|
|||||||
|
|
||||||
virtual void close(bool forced);
|
virtual void close(bool forced);
|
||||||
|
|
||||||
virtual void ensureData(int size) {
|
virtual void ensureData(std::size_t size) {
|
||||||
// noop
|
// noop
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void alignData(int alignment) {
|
virtual void alignData(std::size_t alignment) {
|
||||||
_receiveBuffer->align(alignment);
|
_receiveBuffer->align(alignment);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void startMessage(epics::pvData::int8 command, int ensureCapacity);
|
virtual void startMessage(epics::pvData::int8 command, std::size_t ensureCapacity);
|
||||||
virtual void endMessage();
|
virtual void endMessage();
|
||||||
|
|
||||||
virtual void flush(bool lastMessageCompleted) {
|
virtual void flush(bool lastMessageCompleted) {
|
||||||
@@ -134,11 +134,11 @@ namespace epics {
|
|||||||
// noop
|
// noop
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void ensureBuffer(int size) {
|
virtual void ensureBuffer(std::size_t size) {
|
||||||
// noop
|
// noop
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void alignBuffer(int alignment) {
|
virtual void alignBuffer(std::size_t alignment) {
|
||||||
_sendBuffer->align(alignment);
|
_sendBuffer->align(alignment);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -141,7 +141,7 @@ namespace epics {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void BlockingUDPTransport::startMessage(int8 command, int ensureCapacity) {
|
void BlockingUDPTransport::startMessage(int8 command, size_t ensureCapacity) {
|
||||||
_lastMessageStartPosition = _sendBuffer->getPosition();
|
_lastMessageStartPosition = _sendBuffer->getPosition();
|
||||||
_sendBuffer->putByte(CA_MAGIC);
|
_sendBuffer->putByte(CA_MAGIC);
|
||||||
_sendBuffer->putByte(CA_VERSION);
|
_sendBuffer->putByte(CA_VERSION);
|
||||||
@@ -276,11 +276,12 @@ namespace epics {
|
|||||||
|
|
||||||
// command ID and paylaod
|
// command ID and paylaod
|
||||||
int8 command = receiveBuffer->getByte();
|
int8 command = receiveBuffer->getByte();
|
||||||
int payloadSize = receiveBuffer->getInt();
|
// TODO check this cast (size_t must be 32-bit)
|
||||||
int nextRequestPosition = receiveBuffer->getPosition() + payloadSize;
|
size_t payloadSize = receiveBuffer->getInt();
|
||||||
|
size_t nextRequestPosition = receiveBuffer->getPosition() + payloadSize;
|
||||||
|
|
||||||
// payload size check
|
// payload size check
|
||||||
if(unlikely(nextRequestPosition>(int)receiveBuffer->getLimit())) return false;
|
if(unlikely(nextRequestPosition>receiveBuffer->getLimit())) return false;
|
||||||
|
|
||||||
// handle
|
// handle
|
||||||
_responseHandler->handleResponse(&fromAddress, thisTransport,
|
_responseHandler->handleResponse(&fromAddress, thisTransport,
|
||||||
|
|||||||
@@ -111,7 +111,7 @@ namespace epics {
|
|||||||
|
|
||||||
virtual ~TransportSendControl() {}
|
virtual ~TransportSendControl() {}
|
||||||
|
|
||||||
virtual void startMessage(epics::pvData::int8 command, int ensureCapacity) = 0;
|
virtual void startMessage(epics::pvData::int8 command, std::size_t ensureCapacity) = 0;
|
||||||
virtual void endMessage() = 0;
|
virtual void endMessage() = 0;
|
||||||
|
|
||||||
virtual void flush(bool lastMessageCompleted) = 0;
|
virtual void flush(bool lastMessageCompleted) = 0;
|
||||||
@@ -261,6 +261,10 @@ namespace epics {
|
|||||||
*/
|
*/
|
||||||
virtual void enqueueSendRequest(TransportSender::shared_pointer const & sender) = 0;
|
virtual void enqueueSendRequest(TransportSender::shared_pointer const & sender) = 0;
|
||||||
|
|
||||||
|
virtual void enqueueOnlySendRequest(TransportSender::shared_pointer const & sender) {};
|
||||||
|
|
||||||
|
virtual void flushSendQueue() {};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class Channel;
|
class Channel;
|
||||||
@@ -315,7 +319,7 @@ namespace epics {
|
|||||||
*/
|
*/
|
||||||
virtual void
|
virtual void
|
||||||
handleResponse(osiSockAddr* responseFrom, Transport::shared_pointer const & transport,
|
handleResponse(osiSockAddr* responseFrom, Transport::shared_pointer const & transport,
|
||||||
epics::pvData::int8 version, epics::pvData::int8 command, int payloadSize,
|
epics::pvData::int8 version, epics::pvData::int8 command, std::size_t payloadSize,
|
||||||
epics::pvData::ByteBuffer* payloadBuffer) = 0;
|
epics::pvData::ByteBuffer* payloadBuffer) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -335,7 +339,7 @@ namespace epics {
|
|||||||
virtual ~AbstractResponseHandler() {}
|
virtual ~AbstractResponseHandler() {}
|
||||||
|
|
||||||
virtual void handleResponse(osiSockAddr* responseFrom, Transport::shared_pointer const & transport,
|
virtual void handleResponse(osiSockAddr* responseFrom, Transport::shared_pointer const & transport,
|
||||||
epics::pvData::int8 version, epics::pvData::int8 command, int payloadSize,
|
epics::pvData::int8 version, epics::pvData::int8 command, std::size_t payloadSize,
|
||||||
epics::pvData::ByteBuffer* payloadBuffer);
|
epics::pvData::ByteBuffer* payloadBuffer);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|||||||
@@ -23,9 +23,9 @@ public:
|
|||||||
void endMessage() {}
|
void endMessage() {}
|
||||||
void flush(bool lastMessageCompleted) {}
|
void flush(bool lastMessageCompleted) {}
|
||||||
void setRecipient(const osiSockAddr& sendTo) {}
|
void setRecipient(const osiSockAddr& sendTo) {}
|
||||||
void startMessage(epics::pvData::int8 command, int ensureCapacity) {}
|
void startMessage(epics::pvData::int8 command, std::size_t ensureCapacity) {}
|
||||||
void ensureBuffer(int size) {}
|
void ensureBuffer(std::size_t) {}
|
||||||
void alignBuffer(int alignment) {}
|
void alignBuffer(std::size_t alignment) {}
|
||||||
void flushSerializeBuffer() {}
|
void flushSerializeBuffer() {}
|
||||||
void cachedSerialize(
|
void cachedSerialize(
|
||||||
const std::tr1::shared_ptr<const epics::pvData::Field>& field, epics::pvData::ByteBuffer* buffer)
|
const std::tr1::shared_ptr<const epics::pvData::Field>& field, epics::pvData::ByteBuffer* buffer)
|
||||||
|
|||||||
@@ -30,6 +30,8 @@
|
|||||||
#include <pv/logger.h>
|
#include <pv/logger.h>
|
||||||
#include <pv/bitSetUtil.h>
|
#include <pv/bitSetUtil.h>
|
||||||
|
|
||||||
|
#include <tr1/unordered_map>
|
||||||
|
|
||||||
using std::tr1::dynamic_pointer_cast;
|
using std::tr1::dynamic_pointer_cast;
|
||||||
using std::tr1::static_pointer_cast;
|
using std::tr1::static_pointer_cast;
|
||||||
|
|
||||||
@@ -45,7 +47,7 @@ namespace epics {
|
|||||||
String emptyString;
|
String emptyString;
|
||||||
|
|
||||||
// TODO consider std::unordered_map
|
// TODO consider std::unordered_map
|
||||||
typedef std::map<pvAccessID, ResponseRequest::weak_pointer> IOIDResponseRequestMap;
|
typedef std::tr1::unordered_map<pvAccessID, ResponseRequest::weak_pointer> IOIDResponseRequestMap;
|
||||||
|
|
||||||
|
|
||||||
#define EXCEPTION_GUARD(code) try { code; } \
|
#define EXCEPTION_GUARD(code) try { code; } \
|
||||||
@@ -88,7 +90,7 @@ namespace epics {
|
|||||||
typedef std::tr1::shared_ptr<BaseRequestImpl> shared_pointer;
|
typedef std::tr1::shared_ptr<BaseRequestImpl> shared_pointer;
|
||||||
typedef std::tr1::shared_ptr<const BaseRequestImpl> const_shared_pointer;
|
typedef std::tr1::shared_ptr<const BaseRequestImpl> const_shared_pointer;
|
||||||
|
|
||||||
static PVDataCreate* pvDataCreate;
|
static PVDataCreatePtr pvDataCreate;
|
||||||
|
|
||||||
static Status notInitializedStatus;
|
static Status notInitializedStatus;
|
||||||
static Status destroyedStatus;
|
static Status destroyedStatus;
|
||||||
@@ -290,7 +292,7 @@ namespace epics {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
PVDataCreate* BaseRequestImpl::pvDataCreate = getPVDataCreate();
|
PVDataCreatePtr BaseRequestImpl::pvDataCreate = getPVDataCreate();
|
||||||
|
|
||||||
Status BaseRequestImpl::notInitializedStatus = Status(Status::STATUSTYPE_ERROR, "request not initialized");
|
Status BaseRequestImpl::notInitializedStatus = Status(Status::STATUSTYPE_ERROR, "request not initialized");
|
||||||
Status BaseRequestImpl::destroyedStatus = Status(Status::STATUSTYPE_ERROR, "request destroyed");
|
Status BaseRequestImpl::destroyedStatus = Status(Status::STATUSTYPE_ERROR, "request destroyed");
|
||||||
@@ -371,7 +373,7 @@ namespace epics {
|
|||||||
if (pendingRequest & QOS_INIT)
|
if (pendingRequest & QOS_INIT)
|
||||||
{
|
{
|
||||||
// pvRequest
|
// pvRequest
|
||||||
m_channel->getTransport()->getIntrospectionRegistry()->serializePVRequest(buffer, control, m_pvRequest.get());
|
m_channel->getTransport()->getIntrospectionRegistry()->serializePVRequest(buffer, control, m_pvRequest);
|
||||||
}
|
}
|
||||||
|
|
||||||
stopRequest();
|
stopRequest();
|
||||||
@@ -474,7 +476,7 @@ namespace epics {
|
|||||||
{
|
{
|
||||||
BaseRequestImpl::activate();
|
BaseRequestImpl::activate();
|
||||||
|
|
||||||
if (m_pvRequest.get() == 0)
|
if (m_pvRequest == 0)
|
||||||
{
|
{
|
||||||
ChannelGet::shared_pointer thisPointer = dynamic_pointer_cast<ChannelGet>(shared_from_this());
|
ChannelGet::shared_pointer thisPointer = dynamic_pointer_cast<ChannelGet>(shared_from_this());
|
||||||
PVStructure::shared_pointer nullPVStructure;
|
PVStructure::shared_pointer nullPVStructure;
|
||||||
@@ -526,7 +528,7 @@ namespace epics {
|
|||||||
if (pendingRequest & QOS_INIT)
|
if (pendingRequest & QOS_INIT)
|
||||||
{
|
{
|
||||||
// pvRequest
|
// pvRequest
|
||||||
m_channel->getTransport()->getIntrospectionRegistry()->serializePVRequest(buffer, control, m_pvRequest.get());
|
m_channel->getTransport()->getIntrospectionRegistry()->serializePVRequest(buffer, control, m_pvRequest);
|
||||||
}
|
}
|
||||||
|
|
||||||
stopRequest();
|
stopRequest();
|
||||||
@@ -552,7 +554,7 @@ namespace epics {
|
|||||||
// create data and its bitSet
|
// create data and its bitSet
|
||||||
{
|
{
|
||||||
Lock lock(m_structureMutex);
|
Lock lock(m_structureMutex);
|
||||||
m_structure.reset(transport->getIntrospectionRegistry()->deserializeStructureAndCreatePVStructure(payloadBuffer, transport.get()));
|
m_structure = transport->getIntrospectionRegistry()->deserializeStructureAndCreatePVStructure(payloadBuffer, transport.get());
|
||||||
m_bitSet.reset(new BitSet(m_structure->getNumberFields()));
|
m_bitSet.reset(new BitSet(m_structure->getNumberFields()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -593,7 +595,19 @@ namespace epics {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
// TODO bulk hack
|
||||||
|
if (lastRequest)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
m_channel->checkAndGetTransport()->flushSendQueue();
|
||||||
|
} catch (std::runtime_error &rte) {
|
||||||
|
stopRequest();
|
||||||
|
EXCEPTION_GUARD(m_channelGetRequester->getDone(channelNotConnected));
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
*/
|
||||||
if (!startRequest(lastRequest ? QOS_DESTROY | QOS_GET : QOS_DEFAULT)) {
|
if (!startRequest(lastRequest ? QOS_DESTROY | QOS_GET : QOS_DEFAULT)) {
|
||||||
EXCEPTION_GUARD(m_channelGetRequester->getDone(otherRequestPendingStatus));
|
EXCEPTION_GUARD(m_channelGetRequester->getDone(otherRequestPendingStatus));
|
||||||
return;
|
return;
|
||||||
@@ -602,6 +616,7 @@ namespace epics {
|
|||||||
try {
|
try {
|
||||||
TransportSender::shared_pointer thisSender = shared_from_this();
|
TransportSender::shared_pointer thisSender = shared_from_this();
|
||||||
m_channel->checkAndGetTransport()->enqueueSendRequest(thisSender);
|
m_channel->checkAndGetTransport()->enqueueSendRequest(thisSender);
|
||||||
|
//TODO bulk hack m_channel->checkAndGetTransport()->enqueueOnlySendRequest(thisSender);
|
||||||
} catch (std::runtime_error &rte) {
|
} catch (std::runtime_error &rte) {
|
||||||
stopRequest();
|
stopRequest();
|
||||||
EXCEPTION_GUARD(m_channelGetRequester->getDone(channelNotConnected));
|
EXCEPTION_GUARD(m_channelGetRequester->getDone(channelNotConnected));
|
||||||
@@ -665,7 +680,7 @@ namespace epics {
|
|||||||
{
|
{
|
||||||
BaseRequestImpl::activate();
|
BaseRequestImpl::activate();
|
||||||
|
|
||||||
if (m_pvRequest.get() == 0)
|
if (m_pvRequest == 0)
|
||||||
{
|
{
|
||||||
ChannelPut::shared_pointer thisPointer = dynamic_pointer_cast<ChannelPut>(shared_from_this());
|
ChannelPut::shared_pointer thisPointer = dynamic_pointer_cast<ChannelPut>(shared_from_this());
|
||||||
PVStructure::shared_pointer nullPVStructure;
|
PVStructure::shared_pointer nullPVStructure;
|
||||||
@@ -717,7 +732,7 @@ namespace epics {
|
|||||||
if (pendingRequest & QOS_INIT)
|
if (pendingRequest & QOS_INIT)
|
||||||
{
|
{
|
||||||
// pvRequest
|
// pvRequest
|
||||||
m_channel->getTransport()->getIntrospectionRegistry()->serializePVRequest(buffer, control, m_pvRequest.get());
|
m_channel->getTransport()->getIntrospectionRegistry()->serializePVRequest(buffer, control, m_pvRequest);
|
||||||
}
|
}
|
||||||
else if (!(pendingRequest & QOS_GET))
|
else if (!(pendingRequest & QOS_GET))
|
||||||
{
|
{
|
||||||
@@ -752,7 +767,7 @@ namespace epics {
|
|||||||
// create data and its bitSet
|
// create data and its bitSet
|
||||||
{
|
{
|
||||||
Lock lock(m_structureMutex);
|
Lock lock(m_structureMutex);
|
||||||
m_structure.reset(transport->getIntrospectionRegistry()->deserializeStructureAndCreatePVStructure(payloadBuffer, transport.get()));
|
m_structure = transport->getIntrospectionRegistry()->deserializeStructureAndCreatePVStructure(payloadBuffer, transport.get());
|
||||||
m_bitSet.reset(new BitSet(m_structure->getNumberFields()));
|
m_bitSet.reset(new BitSet(m_structure->getNumberFields()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -897,7 +912,7 @@ namespace epics {
|
|||||||
{
|
{
|
||||||
BaseRequestImpl::activate();
|
BaseRequestImpl::activate();
|
||||||
|
|
||||||
if (m_pvRequest.get() == 0)
|
if (m_pvRequest == 0)
|
||||||
{
|
{
|
||||||
ChannelPutGet::shared_pointer thisPointer = dynamic_pointer_cast<ChannelPutGet>(shared_from_this());
|
ChannelPutGet::shared_pointer thisPointer = dynamic_pointer_cast<ChannelPutGet>(shared_from_this());
|
||||||
PVStructure::shared_pointer nullPVStructure;
|
PVStructure::shared_pointer nullPVStructure;
|
||||||
@@ -947,7 +962,7 @@ namespace epics {
|
|||||||
buffer->putByte((int8)QOS_INIT);
|
buffer->putByte((int8)QOS_INIT);
|
||||||
|
|
||||||
// pvRequest
|
// pvRequest
|
||||||
m_channel->getTransport()->getIntrospectionRegistry()->serializePVRequest(buffer, control, m_pvRequest.get());
|
m_channel->getTransport()->getIntrospectionRegistry()->serializePVRequest(buffer, control, m_pvRequest);
|
||||||
}
|
}
|
||||||
else if (pendingRequest & (QOS_GET | QOS_GET_PUT)) {
|
else if (pendingRequest & (QOS_GET | QOS_GET_PUT)) {
|
||||||
// noop
|
// noop
|
||||||
@@ -983,8 +998,8 @@ namespace epics {
|
|||||||
|
|
||||||
{
|
{
|
||||||
Lock lock(m_structureMutex);
|
Lock lock(m_structureMutex);
|
||||||
m_putData.reset(registry->deserializeStructureAndCreatePVStructure(payloadBuffer, transport.get()));
|
m_putData = registry->deserializeStructureAndCreatePVStructure(payloadBuffer, transport.get());
|
||||||
m_getData.reset(registry->deserializeStructureAndCreatePVStructure(payloadBuffer, transport.get()));
|
m_getData = registry->deserializeStructureAndCreatePVStructure(payloadBuffer, transport.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
// notify
|
// notify
|
||||||
@@ -1186,7 +1201,7 @@ namespace epics {
|
|||||||
{
|
{
|
||||||
BaseRequestImpl::activate();
|
BaseRequestImpl::activate();
|
||||||
|
|
||||||
if (m_pvRequest.get() == 0)
|
if (m_pvRequest == 0)
|
||||||
{
|
{
|
||||||
ChannelRPC::shared_pointer thisPointer = dynamic_pointer_cast<ChannelRPC>(shared_from_this());
|
ChannelRPC::shared_pointer thisPointer = dynamic_pointer_cast<ChannelRPC>(shared_from_this());
|
||||||
EXCEPTION_GUARD(m_channelRPCRequester->channelRPCConnect(pvRequestNull, thisPointer));
|
EXCEPTION_GUARD(m_channelRPCRequester->channelRPCConnect(pvRequestNull, thisPointer));
|
||||||
@@ -1235,14 +1250,14 @@ namespace epics {
|
|||||||
buffer->putByte((int8)QOS_INIT);
|
buffer->putByte((int8)QOS_INIT);
|
||||||
|
|
||||||
// pvRequest
|
// pvRequest
|
||||||
m_channel->getTransport()->getIntrospectionRegistry()->serializePVRequest(buffer, control, m_pvRequest.get());
|
m_channel->getTransport()->getIntrospectionRegistry()->serializePVRequest(buffer, control, m_pvRequest);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
// no need to lock here, since it is already locked via TransportSender IF
|
// no need to lock here, since it is already locked via TransportSender IF
|
||||||
//Lock lock(m_structureMutex);
|
//Lock lock(m_structureMutex);
|
||||||
m_channel->getTransport()->getIntrospectionRegistry()->serializeStructure(buffer, control, m_structure.get());
|
m_channel->getTransport()->getIntrospectionRegistry()->serializeStructure(buffer, control, m_structure);
|
||||||
// release arguments structure
|
// release arguments structure
|
||||||
m_structure.reset();
|
m_structure.reset();
|
||||||
}
|
}
|
||||||
@@ -1382,7 +1397,7 @@ namespace epics {
|
|||||||
{
|
{
|
||||||
BaseRequestImpl::activate();
|
BaseRequestImpl::activate();
|
||||||
|
|
||||||
if (m_pvRequest.get() == 0)
|
if (m_pvRequest == 0)
|
||||||
{
|
{
|
||||||
ChannelArray::shared_pointer thisPointer = dynamic_pointer_cast<ChannelArray>(shared_from_this());
|
ChannelArray::shared_pointer thisPointer = dynamic_pointer_cast<ChannelArray>(shared_from_this());
|
||||||
PVArray::shared_pointer nullPVArray;
|
PVArray::shared_pointer nullPVArray;
|
||||||
@@ -1430,7 +1445,7 @@ namespace epics {
|
|||||||
if (pendingRequest & QOS_INIT)
|
if (pendingRequest & QOS_INIT)
|
||||||
{
|
{
|
||||||
// pvRequest
|
// pvRequest
|
||||||
m_channel->getTransport()->getIntrospectionRegistry()->serializePVRequest(buffer, control, m_pvRequest.get());
|
m_channel->getTransport()->getIntrospectionRegistry()->serializePVRequest(buffer, control, m_pvRequest);
|
||||||
}
|
}
|
||||||
else if (pendingRequest & QOS_GET)
|
else if (pendingRequest & QOS_GET)
|
||||||
{
|
{
|
||||||
@@ -1476,7 +1491,7 @@ namespace epics {
|
|||||||
FieldConstPtr field = transport->getIntrospectionRegistry()->deserialize(payloadBuffer, transport.get());
|
FieldConstPtr field = transport->getIntrospectionRegistry()->deserialize(payloadBuffer, transport.get());
|
||||||
{
|
{
|
||||||
Lock lock(m_structureMutex);
|
Lock lock(m_structureMutex);
|
||||||
m_structure.reset(dynamic_cast<PVArray*>(getPVDataCreate()->createPVField(0, field)));
|
m_structure = dynamic_pointer_cast<PVArray>(getPVDataCreate()->createPVField(field));
|
||||||
}
|
}
|
||||||
|
|
||||||
// notify
|
// notify
|
||||||
@@ -1786,31 +1801,6 @@ namespace epics {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
class MonitorElementImpl : public MonitorElement
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
PVStructure::shared_pointer m_pvStructure;
|
|
||||||
BitSet::shared_pointer m_changedBitSet;
|
|
||||||
BitSet::shared_pointer m_overrunBitSet;
|
|
||||||
|
|
||||||
virtual PVStructure::shared_pointer const & getPVStructure()
|
|
||||||
{
|
|
||||||
return m_pvStructure;
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual BitSet::shared_pointer const & getChangedBitSet()
|
|
||||||
{
|
|
||||||
return m_changedBitSet;
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual BitSet::shared_pointer const & getOverrunBitSet()
|
|
||||||
{
|
|
||||||
return m_overrunBitSet;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
class MonitorStrategy : public Monitor {
|
class MonitorStrategy : public Monitor {
|
||||||
public:
|
public:
|
||||||
virtual ~MonitorStrategy() {};
|
virtual ~MonitorStrategy() {};
|
||||||
@@ -1837,7 +1827,7 @@ namespace epics {
|
|||||||
public:
|
public:
|
||||||
|
|
||||||
MonitorStrategyNotify(MonitorRequester::shared_pointer const & callback) :
|
MonitorStrategyNotify(MonitorRequester::shared_pointer const & callback) :
|
||||||
m_callback(callback), m_gotMonitor(false), m_mutex(), m_monitorElement(new MonitorElementImpl())
|
m_callback(callback), m_gotMonitor(false), m_mutex(), m_monitorElement(new MonitorElement())
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1857,7 +1847,7 @@ namespace epics {
|
|||||||
m_callback->monitorEvent(thisMonitor);
|
m_callback->monitorEvent(thisMonitor);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual MonitorElement::shared_pointer const & poll() {
|
virtual MonitorElement::shared_pointer poll() {
|
||||||
Lock guard(m_mutex);
|
Lock guard(m_mutex);
|
||||||
if (m_gotMonitor)
|
if (m_gotMonitor)
|
||||||
return m_nullMonitorElement;
|
return m_nullMonitorElement;
|
||||||
@@ -1865,7 +1855,7 @@ namespace epics {
|
|||||||
return m_monitorElement;
|
return m_monitorElement;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void release(MonitorElement::shared_pointer const & monitorElement) {
|
virtual void release(MonitorElement::shared_pointer & monitorElement) {
|
||||||
Lock guard(m_mutex);
|
Lock guard(m_mutex);
|
||||||
m_gotMonitor = false;
|
m_gotMonitor = false;
|
||||||
}
|
}
|
||||||
@@ -1896,12 +1886,11 @@ namespace epics {
|
|||||||
|
|
||||||
MonitorElement::shared_pointer m_nullMonitorElement;
|
MonitorElement::shared_pointer m_nullMonitorElement;
|
||||||
MonitorElement::shared_pointer m_monitorElement;
|
MonitorElement::shared_pointer m_monitorElement;
|
||||||
std::tr1::shared_ptr<MonitorElementImpl> m_monitorElementImpl;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
MonitorStrategyEntire(MonitorRequester::shared_pointer const & callback) :
|
MonitorStrategyEntire(MonitorRequester::shared_pointer const & callback) :
|
||||||
m_callback(callback), m_gotMonitor(false), m_mutex(), m_monitorElement(new MonitorElementImpl()), m_monitorElementImpl(static_pointer_cast<MonitorElementImpl>(m_monitorElement))
|
m_callback(callback), m_gotMonitor(false), m_mutex(), m_monitorElement(new MonitorElement())
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1912,24 +1901,24 @@ namespace epics {
|
|||||||
virtual void init(StructureConstPtr const & structure) {
|
virtual void init(StructureConstPtr const & structure) {
|
||||||
Lock guard(m_mutex);
|
Lock guard(m_mutex);
|
||||||
|
|
||||||
m_monitorElementImpl->m_pvStructure.reset(getPVDataCreate()->createPVStructure(0, structure));
|
m_monitorElement->pvStructurePtr = getPVDataCreate()->createPVStructure(structure);
|
||||||
int numberFields = m_monitorElementImpl->m_pvStructure->getNumberFields();
|
int numberFields = m_monitorElement->pvStructurePtr->getNumberFields();
|
||||||
m_monitorElementImpl->m_changedBitSet.reset(new BitSet(numberFields));
|
m_monitorElement->changedBitSet.reset(new BitSet(numberFields));
|
||||||
m_monitorElementImpl->m_overrunBitSet.reset(new BitSet(numberFields));
|
m_monitorElement->overrunBitSet.reset(new BitSet(numberFields));
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void response(Transport::shared_pointer const & transport, ByteBuffer* payloadBuffer) {
|
virtual void response(Transport::shared_pointer const & transport, ByteBuffer* payloadBuffer) {
|
||||||
Lock guard(m_mutex);
|
Lock guard(m_mutex);
|
||||||
// simply deserialize and notify
|
// simply deserialize and notify
|
||||||
m_monitorElementImpl->m_changedBitSet->deserialize(payloadBuffer, transport.get());
|
m_monitorElement->changedBitSet->deserialize(payloadBuffer, transport.get());
|
||||||
m_monitorElementImpl->m_pvStructure->deserialize(payloadBuffer, transport.get(), m_monitorElementImpl->m_changedBitSet.get());
|
m_monitorElement->pvStructurePtr->deserialize(payloadBuffer, transport.get(), m_monitorElement->changedBitSet.get());
|
||||||
m_monitorElementImpl->m_overrunBitSet->deserialize(payloadBuffer, transport.get());
|
m_monitorElement->overrunBitSet->deserialize(payloadBuffer, transport.get());
|
||||||
m_gotMonitor = true;
|
m_gotMonitor = true;
|
||||||
Monitor::shared_pointer thisMonitor = shared_from_this();
|
Monitor::shared_pointer thisMonitor = shared_from_this();
|
||||||
m_callback->monitorEvent(thisMonitor);
|
m_callback->monitorEvent(thisMonitor);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual MonitorElement::shared_pointer const & poll() {
|
virtual MonitorElement::shared_pointer poll() {
|
||||||
Lock guard(m_mutex);
|
Lock guard(m_mutex);
|
||||||
if (m_gotMonitor)
|
if (m_gotMonitor)
|
||||||
return m_nullMonitorElement;
|
return m_nullMonitorElement;
|
||||||
@@ -1937,7 +1926,7 @@ namespace epics {
|
|||||||
return m_monitorElement;
|
return m_monitorElement;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void release(MonitorElement::shared_pointer const & monitorElement) {
|
virtual void release(MonitorElement::shared_pointer & monitorElement) {
|
||||||
Lock guard(m_mutex);
|
Lock guard(m_mutex);
|
||||||
m_gotMonitor = false;
|
m_gotMonitor = false;
|
||||||
}
|
}
|
||||||
@@ -1976,13 +1965,12 @@ namespace epics {
|
|||||||
|
|
||||||
MonitorElement::shared_pointer m_nullMonitorElement;
|
MonitorElement::shared_pointer m_nullMonitorElement;
|
||||||
MonitorElement::shared_pointer m_monitorElement;
|
MonitorElement::shared_pointer m_monitorElement;
|
||||||
std::tr1::shared_ptr<MonitorElementImpl> m_monitorElementImpl;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
MonitorStrategySingle(MonitorRequester::shared_pointer callback) :
|
MonitorStrategySingle(MonitorRequester::shared_pointer callback) :
|
||||||
m_callback(callback), m_gotMonitor(false), m_mutex(),
|
m_callback(callback), m_gotMonitor(false), m_mutex(),
|
||||||
m_needToCompress(false), m_monitorElement(new MonitorElementImpl()), m_monitorElementImpl(static_pointer_cast<MonitorElementImpl>(m_monitorElement))
|
m_needToCompress(false), m_monitorElement(new MonitorElement())
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1993,10 +1981,10 @@ namespace epics {
|
|||||||
virtual void init(StructureConstPtr const & structure) {
|
virtual void init(StructureConstPtr const & structure) {
|
||||||
Lock guard(m_mutex);
|
Lock guard(m_mutex);
|
||||||
|
|
||||||
m_monitorElementImpl->m_pvStructure.reset(getPVDataCreate()->createPVStructure(0, structure));
|
m_monitorElement->pvStructurePtr = getPVDataCreate()->createPVStructure(structure);
|
||||||
int numberFields = m_monitorElementImpl->m_pvStructure->getNumberFields();
|
int numberFields = m_monitorElement->pvStructurePtr->getNumberFields();
|
||||||
m_monitorElementImpl->m_changedBitSet.reset(new BitSet(numberFields));
|
m_monitorElement->changedBitSet.reset(new BitSet(numberFields));
|
||||||
m_monitorElementImpl->m_overrunBitSet.reset(new BitSet(numberFields));
|
m_monitorElement->overrunBitSet.reset(new BitSet(numberFields));
|
||||||
|
|
||||||
m_structureChangeBitSet.reset(new BitSet(numberFields));
|
m_structureChangeBitSet.reset(new BitSet(numberFields));
|
||||||
m_structureOverrunBitSet.reset(new BitSet(numberFields));
|
m_structureOverrunBitSet.reset(new BitSet(numberFields));
|
||||||
@@ -2009,9 +1997,9 @@ namespace epics {
|
|||||||
if (!m_gotMonitor)
|
if (!m_gotMonitor)
|
||||||
{
|
{
|
||||||
// simply deserialize and notify
|
// simply deserialize and notify
|
||||||
m_monitorElementImpl->m_changedBitSet->deserialize(payloadBuffer, transport.get());
|
m_monitorElement->changedBitSet->deserialize(payloadBuffer, transport.get());
|
||||||
m_monitorElementImpl->m_pvStructure->deserialize(payloadBuffer, transport.get(), m_monitorElementImpl->m_changedBitSet.get());
|
m_monitorElement->pvStructurePtr->deserialize(payloadBuffer, transport.get(), m_monitorElement->changedBitSet.get());
|
||||||
m_monitorElementImpl->m_overrunBitSet->deserialize(payloadBuffer, transport.get());
|
m_monitorElement->overrunBitSet->deserialize(payloadBuffer, transport.get());
|
||||||
m_gotMonitor = true;
|
m_gotMonitor = true;
|
||||||
Monitor::shared_pointer thisMonitor = shared_from_this();
|
Monitor::shared_pointer thisMonitor = shared_from_this();
|
||||||
m_callback->monitorEvent(thisMonitor);
|
m_callback->monitorEvent(thisMonitor);
|
||||||
@@ -2020,48 +2008,48 @@ namespace epics {
|
|||||||
{
|
{
|
||||||
// deserialize first
|
// deserialize first
|
||||||
m_structureChangeBitSet->deserialize(payloadBuffer, transport.get());
|
m_structureChangeBitSet->deserialize(payloadBuffer, transport.get());
|
||||||
m_monitorElementImpl->m_pvStructure->deserialize(payloadBuffer, transport.get(), m_structureChangeBitSet.get());
|
m_monitorElement->pvStructurePtr->deserialize(payloadBuffer, transport.get(), m_structureChangeBitSet.get());
|
||||||
m_structureOverrunBitSet->deserialize(payloadBuffer, transport.get());
|
m_structureOverrunBitSet->deserialize(payloadBuffer, transport.get());
|
||||||
|
|
||||||
// OR local overrun
|
// OR local overrun
|
||||||
// TODO should work only on uncompressed
|
// TODO should work only on uncompressed
|
||||||
m_monitorElementImpl->m_overrunBitSet->or_and(*m_structureChangeBitSet.get(), *m_monitorElementImpl->m_changedBitSet.get());
|
m_monitorElement->overrunBitSet->or_and(*m_structureChangeBitSet.get(), *m_monitorElement->changedBitSet.get());
|
||||||
|
|
||||||
// OR new changes
|
// OR new changes
|
||||||
*(m_monitorElementImpl->m_changedBitSet) |= *m_structureChangeBitSet.get();
|
*(m_monitorElement->changedBitSet) |= *m_structureChangeBitSet.get();
|
||||||
|
|
||||||
// OR remote overrun
|
// OR remote overrun
|
||||||
*(m_monitorElementImpl->m_overrunBitSet) |= *m_structureOverrunBitSet.get();
|
*(m_monitorElement->overrunBitSet) |= *m_structureOverrunBitSet.get();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual MonitorElement::shared_pointer const & poll() {
|
virtual MonitorElement::shared_pointer poll() {
|
||||||
Lock guard(m_mutex);
|
Lock guard(m_mutex);
|
||||||
if (!m_gotMonitor) return m_nullMonitorElement;
|
if (!m_gotMonitor) return m_nullMonitorElement;
|
||||||
|
|
||||||
// compress if needed
|
// compress if needed
|
||||||
if (m_needToCompress)
|
if (m_needToCompress)
|
||||||
{
|
{
|
||||||
BitSetUtil::compress(m_monitorElementImpl->m_changedBitSet.get(), m_monitorElementImpl->m_pvStructure.get());
|
BitSetUtil::compress(m_monitorElement->changedBitSet.get(), m_monitorElement->pvStructurePtr.get());
|
||||||
BitSetUtil::compress(m_monitorElementImpl->m_overrunBitSet.get(), m_monitorElementImpl->m_pvStructure.get());
|
BitSetUtil::compress(m_monitorElement->overrunBitSet.get(), m_monitorElement->pvStructurePtr.get());
|
||||||
m_needToCompress = false;
|
m_needToCompress = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return m_monitorElement;
|
return m_monitorElement;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void release(MonitorElement::shared_pointer const & monitorElement) {
|
virtual void release(MonitorElement::shared_pointer & monitorElement) {
|
||||||
Lock guard(m_mutex);
|
Lock guard(m_mutex);
|
||||||
m_gotMonitor = false;
|
m_gotMonitor = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
Status start() {
|
Status start() {
|
||||||
Lock guard(m_mutex);
|
Lock guard(m_mutex);
|
||||||
if (!m_monitorElementImpl->m_changedBitSet.get())
|
if (!m_monitorElement->changedBitSet.get())
|
||||||
return Status(Status::STATUSTYPE_ERROR, "Monitor not connected.");
|
return Status(Status::STATUSTYPE_ERROR, "Monitor not connected.");
|
||||||
m_gotMonitor = false;
|
m_gotMonitor = false;
|
||||||
m_monitorElementImpl->m_changedBitSet->clear();
|
m_monitorElement->changedBitSet->clear();
|
||||||
m_monitorElementImpl->m_overrunBitSet->clear();
|
m_monitorElement->overrunBitSet->clear();
|
||||||
return Status::Ok;
|
return Status::Ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2104,7 +2092,7 @@ namespace epics {
|
|||||||
{
|
{
|
||||||
BaseRequestImpl::activate();
|
BaseRequestImpl::activate();
|
||||||
|
|
||||||
if (m_pvRequest.get() == 0)
|
if (m_pvRequest == 0)
|
||||||
{
|
{
|
||||||
Monitor::shared_pointer thisPointer = dynamic_pointer_cast<Monitor>(shared_from_this());
|
Monitor::shared_pointer thisPointer = dynamic_pointer_cast<Monitor>(shared_from_this());
|
||||||
StructureConstPtr nullPVStructure;
|
StructureConstPtr nullPVStructure;
|
||||||
@@ -2113,10 +2101,10 @@ namespace epics {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int queueSize = 2;
|
int queueSize = 2;
|
||||||
PVField* pvField = m_pvRequest->getSubField("record.queueSize");
|
PVFieldPtr pvField = m_pvRequest->getSubField("record.queueSize");
|
||||||
if (pvField) {
|
if (pvField.get()) {
|
||||||
PVString* pvString = dynamic_cast<PVString*>(pvField);
|
PVStringPtr pvString = dynamic_pointer_cast<PVString>(pvField);
|
||||||
if (pvString)
|
if (pvString.get())
|
||||||
{
|
{
|
||||||
String value = pvString->get();
|
String value = pvString->get();
|
||||||
|
|
||||||
@@ -2184,7 +2172,7 @@ namespace epics {
|
|||||||
if (pendingRequest & QOS_INIT)
|
if (pendingRequest & QOS_INIT)
|
||||||
{
|
{
|
||||||
// pvRequest
|
// pvRequest
|
||||||
m_channel->getTransport()->getIntrospectionRegistry()->serializePVRequest(buffer, control, m_pvRequest.get());
|
m_channel->getTransport()->getIntrospectionRegistry()->serializePVRequest(buffer, control, m_pvRequest);
|
||||||
}
|
}
|
||||||
|
|
||||||
stopRequest();
|
stopRequest();
|
||||||
@@ -2336,12 +2324,12 @@ namespace epics {
|
|||||||
BaseRequestImpl::destroy();
|
BaseRequestImpl::destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual MonitorElement::shared_pointer const & poll()
|
virtual MonitorElement::shared_pointer poll()
|
||||||
{
|
{
|
||||||
return m_monitorStrategy->poll();
|
return m_monitorStrategy->poll();
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void release(MonitorElement::shared_pointer const & monitorElement)
|
virtual void release(MonitorElement::shared_pointer & monitorElement)
|
||||||
{
|
{
|
||||||
m_monitorStrategy->release(monitorElement);
|
m_monitorStrategy->release(monitorElement);
|
||||||
}
|
}
|
||||||
@@ -2396,7 +2384,7 @@ namespace epics {
|
|||||||
|
|
||||||
virtual void handleResponse(osiSockAddr* responseFrom,
|
virtual void handleResponse(osiSockAddr* responseFrom,
|
||||||
Transport::shared_pointer const & transport, int8 version, int8 command,
|
Transport::shared_pointer const & transport, int8 version, int8 command,
|
||||||
int payloadSize, epics::pvData::ByteBuffer* payloadBuffer)
|
size_t payloadSize, epics::pvData::ByteBuffer* payloadBuffer)
|
||||||
{
|
{
|
||||||
char ipAddrStr[48];
|
char ipAddrStr[48];
|
||||||
ipAddrToDottedIP(&responseFrom->ia, ipAddrStr, sizeof(ipAddrStr));
|
ipAddrToDottedIP(&responseFrom->ia, ipAddrStr, sizeof(ipAddrStr));
|
||||||
@@ -2420,7 +2408,7 @@ namespace epics {
|
|||||||
|
|
||||||
virtual void handleResponse(osiSockAddr* responseFrom,
|
virtual void handleResponse(osiSockAddr* responseFrom,
|
||||||
Transport::shared_pointer const & transport, int8 version, int8 command,
|
Transport::shared_pointer const & transport, int8 version, int8 command,
|
||||||
int payloadSize, epics::pvData::ByteBuffer* payloadBuffer)
|
size_t payloadSize, epics::pvData::ByteBuffer* payloadBuffer)
|
||||||
{
|
{
|
||||||
AbstractClientResponseHandler::handleResponse(responseFrom, transport, version, command, payloadSize, payloadBuffer);
|
AbstractClientResponseHandler::handleResponse(responseFrom, transport, version, command, payloadSize, payloadBuffer);
|
||||||
|
|
||||||
@@ -2449,7 +2437,7 @@ namespace epics {
|
|||||||
|
|
||||||
virtual void handleResponse(osiSockAddr* responseFrom,
|
virtual void handleResponse(osiSockAddr* responseFrom,
|
||||||
Transport::shared_pointer const & transport, int8 version, int8 command,
|
Transport::shared_pointer const & transport, int8 version, int8 command,
|
||||||
int payloadSize, epics::pvData::ByteBuffer* payloadBuffer)
|
size_t payloadSize, epics::pvData::ByteBuffer* payloadBuffer)
|
||||||
{
|
{
|
||||||
AbstractClientResponseHandler::handleResponse(responseFrom, transport, version, command, payloadSize, payloadBuffer);
|
AbstractClientResponseHandler::handleResponse(responseFrom, transport, version, command, payloadSize, payloadBuffer);
|
||||||
|
|
||||||
@@ -2512,7 +2500,7 @@ namespace epics {
|
|||||||
|
|
||||||
virtual void handleResponse(osiSockAddr* responseFrom,
|
virtual void handleResponse(osiSockAddr* responseFrom,
|
||||||
Transport::shared_pointer const & transport, int8 version, int8 command,
|
Transport::shared_pointer const & transport, int8 version, int8 command,
|
||||||
int payloadSize, epics::pvData::ByteBuffer* payloadBuffer)
|
size_t payloadSize, epics::pvData::ByteBuffer* payloadBuffer)
|
||||||
{
|
{
|
||||||
// reception timestamp
|
// reception timestamp
|
||||||
TimeStamp timestamp;
|
TimeStamp timestamp;
|
||||||
@@ -2560,17 +2548,16 @@ namespace epics {
|
|||||||
|
|
||||||
// TODO smart pointers
|
// TODO smart pointers
|
||||||
// extra data
|
// extra data
|
||||||
PVFieldPtr data = 0;
|
PVFieldPtr data;
|
||||||
const FieldConstPtr field = IntrospectionRegistry::deserializeFull(payloadBuffer, transport.get());
|
const FieldConstPtr field = IntrospectionRegistry::deserializeFull(payloadBuffer, transport.get());
|
||||||
if (field != 0)
|
if (field != 0)
|
||||||
{
|
{
|
||||||
data = getPVDataCreate()->createPVField(0, field);
|
data = getPVDataCreate()->createPVField(field);
|
||||||
data->deserialize(payloadBuffer, transport.get());
|
data->deserialize(payloadBuffer, transport.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
// notify beacon handler
|
// notify beacon handler
|
||||||
beaconHandler->beaconNotify(responseFrom, version, ×tamp, &startupTimestamp, sequentalID, data);
|
beaconHandler->beaconNotify(responseFrom, version, ×tamp, &startupTimestamp, sequentalID, data);
|
||||||
if (data) delete data;
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -2586,7 +2573,7 @@ namespace epics {
|
|||||||
|
|
||||||
virtual void handleResponse(osiSockAddr* responseFrom,
|
virtual void handleResponse(osiSockAddr* responseFrom,
|
||||||
Transport::shared_pointer const & transport, int8 version, int8 command,
|
Transport::shared_pointer const & transport, int8 version, int8 command,
|
||||||
int payloadSize, epics::pvData::ByteBuffer* payloadBuffer)
|
size_t payloadSize, epics::pvData::ByteBuffer* payloadBuffer)
|
||||||
{
|
{
|
||||||
AbstractClientResponseHandler::handleResponse(responseFrom, transport, version, command, payloadSize, payloadBuffer);
|
AbstractClientResponseHandler::handleResponse(responseFrom, transport, version, command, payloadSize, payloadBuffer);
|
||||||
|
|
||||||
@@ -2616,7 +2603,7 @@ namespace epics {
|
|||||||
|
|
||||||
virtual void handleResponse(osiSockAddr* responseFrom,
|
virtual void handleResponse(osiSockAddr* responseFrom,
|
||||||
Transport::shared_pointer const & transport, int8 version, int8 command,
|
Transport::shared_pointer const & transport, int8 version, int8 command,
|
||||||
int payloadSize, epics::pvData::ByteBuffer* payloadBuffer)
|
size_t payloadSize, epics::pvData::ByteBuffer* payloadBuffer)
|
||||||
{
|
{
|
||||||
AbstractClientResponseHandler::handleResponse(responseFrom, transport, version, command, payloadSize, payloadBuffer);
|
AbstractClientResponseHandler::handleResponse(responseFrom, transport, version, command, payloadSize, payloadBuffer);
|
||||||
|
|
||||||
@@ -2653,7 +2640,7 @@ namespace epics {
|
|||||||
|
|
||||||
virtual void handleResponse(osiSockAddr* responseFrom,
|
virtual void handleResponse(osiSockAddr* responseFrom,
|
||||||
Transport::shared_pointer const & transport, int8 version, int8 command,
|
Transport::shared_pointer const & transport, int8 version, int8 command,
|
||||||
int payloadSize, epics::pvData::ByteBuffer* payloadBuffer)
|
size_t payloadSize, epics::pvData::ByteBuffer* payloadBuffer)
|
||||||
{
|
{
|
||||||
AbstractClientResponseHandler::handleResponse(responseFrom, transport, version, command, payloadSize, payloadBuffer);
|
AbstractClientResponseHandler::handleResponse(responseFrom, transport, version, command, payloadSize, payloadBuffer);
|
||||||
|
|
||||||
@@ -2734,7 +2721,7 @@ namespace epics {
|
|||||||
|
|
||||||
virtual void handleResponse(osiSockAddr* responseFrom,
|
virtual void handleResponse(osiSockAddr* responseFrom,
|
||||||
Transport::shared_pointer const & transport, int8 version, int8 command,
|
Transport::shared_pointer const & transport, int8 version, int8 command,
|
||||||
int payloadSize, ByteBuffer* payloadBuffer)
|
size_t payloadSize, ByteBuffer* payloadBuffer)
|
||||||
{
|
{
|
||||||
if (command < 0 || command >= (int8)m_handlerTable.size())
|
if (command < 0 || command >= (int8)m_handlerTable.size())
|
||||||
{
|
{
|
||||||
@@ -3053,7 +3040,7 @@ namespace epics {
|
|||||||
|
|
||||||
virtual void message(String message,MessageType messageType)
|
virtual void message(String message,MessageType messageType)
|
||||||
{
|
{
|
||||||
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
|
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")" << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t& getUserValue() { return m_userValue; }
|
int32_t& getUserValue() { return m_userValue; }
|
||||||
|
|||||||
@@ -23,17 +23,28 @@ DefaultBeaconServerStatusProvider::~DefaultBeaconServerStatusProvider()
|
|||||||
|
|
||||||
void DefaultBeaconServerStatusProvider::initialize()
|
void DefaultBeaconServerStatusProvider::initialize()
|
||||||
{
|
{
|
||||||
FieldCreate* fieldCreate = getFieldCreate();
|
FieldCreatePtr fieldCreate = getFieldCreate();
|
||||||
FieldConstPtrArray fields = new FieldConstPtr[6];
|
|
||||||
// TODO hierarchy can be used...
|
|
||||||
fields[0] = fieldCreate->createScalar("connections",pvInt);
|
|
||||||
fields[1] = fieldCreate->createScalar("allocatedMemory",pvLong);
|
|
||||||
fields[2] = fieldCreate->createScalar("freeMemory",pvLong);
|
|
||||||
fields[3] = fieldCreate->createScalar("threads",pvInt);
|
|
||||||
fields[4] = fieldCreate->createScalar("deadlocks",pvInt);
|
|
||||||
fields[5] = fieldCreate->createScalar("averageSystemLoad",pvDouble);
|
|
||||||
|
|
||||||
_status.reset(getPVDataCreate()->createPVStructure(0,"status",6,fields));
|
StringArray fieldNames;
|
||||||
|
fieldNames.resize(6);
|
||||||
|
fieldNames[0] = "connections";
|
||||||
|
fieldNames[1] = "allocatedMemory";
|
||||||
|
fieldNames[2] = "freeMemory";
|
||||||
|
fieldNames[3] = "threads";
|
||||||
|
fieldNames[4] = "deadlocks";
|
||||||
|
fieldNames[5] = "averageSystemLoad";
|
||||||
|
|
||||||
|
FieldConstPtrArray fields;
|
||||||
|
fields.resize(6);
|
||||||
|
// TODO hierarchy can be used...
|
||||||
|
fields[0] = fieldCreate->createScalar(pvInt);
|
||||||
|
fields[1] = fieldCreate->createScalar(pvLong);
|
||||||
|
fields[2] = fieldCreate->createScalar(pvLong);
|
||||||
|
fields[3] = fieldCreate->createScalar(pvInt);
|
||||||
|
fields[4] = fieldCreate->createScalar(pvInt);
|
||||||
|
fields[5] = fieldCreate->createScalar(pvDouble);
|
||||||
|
|
||||||
|
_status = getPVDataCreate()->createPVStructure(fieldCreate->createStructure(fieldNames, fields));
|
||||||
}
|
}
|
||||||
|
|
||||||
PVField::shared_pointer DefaultBeaconServerStatusProvider::getServerStatusData()
|
PVField::shared_pointer DefaultBeaconServerStatusProvider::getServerStatusData()
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ namespace pvAccess {
|
|||||||
|
|
||||||
void ServerBadResponse::handleResponse(osiSockAddr* responseFrom,
|
void ServerBadResponse::handleResponse(osiSockAddr* responseFrom,
|
||||||
Transport::shared_pointer const & transport, int8 version, int8 command,
|
Transport::shared_pointer const & transport, int8 version, int8 command,
|
||||||
int payloadSize, ByteBuffer* payloadBuffer)
|
size_t payloadSize, ByteBuffer* payloadBuffer)
|
||||||
{
|
{
|
||||||
AbstractServerResponseHandler::handleResponse(responseFrom,
|
AbstractServerResponseHandler::handleResponse(responseFrom,
|
||||||
transport, version, command, payloadSize, payloadBuffer);
|
transport, version, command, payloadSize, payloadBuffer);
|
||||||
@@ -74,7 +74,7 @@ ServerResponseHandler::ServerResponseHandler(ServerContextImpl::shared_pointer c
|
|||||||
|
|
||||||
void ServerResponseHandler::handleResponse(osiSockAddr* responseFrom,
|
void ServerResponseHandler::handleResponse(osiSockAddr* responseFrom,
|
||||||
Transport::shared_pointer const & transport, int8 version, int8 command,
|
Transport::shared_pointer const & transport, int8 version, int8 command,
|
||||||
int payloadSize, ByteBuffer* payloadBuffer)
|
size_t payloadSize, ByteBuffer* payloadBuffer)
|
||||||
{
|
{
|
||||||
if(command<0||command>=(int8)m_handlerTable.size())
|
if(command<0||command>=(int8)m_handlerTable.size())
|
||||||
{
|
{
|
||||||
@@ -98,7 +98,7 @@ void ServerResponseHandler::handleResponse(osiSockAddr* responseFrom,
|
|||||||
|
|
||||||
void ServerConnectionValidationHandler::handleResponse(
|
void ServerConnectionValidationHandler::handleResponse(
|
||||||
osiSockAddr* responseFrom, Transport::shared_pointer const & transport, int8 version,
|
osiSockAddr* responseFrom, Transport::shared_pointer const & transport, int8 version,
|
||||||
int8 command, int payloadSize,
|
int8 command, size_t payloadSize,
|
||||||
ByteBuffer* payloadBuffer)
|
ByteBuffer* payloadBuffer)
|
||||||
{
|
{
|
||||||
AbstractServerResponseHandler::handleResponse(responseFrom,
|
AbstractServerResponseHandler::handleResponse(responseFrom,
|
||||||
@@ -116,7 +116,7 @@ void ServerConnectionValidationHandler::handleResponse(
|
|||||||
|
|
||||||
void ServerEchoHandler::handleResponse(osiSockAddr* responseFrom,
|
void ServerEchoHandler::handleResponse(osiSockAddr* responseFrom,
|
||||||
Transport::shared_pointer const & transport, int8 version, int8 command,
|
Transport::shared_pointer const & transport, int8 version, int8 command,
|
||||||
int payloadSize, ByteBuffer* payloadBuffer)
|
size_t payloadSize, ByteBuffer* payloadBuffer)
|
||||||
{
|
{
|
||||||
AbstractServerResponseHandler::handleResponse(responseFrom,
|
AbstractServerResponseHandler::handleResponse(responseFrom,
|
||||||
transport, version, command, payloadSize, payloadBuffer);
|
transport, version, command, payloadSize, payloadBuffer);
|
||||||
@@ -128,7 +128,7 @@ void ServerEchoHandler::handleResponse(osiSockAddr* responseFrom,
|
|||||||
|
|
||||||
void ServerIntrospectionSearchHandler::handleResponse(osiSockAddr* responseFrom,
|
void ServerIntrospectionSearchHandler::handleResponse(osiSockAddr* responseFrom,
|
||||||
Transport::shared_pointer const & transport, int8 version, int8 command,
|
Transport::shared_pointer const & transport, int8 version, int8 command,
|
||||||
int payloadSize, ByteBuffer* payloadBuffer)
|
size_t payloadSize, ByteBuffer* payloadBuffer)
|
||||||
{
|
{
|
||||||
AbstractServerResponseHandler::handleResponse(responseFrom,
|
AbstractServerResponseHandler::handleResponse(responseFrom,
|
||||||
transport, version, command, payloadSize, payloadBuffer);
|
transport, version, command, payloadSize, payloadBuffer);
|
||||||
@@ -149,7 +149,7 @@ ServerSearchHandler::~ServerSearchHandler()
|
|||||||
|
|
||||||
void ServerSearchHandler::handleResponse(osiSockAddr* responseFrom,
|
void ServerSearchHandler::handleResponse(osiSockAddr* responseFrom,
|
||||||
Transport::shared_pointer const & transport, int8 version, int8 command,
|
Transport::shared_pointer const & transport, int8 version, int8 command,
|
||||||
int payloadSize, ByteBuffer* payloadBuffer)
|
size_t payloadSize, ByteBuffer* payloadBuffer)
|
||||||
{
|
{
|
||||||
AbstractServerResponseHandler::handleResponse(responseFrom,
|
AbstractServerResponseHandler::handleResponse(responseFrom,
|
||||||
transport, version, command, payloadSize, payloadBuffer);
|
transport, version, command, payloadSize, payloadBuffer);
|
||||||
@@ -273,7 +273,7 @@ void ServerChannelFindRequesterImpl::send(ByteBuffer* buffer, TransportSendContr
|
|||||||
/****************************************************************************************/
|
/****************************************************************************************/
|
||||||
void ServerCreateChannelHandler::handleResponse(osiSockAddr* responseFrom,
|
void ServerCreateChannelHandler::handleResponse(osiSockAddr* responseFrom,
|
||||||
Transport::shared_pointer const & transport, int8 version, int8 command,
|
Transport::shared_pointer const & transport, int8 version, int8 command,
|
||||||
int payloadSize, ByteBuffer* payloadBuffer)
|
size_t payloadSize, ByteBuffer* payloadBuffer)
|
||||||
{
|
{
|
||||||
AbstractServerResponseHandler::handleResponse(responseFrom,
|
AbstractServerResponseHandler::handleResponse(responseFrom,
|
||||||
transport, version, command, payloadSize, payloadBuffer);
|
transport, version, command, payloadSize, payloadBuffer);
|
||||||
@@ -424,7 +424,7 @@ String ServerChannelRequesterImpl::getRequesterName()
|
|||||||
|
|
||||||
void ServerChannelRequesterImpl::message(const String message, const MessageType messageType)
|
void ServerChannelRequesterImpl::message(const String message, const MessageType messageType)
|
||||||
{
|
{
|
||||||
LOG(logLevelDebug, "[%s] %s", messageTypeName[messageType].c_str(), message.c_str());
|
LOG(logLevelDebug, "[%s] %s", getMessageTypeName(messageType).c_str(), message.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
void ServerChannelRequesterImpl::lock()
|
void ServerChannelRequesterImpl::lock()
|
||||||
@@ -479,7 +479,7 @@ void ServerChannelRequesterImpl::createChannelFailedResponse(ByteBuffer* buffer,
|
|||||||
|
|
||||||
void ServerDestroyChannelHandler::handleResponse(osiSockAddr* responseFrom,
|
void ServerDestroyChannelHandler::handleResponse(osiSockAddr* responseFrom,
|
||||||
Transport::shared_pointer const & transport, int8 version, int8 command,
|
Transport::shared_pointer const & transport, int8 version, int8 command,
|
||||||
int payloadSize, ByteBuffer* payloadBuffer)
|
size_t payloadSize, ByteBuffer* payloadBuffer)
|
||||||
{
|
{
|
||||||
AbstractServerResponseHandler::handleResponse(responseFrom,
|
AbstractServerResponseHandler::handleResponse(responseFrom,
|
||||||
transport, version, command, payloadSize, payloadBuffer);
|
transport, version, command, payloadSize, payloadBuffer);
|
||||||
@@ -520,7 +520,7 @@ void ServerDestroyChannelHandler::handleResponse(osiSockAddr* responseFrom,
|
|||||||
|
|
||||||
void ServerGetHandler::handleResponse(osiSockAddr* responseFrom,
|
void ServerGetHandler::handleResponse(osiSockAddr* responseFrom,
|
||||||
Transport::shared_pointer const & transport, int8 version, int8 command,
|
Transport::shared_pointer const & transport, int8 version, int8 command,
|
||||||
int payloadSize, ByteBuffer* payloadBuffer)
|
size_t payloadSize, ByteBuffer* payloadBuffer)
|
||||||
{
|
{
|
||||||
AbstractServerResponseHandler::handleResponse(responseFrom,
|
AbstractServerResponseHandler::handleResponse(responseFrom,
|
||||||
transport, version, command, payloadSize, payloadBuffer);
|
transport, version, command, payloadSize, payloadBuffer);
|
||||||
@@ -710,7 +710,7 @@ void ServerChannelGetRequesterImpl::send(ByteBuffer* buffer, TransportSendContro
|
|||||||
/****************************************************************************************/
|
/****************************************************************************************/
|
||||||
void ServerPutHandler::handleResponse(osiSockAddr* responseFrom,
|
void ServerPutHandler::handleResponse(osiSockAddr* responseFrom,
|
||||||
Transport::shared_pointer const & transport, int8 version, int8 command,
|
Transport::shared_pointer const & transport, int8 version, int8 command,
|
||||||
int payloadSize, ByteBuffer* payloadBuffer) {
|
size_t payloadSize, ByteBuffer* payloadBuffer) {
|
||||||
AbstractServerResponseHandler::handleResponse(responseFrom,
|
AbstractServerResponseHandler::handleResponse(responseFrom,
|
||||||
transport, version, command, payloadSize, payloadBuffer);
|
transport, version, command, payloadSize, payloadBuffer);
|
||||||
|
|
||||||
@@ -922,7 +922,7 @@ void ServerChannelPutRequesterImpl::send(ByteBuffer* buffer, TransportSendContro
|
|||||||
/****************************************************************************************/
|
/****************************************************************************************/
|
||||||
void ServerPutGetHandler::handleResponse(osiSockAddr* responseFrom,
|
void ServerPutGetHandler::handleResponse(osiSockAddr* responseFrom,
|
||||||
Transport::shared_pointer const & transport, int8 version, int8 command,
|
Transport::shared_pointer const & transport, int8 version, int8 command,
|
||||||
int payloadSize, ByteBuffer* payloadBuffer) {
|
size_t payloadSize, ByteBuffer* payloadBuffer) {
|
||||||
AbstractServerResponseHandler::handleResponse(responseFrom,
|
AbstractServerResponseHandler::handleResponse(responseFrom,
|
||||||
transport, version, command, payloadSize, payloadBuffer);
|
transport, version, command, payloadSize, payloadBuffer);
|
||||||
|
|
||||||
@@ -1152,7 +1152,7 @@ void ServerChannelPutGetRequesterImpl::send(ByteBuffer* buffer, TransportSendCon
|
|||||||
/****************************************************************************************/
|
/****************************************************************************************/
|
||||||
void ServerMonitorHandler::handleResponse(osiSockAddr* responseFrom,
|
void ServerMonitorHandler::handleResponse(osiSockAddr* responseFrom,
|
||||||
Transport::shared_pointer const & transport, int8 version, int8 command,
|
Transport::shared_pointer const & transport, int8 version, int8 command,
|
||||||
int payloadSize, ByteBuffer* payloadBuffer) {
|
size_t payloadSize, ByteBuffer* payloadBuffer) {
|
||||||
AbstractServerResponseHandler::handleResponse(responseFrom,
|
AbstractServerResponseHandler::handleResponse(responseFrom,
|
||||||
transport, version, command, payloadSize, payloadBuffer);
|
transport, version, command, payloadSize, payloadBuffer);
|
||||||
|
|
||||||
@@ -1246,7 +1246,7 @@ void ServerMonitorRequesterImpl::activate(PVStructure::shared_pointer const & pv
|
|||||||
INIT_EXCEPTION_GUARD(CMD_MONITOR, _channelMonitor = _channel->getChannel()->createMonitor(thisPointer, pvRequest));
|
INIT_EXCEPTION_GUARD(CMD_MONITOR, _channelMonitor = _channel->getChannel()->createMonitor(thisPointer, pvRequest));
|
||||||
}
|
}
|
||||||
|
|
||||||
void ServerMonitorRequesterImpl::monitorConnect(const Status& status, Monitor::shared_pointer const & monitor, epics::pvData::StructureConstPtr const & structure)
|
void ServerMonitorRequesterImpl::monitorConnect(const Status& status, Monitor::shared_pointer & monitor, epics::pvData::StructureConstPtr const & structure)
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
Lock guard(_mutex);
|
Lock guard(_mutex);
|
||||||
@@ -1352,14 +1352,14 @@ void ServerMonitorRequesterImpl::send(ByteBuffer* buffer, TransportSendControl*
|
|||||||
buffer->putByte((int8)request);
|
buffer->putByte((int8)request);
|
||||||
|
|
||||||
// changedBitSet and data, if not notify only (i.e. queueSize == -1)
|
// changedBitSet and data, if not notify only (i.e. queueSize == -1)
|
||||||
BitSet::shared_pointer changedBitSet = element->getChangedBitSet();
|
BitSet::shared_pointer changedBitSet = element->changedBitSet;
|
||||||
if (changedBitSet != NULL)
|
if (changedBitSet != NULL)
|
||||||
{
|
{
|
||||||
changedBitSet->serialize(buffer, control);
|
changedBitSet->serialize(buffer, control);
|
||||||
element->getPVStructure()->serialize(buffer, control, changedBitSet.get());
|
element->pvStructurePtr->serialize(buffer, control, changedBitSet.get());
|
||||||
|
|
||||||
// overrunBitset
|
// overrunBitset
|
||||||
element->getOverrunBitSet()->serialize(buffer, control);
|
element->overrunBitSet->serialize(buffer, control);
|
||||||
}
|
}
|
||||||
|
|
||||||
monitor->release(element);
|
monitor->release(element);
|
||||||
@@ -1370,7 +1370,7 @@ void ServerMonitorRequesterImpl::send(ByteBuffer* buffer, TransportSendControl*
|
|||||||
/****************************************************************************************/
|
/****************************************************************************************/
|
||||||
void ServerArrayHandler::handleResponse(osiSockAddr* responseFrom,
|
void ServerArrayHandler::handleResponse(osiSockAddr* responseFrom,
|
||||||
Transport::shared_pointer const & transport, int8 version, int8 command,
|
Transport::shared_pointer const & transport, int8 version, int8 command,
|
||||||
int payloadSize, ByteBuffer* payloadBuffer) {
|
size_t payloadSize, ByteBuffer* payloadBuffer) {
|
||||||
AbstractServerResponseHandler::handleResponse(responseFrom,
|
AbstractServerResponseHandler::handleResponse(responseFrom,
|
||||||
transport, version, command, payloadSize, payloadBuffer);
|
transport, version, command, payloadSize, payloadBuffer);
|
||||||
|
|
||||||
@@ -1595,7 +1595,7 @@ void ServerChannelArrayRequesterImpl::send(ByteBuffer* buffer, TransportSendCont
|
|||||||
/****************************************************************************************/
|
/****************************************************************************************/
|
||||||
void ServerCancelRequestHandler::handleResponse(osiSockAddr* responseFrom,
|
void ServerCancelRequestHandler::handleResponse(osiSockAddr* responseFrom,
|
||||||
Transport::shared_pointer const & transport, int8 version, int8 command,
|
Transport::shared_pointer const & transport, int8 version, int8 command,
|
||||||
int payloadSize, ByteBuffer* payloadBuffer) {
|
size_t payloadSize, ByteBuffer* payloadBuffer) {
|
||||||
AbstractServerResponseHandler::handleResponse(responseFrom,
|
AbstractServerResponseHandler::handleResponse(responseFrom,
|
||||||
transport, version, command, payloadSize, payloadBuffer);
|
transport, version, command, payloadSize, payloadBuffer);
|
||||||
|
|
||||||
@@ -1635,7 +1635,7 @@ void ServerCancelRequestHandler::failureResponse(Transport::shared_pointer const
|
|||||||
/****************************************************************************************/
|
/****************************************************************************************/
|
||||||
void ServerProcessHandler::handleResponse(osiSockAddr* responseFrom,
|
void ServerProcessHandler::handleResponse(osiSockAddr* responseFrom,
|
||||||
Transport::shared_pointer const & transport, int8 version, int8 command,
|
Transport::shared_pointer const & transport, int8 version, int8 command,
|
||||||
int payloadSize, ByteBuffer* payloadBuffer) {
|
size_t payloadSize, ByteBuffer* payloadBuffer) {
|
||||||
AbstractServerResponseHandler::handleResponse(responseFrom,
|
AbstractServerResponseHandler::handleResponse(responseFrom,
|
||||||
transport, version, command, payloadSize, payloadBuffer);
|
transport, version, command, payloadSize, payloadBuffer);
|
||||||
|
|
||||||
@@ -1794,7 +1794,7 @@ void ServerChannelProcessRequesterImpl::send(ByteBuffer* buffer, TransportSendCo
|
|||||||
/****************************************************************************************/
|
/****************************************************************************************/
|
||||||
void ServerGetFieldHandler::handleResponse(osiSockAddr* responseFrom,
|
void ServerGetFieldHandler::handleResponse(osiSockAddr* responseFrom,
|
||||||
Transport::shared_pointer const & transport, int8 version, int8 command,
|
Transport::shared_pointer const & transport, int8 version, int8 command,
|
||||||
int payloadSize, ByteBuffer* payloadBuffer) {
|
size_t payloadSize, ByteBuffer* payloadBuffer) {
|
||||||
AbstractServerResponseHandler::handleResponse(responseFrom,
|
AbstractServerResponseHandler::handleResponse(responseFrom,
|
||||||
transport, version, command, payloadSize, payloadBuffer);
|
transport, version, command, payloadSize, payloadBuffer);
|
||||||
|
|
||||||
@@ -1873,7 +1873,7 @@ void ServerGetFieldRequesterImpl::send(ByteBuffer* buffer, TransportSendControl*
|
|||||||
/****************************************************************************************/
|
/****************************************************************************************/
|
||||||
void ServerRPCHandler::handleResponse(osiSockAddr* responseFrom,
|
void ServerRPCHandler::handleResponse(osiSockAddr* responseFrom,
|
||||||
Transport::shared_pointer const & transport, int8 version, int8 command,
|
Transport::shared_pointer const & transport, int8 version, int8 command,
|
||||||
int payloadSize, ByteBuffer* payloadBuffer) {
|
size_t payloadSize, ByteBuffer* payloadBuffer) {
|
||||||
AbstractServerResponseHandler::handleResponse(responseFrom,
|
AbstractServerResponseHandler::handleResponse(responseFrom,
|
||||||
transport, version, command, payloadSize, payloadBuffer);
|
transport, version, command, payloadSize, payloadBuffer);
|
||||||
|
|
||||||
@@ -2034,7 +2034,7 @@ void ServerChannelRPCRequesterImpl::send(ByteBuffer* buffer, TransportSendContro
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
introspectionRegistry->serializeStructure(buffer, control, _pvResponse.get());
|
introspectionRegistry->serializeStructure(buffer, control, _pvResponse);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ namespace pvAccess {
|
|||||||
|
|
||||||
virtual void handleResponse(osiSockAddr* responseFrom,
|
virtual void handleResponse(osiSockAddr* responseFrom,
|
||||||
Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command,
|
Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command,
|
||||||
int payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
|
std::size_t payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -58,7 +58,7 @@ namespace pvAccess {
|
|||||||
|
|
||||||
virtual void handleResponse(osiSockAddr* responseFrom,
|
virtual void handleResponse(osiSockAddr* responseFrom,
|
||||||
Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command,
|
Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command,
|
||||||
int payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
|
std::size_t payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
|
||||||
private:
|
private:
|
||||||
/**
|
/**
|
||||||
* Table of response handlers for each command ID.
|
* Table of response handlers for each command ID.
|
||||||
@@ -78,7 +78,7 @@ namespace pvAccess {
|
|||||||
|
|
||||||
virtual void handleResponse(osiSockAddr* responseFrom,
|
virtual void handleResponse(osiSockAddr* responseFrom,
|
||||||
Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command,
|
Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command,
|
||||||
int payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
|
std::size_t payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -102,7 +102,7 @@ namespace pvAccess {
|
|||||||
|
|
||||||
virtual void handleResponse(osiSockAddr* responseFrom,
|
virtual void handleResponse(osiSockAddr* responseFrom,
|
||||||
Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command,
|
Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command,
|
||||||
int payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
|
std::size_t payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
|
||||||
};
|
};
|
||||||
|
|
||||||
class EchoTransportSender : public TransportSender {
|
class EchoTransportSender : public TransportSender {
|
||||||
@@ -142,7 +142,7 @@ namespace pvAccess {
|
|||||||
|
|
||||||
virtual void handleResponse(osiSockAddr* responseFrom,
|
virtual void handleResponse(osiSockAddr* responseFrom,
|
||||||
Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command,
|
Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command,
|
||||||
int payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
|
std::size_t payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
|
||||||
};
|
};
|
||||||
|
|
||||||
/****************************************************************************************/
|
/****************************************************************************************/
|
||||||
@@ -161,7 +161,7 @@ namespace pvAccess {
|
|||||||
|
|
||||||
virtual void handleResponse(osiSockAddr* responseFrom,
|
virtual void handleResponse(osiSockAddr* responseFrom,
|
||||||
Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command,
|
Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command,
|
||||||
int payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
|
std::size_t payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::vector<ChannelProvider::shared_pointer> _providers;
|
std::vector<ChannelProvider::shared_pointer> _providers;
|
||||||
@@ -208,7 +208,7 @@ namespace pvAccess {
|
|||||||
|
|
||||||
virtual void handleResponse(osiSockAddr* responseFrom,
|
virtual void handleResponse(osiSockAddr* responseFrom,
|
||||||
Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command,
|
Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command,
|
||||||
int payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
|
std::size_t payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void disconnect(Transport::shared_pointer const & transport);
|
void disconnect(Transport::shared_pointer const & transport);
|
||||||
@@ -257,7 +257,7 @@ namespace pvAccess {
|
|||||||
|
|
||||||
virtual void handleResponse(osiSockAddr* responseFrom,
|
virtual void handleResponse(osiSockAddr* responseFrom,
|
||||||
Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command,
|
Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command,
|
||||||
int payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
|
std::size_t payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -299,7 +299,7 @@ namespace pvAccess {
|
|||||||
|
|
||||||
virtual void handleResponse(osiSockAddr* responseFrom,
|
virtual void handleResponse(osiSockAddr* responseFrom,
|
||||||
Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command,
|
Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command,
|
||||||
int payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
|
std::size_t payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
|
||||||
};
|
};
|
||||||
|
|
||||||
class ServerChannelGetRequesterImpl :
|
class ServerChannelGetRequesterImpl :
|
||||||
@@ -352,7 +352,7 @@ namespace pvAccess {
|
|||||||
|
|
||||||
virtual void handleResponse(osiSockAddr* responseFrom,
|
virtual void handleResponse(osiSockAddr* responseFrom,
|
||||||
Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command,
|
Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command,
|
||||||
int payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
|
std::size_t payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
|
||||||
};
|
};
|
||||||
|
|
||||||
class ServerChannelPutRequesterImpl :
|
class ServerChannelPutRequesterImpl :
|
||||||
@@ -405,7 +405,7 @@ namespace pvAccess {
|
|||||||
|
|
||||||
virtual void handleResponse(osiSockAddr* responseFrom,
|
virtual void handleResponse(osiSockAddr* responseFrom,
|
||||||
Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command,
|
Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command,
|
||||||
int payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
|
std::size_t payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
|
||||||
};
|
};
|
||||||
|
|
||||||
class ServerChannelPutGetRequesterImpl :
|
class ServerChannelPutGetRequesterImpl :
|
||||||
@@ -459,7 +459,7 @@ namespace pvAccess {
|
|||||||
|
|
||||||
virtual void handleResponse(osiSockAddr* responseFrom,
|
virtual void handleResponse(osiSockAddr* responseFrom,
|
||||||
Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command,
|
Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command,
|
||||||
int payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
|
std::size_t payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -482,7 +482,7 @@ namespace pvAccess {
|
|||||||
ServerChannelImpl::shared_pointer const & channel, const pvAccessID ioid,
|
ServerChannelImpl::shared_pointer const & channel, const pvAccessID ioid,
|
||||||
Transport::shared_pointer const & transport,epics::pvData::PVStructure::shared_pointer const & pvRequest);
|
Transport::shared_pointer const & transport,epics::pvData::PVStructure::shared_pointer const & pvRequest);
|
||||||
|
|
||||||
void monitorConnect(const epics::pvData::Status& status, epics::pvData::Monitor::shared_pointer const & monitor, epics::pvData::StructureConstPtr const & structure);
|
void monitorConnect(const epics::pvData::Status& status, epics::pvData::Monitor::shared_pointer & monitor, epics::pvData::StructureConstPtr const & structure);
|
||||||
void unlisten(epics::pvData::Monitor::shared_pointer const & monitor);
|
void unlisten(epics::pvData::Monitor::shared_pointer const & monitor);
|
||||||
void monitorEvent(epics::pvData::Monitor::shared_pointer const & monitor);
|
void monitorEvent(epics::pvData::Monitor::shared_pointer const & monitor);
|
||||||
void lock();
|
void lock();
|
||||||
@@ -511,7 +511,7 @@ namespace pvAccess {
|
|||||||
|
|
||||||
virtual void handleResponse(osiSockAddr* responseFrom,
|
virtual void handleResponse(osiSockAddr* responseFrom,
|
||||||
Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command,
|
Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command,
|
||||||
int payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
|
std::size_t payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
|
||||||
};
|
};
|
||||||
|
|
||||||
class ServerChannelArrayRequesterImpl :
|
class ServerChannelArrayRequesterImpl :
|
||||||
@@ -565,7 +565,7 @@ namespace pvAccess {
|
|||||||
|
|
||||||
virtual void handleResponse(osiSockAddr* responseFrom,
|
virtual void handleResponse(osiSockAddr* responseFrom,
|
||||||
Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command,
|
Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command,
|
||||||
int payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
|
std::size_t payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
|
||||||
private:
|
private:
|
||||||
|
|
||||||
void failureResponse(Transport::shared_pointer const & transport, pvAccessID ioid, const epics::pvData::Status& errorStatus);
|
void failureResponse(Transport::shared_pointer const & transport, pvAccessID ioid, const epics::pvData::Status& errorStatus);
|
||||||
@@ -585,7 +585,7 @@ namespace pvAccess {
|
|||||||
|
|
||||||
virtual void handleResponse(osiSockAddr* responseFrom,
|
virtual void handleResponse(osiSockAddr* responseFrom,
|
||||||
Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command,
|
Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command,
|
||||||
int payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
|
std::size_t payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
|
||||||
};
|
};
|
||||||
|
|
||||||
class ServerChannelProcessRequesterImpl :
|
class ServerChannelProcessRequesterImpl :
|
||||||
@@ -634,7 +634,7 @@ namespace pvAccess {
|
|||||||
|
|
||||||
virtual void handleResponse(osiSockAddr* responseFrom,
|
virtual void handleResponse(osiSockAddr* responseFrom,
|
||||||
Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command,
|
Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command,
|
||||||
int payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
|
std::size_t payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
|
||||||
private:
|
private:
|
||||||
void getFieldFailureResponse(Transport::shared_pointer const & transport, const pvAccessID ioid, const epics::pvData::Status& errorStatus);
|
void getFieldFailureResponse(Transport::shared_pointer const & transport, const pvAccessID ioid, const epics::pvData::Status& errorStatus);
|
||||||
};
|
};
|
||||||
@@ -706,7 +706,7 @@ namespace pvAccess {
|
|||||||
|
|
||||||
virtual void handleResponse(osiSockAddr* responseFrom,
|
virtual void handleResponse(osiSockAddr* responseFrom,
|
||||||
Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command,
|
Transport::shared_pointer const & transport, epics::pvData::int8 version, epics::pvData::int8 command,
|
||||||
int payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
|
std::size_t payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
|
||||||
};
|
};
|
||||||
|
|
||||||
class ServerChannelRPCRequesterImpl :
|
class ServerChannelRPCRequesterImpl :
|
||||||
|
|||||||
@@ -17,15 +17,11 @@ namespace pvAccess {
|
|||||||
const int8 IntrospectionRegistry::NULL_TYPE_CODE = (int8)-1;
|
const int8 IntrospectionRegistry::NULL_TYPE_CODE = (int8)-1;
|
||||||
const int8 IntrospectionRegistry::ONLY_ID_TYPE_CODE = (int8)-2;
|
const int8 IntrospectionRegistry::ONLY_ID_TYPE_CODE = (int8)-2;
|
||||||
const int8 IntrospectionRegistry::FULL_WITH_ID_TYPE_CODE = (int8)-3;
|
const int8 IntrospectionRegistry::FULL_WITH_ID_TYPE_CODE = (int8)-3;
|
||||||
PVDataCreate* IntrospectionRegistry::_pvDataCreate = 0;
|
PVDataCreatePtr IntrospectionRegistry::_pvDataCreate (getPVDataCreate());
|
||||||
FieldCreate* IntrospectionRegistry::_fieldCreate = 0;
|
FieldCreatePtr IntrospectionRegistry::_fieldCreate(getFieldCreate());
|
||||||
|
|
||||||
IntrospectionRegistry::IntrospectionRegistry(bool serverSide)
|
IntrospectionRegistry::IntrospectionRegistry(bool serverSide)
|
||||||
{
|
{
|
||||||
// TODO not optimal
|
|
||||||
_pvDataCreate = getPVDataCreate();
|
|
||||||
_fieldCreate = getFieldCreate();
|
|
||||||
|
|
||||||
_direction = serverSide ? 1 : -1;
|
_direction = serverSide ? 1 : -1;
|
||||||
reset();
|
reset();
|
||||||
}
|
}
|
||||||
@@ -181,7 +177,7 @@ void IntrospectionRegistry::serialize(FieldConstPtr field, StructureConstPtr par
|
|||||||
FieldConstPtr IntrospectionRegistry::deserialize(ByteBuffer* buffer, DeserializableControl* control, IntrospectionRegistry* registry)
|
FieldConstPtr IntrospectionRegistry::deserialize(ByteBuffer* buffer, DeserializableControl* control, IntrospectionRegistry* registry)
|
||||||
{
|
{
|
||||||
control->ensureData(1);
|
control->ensureData(1);
|
||||||
uintptr_t pos = buffer->getPosition();
|
size_t pos = buffer->getPosition();
|
||||||
const int8 typeCode = buffer->getByte();
|
const int8 typeCode = buffer->getByte();
|
||||||
if(typeCode == IntrospectionRegistry::NULL_TYPE_CODE)
|
if(typeCode == IntrospectionRegistry::NULL_TYPE_CODE)
|
||||||
{
|
{
|
||||||
@@ -225,12 +221,11 @@ void IntrospectionRegistry::serializeStructure(ByteBuffer* buffer, SerializableC
|
|||||||
|
|
||||||
PVStructurePtr IntrospectionRegistry::deserializeStructure(ByteBuffer* buffer, DeserializableControl* control)
|
PVStructurePtr IntrospectionRegistry::deserializeStructure(ByteBuffer* buffer, DeserializableControl* control)
|
||||||
{
|
{
|
||||||
PVStructurePtr pvStructure = NULL;
|
PVStructurePtr pvStructure;
|
||||||
FieldConstPtr structureField = deserialize(buffer, control);
|
FieldConstPtr structureField = deserialize(buffer, control);
|
||||||
if (structureField != NULL)
|
if (structureField.get() != NULL)
|
||||||
{
|
{
|
||||||
pvStructure = _pvDataCreate->createPVStructure(NULL,
|
pvStructure = _pvDataCreate->createPVStructure(static_pointer_cast<const Structure>(structureField));
|
||||||
static_pointer_cast<const Structure>(structureField));
|
|
||||||
pvStructure->deserialize(buffer, control);
|
pvStructure->deserialize(buffer, control);
|
||||||
}
|
}
|
||||||
return pvStructure;
|
return pvStructure;
|
||||||
@@ -252,12 +247,9 @@ PVStructurePtr IntrospectionRegistry::deserializeStructureAndCreatePVStructure(B
|
|||||||
{
|
{
|
||||||
FieldConstPtr field = deserialize(buffer, control);
|
FieldConstPtr field = deserialize(buffer, control);
|
||||||
if (field == NULL)
|
if (field == NULL)
|
||||||
{
|
return PVStructurePtr();
|
||||||
return NULL;
|
|
||||||
}
|
return _pvDataCreate->createPVStructure(static_pointer_cast<const Structure>(field));
|
||||||
PVStructurePtr retVal = _pvDataCreate->createPVStructure(NULL,
|
|
||||||
static_pointer_cast<const Structure>(field));
|
|
||||||
return retVal;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void IntrospectionRegistry::serializeStatus(ByteBuffer* buffer, SerializableControl* control, const Status& status)
|
void IntrospectionRegistry::serializeStatus(ByteBuffer* buffer, SerializableControl* control, const Status& status)
|
||||||
|
|||||||
@@ -211,12 +211,12 @@ typedef std::map<const short,epics::pvData::FieldConstPtr> registryMap_t;
|
|||||||
/**
|
/**
|
||||||
* PVField factory.
|
* PVField factory.
|
||||||
*/
|
*/
|
||||||
static epics::pvData::PVDataCreate* _pvDataCreate;
|
static epics::pvData::PVDataCreatePtr _pvDataCreate;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Field factory.
|
* Field factory.
|
||||||
*/
|
*/
|
||||||
static epics::pvData::FieldCreate* _fieldCreate;
|
static epics::pvData::FieldCreatePtr _fieldCreate;
|
||||||
|
|
||||||
bool registryContainsValue(epics::pvData::FieldConstPtr field, short& key);
|
bool registryContainsValue(epics::pvData::FieldConstPtr field, short& key);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -124,13 +124,11 @@ void convertToString(StringBuilder buffer,PVField * pv,int notFirst)
|
|||||||
void convertStructure(StringBuilder buffer,PVStructure *data,int notFirst)
|
void convertStructure(StringBuilder buffer,PVStructure *data,int notFirst)
|
||||||
{
|
{
|
||||||
PVFieldPtrArray fieldsData = data->getPVFields();
|
PVFieldPtrArray fieldsData = data->getPVFields();
|
||||||
if (fieldsData != 0) {
|
int length = data->getStructure()->getNumberFields();
|
||||||
int length = data->getStructure()->getNumberFields();
|
for(int i=0; i<length; i++) {
|
||||||
for(int i=0; i<length; i++) {
|
PVFieldPtr fieldField = fieldsData[i];
|
||||||
PVField *fieldField = fieldsData[i];
|
convertToString(buffer,fieldField.get(),notFirst + 1);
|
||||||
convertToString(buffer,fieldField,notFirst + 1);
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void convertArray(StringBuilder buffer,PVScalarArray * pv,int notFirst)
|
void convertArray(StringBuilder buffer,PVScalarArray * pv,int notFirst)
|
||||||
@@ -142,9 +140,9 @@ void convertArray(StringBuilder buffer,PVScalarArray * pv,int notFirst)
|
|||||||
PVBooleanArray *pvdata = static_cast<PVBooleanArray*>(pv);
|
PVBooleanArray *pvdata = static_cast<PVBooleanArray*>(pv);
|
||||||
BooleanArrayData data = BooleanArrayData();
|
BooleanArrayData data = BooleanArrayData();
|
||||||
*buffer += "[";
|
*buffer += "[";
|
||||||
for(int i=0; i < pvdata->getLength(); i++) {
|
for(size_t i=0; i < pvdata->getLength(); i++) {
|
||||||
if(i!=0) *buffer += ",";
|
if(i!=0) *buffer += ",";
|
||||||
int num = pvdata->get(i,1,&data);
|
int num = pvdata->get(i,1,data);
|
||||||
if(num==1) {
|
if(num==1) {
|
||||||
BooleanArray value = data.data;
|
BooleanArray value = data.data;
|
||||||
if(value[data.offset]) {
|
if(value[data.offset]) {
|
||||||
@@ -163,9 +161,9 @@ void convertArray(StringBuilder buffer,PVScalarArray * pv,int notFirst)
|
|||||||
PVByteArray *pvdata = static_cast<PVByteArray*>(pv);
|
PVByteArray *pvdata = static_cast<PVByteArray*>(pv);
|
||||||
ByteArrayData data = ByteArrayData();
|
ByteArrayData data = ByteArrayData();
|
||||||
*buffer += "[";
|
*buffer += "[";
|
||||||
for(int i=0; i < pvdata->getLength(); i++) {
|
for(size_t i=0; i < pvdata->getLength(); i++) {
|
||||||
if(i!=0) *buffer += ",";
|
if(i!=0) *buffer += ",";
|
||||||
int num = pvdata->get(i,1,&data);
|
int num = pvdata->get(i,1,data);
|
||||||
if(num==1) {
|
if(num==1) {
|
||||||
int val = data.data[data.offset];
|
int val = data.data[data.offset];
|
||||||
char buf[16];
|
char buf[16];
|
||||||
@@ -182,9 +180,9 @@ void convertArray(StringBuilder buffer,PVScalarArray * pv,int notFirst)
|
|||||||
PVShortArray *pvdata = static_cast<PVShortArray*>(pv);
|
PVShortArray *pvdata = static_cast<PVShortArray*>(pv);
|
||||||
ShortArrayData data = ShortArrayData();
|
ShortArrayData data = ShortArrayData();
|
||||||
*buffer += "[";
|
*buffer += "[";
|
||||||
for(int i=0; i < pvdata->getLength(); i++) {
|
for(size_t i=0; i < pvdata->getLength(); i++) {
|
||||||
if(i!=0) *buffer += ',';
|
if(i!=0) *buffer += ',';
|
||||||
int num = pvdata->get(i,1,&data);
|
int num = pvdata->get(i,1,data);
|
||||||
if(num==1) {
|
if(num==1) {
|
||||||
int val = data.data[data.offset];
|
int val = data.data[data.offset];
|
||||||
char buf[16];
|
char buf[16];
|
||||||
@@ -201,9 +199,9 @@ void convertArray(StringBuilder buffer,PVScalarArray * pv,int notFirst)
|
|||||||
PVIntArray *pvdata = static_cast<PVIntArray*>(pv);
|
PVIntArray *pvdata = static_cast<PVIntArray*>(pv);
|
||||||
IntArrayData data = IntArrayData();
|
IntArrayData data = IntArrayData();
|
||||||
*buffer += "[";
|
*buffer += "[";
|
||||||
for(int i=0; i < pvdata->getLength(); i++) {
|
for(size_t i=0; i < pvdata->getLength(); i++) {
|
||||||
if(i!=0) *buffer += ',';
|
if(i!=0) *buffer += ',';
|
||||||
int num = pvdata->get(i,1,&data);
|
int num = pvdata->get(i,1,data);
|
||||||
if(num==1) {
|
if(num==1) {
|
||||||
int val = data.data[data.offset];
|
int val = data.data[data.offset];
|
||||||
char buf[16];
|
char buf[16];
|
||||||
@@ -220,9 +218,9 @@ void convertArray(StringBuilder buffer,PVScalarArray * pv,int notFirst)
|
|||||||
PVLongArray *pvdata = static_cast<PVLongArray*>(pv);
|
PVLongArray *pvdata = static_cast<PVLongArray*>(pv);
|
||||||
LongArrayData data = LongArrayData();
|
LongArrayData data = LongArrayData();
|
||||||
*buffer += "[";
|
*buffer += "[";
|
||||||
for(int i=0; i < pvdata->getLength(); i++) {
|
for(size_t i=0; i < pvdata->getLength(); i++) {
|
||||||
if(i!=0) *buffer += ',';
|
if(i!=0) *buffer += ',';
|
||||||
int num = pvdata->get(i,1,&data);
|
int num = pvdata->get(i,1,data);
|
||||||
if(num==1) {
|
if(num==1) {
|
||||||
int64 val = data.data[data.offset];
|
int64 val = data.data[data.offset];
|
||||||
char buf[16];
|
char buf[16];
|
||||||
@@ -239,9 +237,9 @@ void convertArray(StringBuilder buffer,PVScalarArray * pv,int notFirst)
|
|||||||
PVFloatArray *pvdata = static_cast<PVFloatArray*>(pv);
|
PVFloatArray *pvdata = static_cast<PVFloatArray*>(pv);
|
||||||
FloatArrayData data = FloatArrayData();
|
FloatArrayData data = FloatArrayData();
|
||||||
*buffer += "[";
|
*buffer += "[";
|
||||||
for(int i=0; i < pvdata->getLength(); i++) {
|
for(size_t i=0; i < pvdata->getLength(); i++) {
|
||||||
if(i!=0) *buffer += ',';
|
if(i!=0) *buffer += ',';
|
||||||
int num = pvdata->get(i,1,&data);
|
int num = pvdata->get(i,1,data);
|
||||||
if(num==1) {
|
if(num==1) {
|
||||||
float val = data.data[data.offset];
|
float val = data.data[data.offset];
|
||||||
char buf[16];
|
char buf[16];
|
||||||
@@ -258,9 +256,9 @@ void convertArray(StringBuilder buffer,PVScalarArray * pv,int notFirst)
|
|||||||
PVDoubleArray *pvdata = static_cast<PVDoubleArray*>(pv);
|
PVDoubleArray *pvdata = static_cast<PVDoubleArray*>(pv);
|
||||||
DoubleArrayData data = DoubleArrayData();
|
DoubleArrayData data = DoubleArrayData();
|
||||||
*buffer += "[";
|
*buffer += "[";
|
||||||
for(int i=0; i < pvdata->getLength(); i++) {
|
for(size_t i=0; i < pvdata->getLength(); i++) {
|
||||||
if(i!=0) *buffer += ',';
|
if(i!=0) *buffer += ',';
|
||||||
int num = pvdata->get(i,1,&data);
|
int num = pvdata->get(i,1,data);
|
||||||
if(num==1) {
|
if(num==1) {
|
||||||
double val = data.data[data.offset];
|
double val = data.data[data.offset];
|
||||||
char buf[16];
|
char buf[16];
|
||||||
@@ -277,9 +275,9 @@ void convertArray(StringBuilder buffer,PVScalarArray * pv,int notFirst)
|
|||||||
PVStringArray *pvdata = static_cast<PVStringArray*>(pv);
|
PVStringArray *pvdata = static_cast<PVStringArray*>(pv);
|
||||||
StringArrayData data = StringArrayData();
|
StringArrayData data = StringArrayData();
|
||||||
*buffer += "[";
|
*buffer += "[";
|
||||||
for(int i=0; i < pvdata->getLength(); i++) {
|
for(size_t i=0; i < pvdata->getLength(); i++) {
|
||||||
if(i!=0) *buffer += ",";
|
if(i!=0) *buffer += ",";
|
||||||
int num = pvdata->get(i,1,&data);
|
int num = pvdata->get(i,1,data);
|
||||||
StringArray value = data.data;
|
StringArray value = data.data;
|
||||||
if(num==1) {
|
if(num==1) {
|
||||||
if(value[data.offset].length()>0) {
|
if(value[data.offset].length()>0) {
|
||||||
@@ -307,13 +305,13 @@ void convertStructureArray(StringBuilder buffer,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
StructureArrayData data = StructureArrayData();
|
StructureArrayData data = StructureArrayData();
|
||||||
pvdata->get(0, length, &data);
|
pvdata->get(0, length, data);
|
||||||
for (int i = 0; i < length; i++) {
|
for (int i = 0; i < length; i++) {
|
||||||
PVStructure *pvStructure = data.data[i];
|
PVStructurePtr pvStructure = data.data[i];
|
||||||
if (pvStructure == 0) {
|
if (pvStructure == 0) {
|
||||||
*buffer += "null";
|
*buffer += "null";
|
||||||
} else {
|
} else {
|
||||||
convertToString(buffer,pvStructure,notFirst+1);
|
convertToString(buffer,pvStructure.get(),notFirst+1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -369,8 +367,8 @@ char *url_encode(char *str) {
|
|||||||
|
|
||||||
void formatNTTable(StringBuilder buffer, PVStructure *pvStruct)
|
void formatNTTable(StringBuilder buffer, PVStructure *pvStruct)
|
||||||
{
|
{
|
||||||
PVStringArray* labels = static_cast<PVStringArray*>(pvStruct->getScalarArrayField("labels", pvString));
|
PVStringArrayPtr labels = static_pointer_cast<PVStringArray>(pvStruct->getScalarArrayField("labels", pvString));
|
||||||
if (labels == 0)
|
if (labels.get() == 0)
|
||||||
return; // TODO
|
return; // TODO
|
||||||
|
|
||||||
int numColumns = labels->getLength();
|
int numColumns = labels->getLength();
|
||||||
@@ -379,23 +377,24 @@ void formatNTTable(StringBuilder buffer, PVStructure *pvStruct)
|
|||||||
|
|
||||||
// next numColumns fields are columns
|
// next numColumns fields are columns
|
||||||
int maxValues = 0;
|
int maxValues = 0;
|
||||||
vector<DoubleArrayData> columnData;
|
// vector<DoubleArrayData> columnData;
|
||||||
|
vector<vector<double>*> columnData;
|
||||||
PVFieldPtrArray fields = pvStruct->getPVFields();
|
PVFieldPtrArray fields = pvStruct->getPVFields();
|
||||||
for (int i = 0; i < numColumns; i++)
|
for (int i = 0; i < numColumns; i++)
|
||||||
{
|
{
|
||||||
DoubleArrayData values;
|
DoubleArrayData values;
|
||||||
// TODO we relay on field ordering here (normativeType, labels, <columns>)
|
// TODO we relay on field ordering here (normativeType, labels, <columns>)
|
||||||
PVDoubleArray* arrayField = static_cast<PVDoubleArray*>(fields[i+2]);
|
PVDoubleArrayPtr arrayField = static_pointer_cast<PVDoubleArray>(fields[i+2]);
|
||||||
int count = arrayField->get(0, arrayField->getLength(), &values);
|
int count = arrayField->get(0, arrayField->getLength(), values);
|
||||||
if (count > maxValues) maxValues = count;
|
if (count > maxValues) maxValues = count;
|
||||||
columnData.push_back(values);
|
columnData.push_back(&values.data);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::cout << std::left;
|
std::cout << std::left;
|
||||||
|
|
||||||
// first print labels
|
// first print labels
|
||||||
StringArrayData data;
|
StringArrayData data;
|
||||||
labels->get(0, numColumns, &data);
|
labels->get(0, numColumns, data);
|
||||||
for (int i = 0; i < numColumns; i++)
|
for (int i = 0; i < numColumns; i++)
|
||||||
{
|
{
|
||||||
std::cout << std::setw(16) << data.data[i];
|
std::cout << std::setw(16) << data.data[i];
|
||||||
@@ -408,7 +407,8 @@ void formatNTTable(StringBuilder buffer, PVStructure *pvStruct)
|
|||||||
{
|
{
|
||||||
for (int i = 0; i < numColumns; i++)
|
for (int i = 0; i < numColumns; i++)
|
||||||
{
|
{
|
||||||
std::cout << std::setw(16) << columnData[i].data[r];
|
// std::cout << std::setw(16) << columnData[i].data[r];
|
||||||
|
std::cout << std::setw(16) << (*columnData[i])[r];
|
||||||
}
|
}
|
||||||
std::cout << std::endl;
|
std::cout << std::endl;
|
||||||
}
|
}
|
||||||
@@ -422,8 +422,8 @@ void toNTString(StringBuilder buffer, PVField *pv,int notFirst)
|
|||||||
{
|
{
|
||||||
PVStructure* pvStruct = static_cast<PVStructure*>(pv);
|
PVStructure* pvStruct = static_cast<PVStructure*>(pv);
|
||||||
// TODO type check, getStringField is verbose
|
// TODO type check, getStringField is verbose
|
||||||
PVString* ntType = static_cast<PVString*>(pvStruct->getSubField("normativeType"));
|
PVStringPtr ntType = static_pointer_cast<PVString>(pvStruct->getSubField("normativeType"));
|
||||||
if (ntType)
|
if (ntType.get())
|
||||||
{
|
{
|
||||||
String value = ntType->get();
|
String value = ntType->get();
|
||||||
|
|
||||||
@@ -508,7 +508,7 @@ class ChannelGetRequesterImpl : public ChannelGetRequester
|
|||||||
|
|
||||||
virtual void message(String message,MessageType messageType)
|
virtual void message(String message,MessageType messageType)
|
||||||
{
|
{
|
||||||
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
|
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")" << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void channelGetConnect(const epics::pvData::Status& status,ChannelGet::shared_pointer const & channelGet,
|
virtual void channelGetConnect(const epics::pvData::Status& status,ChannelGet::shared_pointer const & channelGet,
|
||||||
@@ -610,7 +610,7 @@ class ChannelRPCRequesterImpl : public ChannelRPCRequester
|
|||||||
|
|
||||||
virtual void message(String message,MessageType messageType)
|
virtual void message(String message,MessageType messageType)
|
||||||
{
|
{
|
||||||
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
|
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")" << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void channelRPCConnect(const epics::pvData::Status& status,ChannelRPC::shared_pointer const & channelRPC)
|
virtual void channelRPCConnect(const epics::pvData::Status& status,ChannelRPC::shared_pointer const & channelRPC)
|
||||||
@@ -713,7 +713,7 @@ public:
|
|||||||
|
|
||||||
virtual void message(String message,MessageType messageType)
|
virtual void message(String message,MessageType messageType)
|
||||||
{
|
{
|
||||||
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
|
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")" << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void channelCreated(const epics::pvData::Status& status, Channel::shared_pointer const & channel)
|
virtual void channelCreated(const epics::pvData::Status& status, Channel::shared_pointer const & channel)
|
||||||
@@ -935,15 +935,17 @@ int main (int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
FieldConstPtrArray fields = new FieldConstPtr[parameters.size()];
|
StringArray fieldNames(parameters.size());
|
||||||
|
FieldConstPtrArray fields(parameters.size());
|
||||||
for (vector< pair<string, string> >::iterator iter = parameters.begin();
|
for (vector< pair<string, string> >::iterator iter = parameters.begin();
|
||||||
iter != parameters.end();
|
iter != parameters.end();
|
||||||
iter++, i++)
|
iter++, i++)
|
||||||
{
|
{
|
||||||
fields[i] = getFieldCreate()->createScalar(iter->first, pvString);
|
fieldNames[i] = iter->first;
|
||||||
|
fields[i] = getFieldCreate()->createScalar(pvString);
|
||||||
}
|
}
|
||||||
PVStructure::shared_pointer args(
|
PVStructure::shared_pointer args(
|
||||||
new PVStructure(NULL, getFieldCreate()->createStructure("", parameters.size(), fields)));
|
new PVStructure(getFieldCreate()->createStructure(fieldNames, fields)));
|
||||||
for (vector< pair<string, string> >::iterator iter = parameters.begin();
|
for (vector< pair<string, string> >::iterator iter = parameters.begin();
|
||||||
iter != parameters.end();
|
iter != parameters.end();
|
||||||
iter++)
|
iter++)
|
||||||
|
|||||||
@@ -123,16 +123,14 @@ void convertToString(StringBuilder buffer,PVField * pv,int notFirst)
|
|||||||
void convertStructure(StringBuilder buffer,PVStructure *data,int notFirst)
|
void convertStructure(StringBuilder buffer,PVStructure *data,int notFirst)
|
||||||
{
|
{
|
||||||
PVFieldPtrArray fieldsData = data->getPVFields();
|
PVFieldPtrArray fieldsData = data->getPVFields();
|
||||||
if (fieldsData != 0) {
|
int length = data->getStructure()->getNumberFields();
|
||||||
int length = data->getStructure()->getNumberFields();
|
for(int i=0; i<length; i++) {
|
||||||
for(int i=0; i<length; i++) {
|
PVFieldPtr fieldField = fieldsData[i];
|
||||||
PVField *fieldField = fieldsData[i];
|
convertToString(buffer,fieldField.get(),notFirst + 1);
|
||||||
convertToString(buffer,fieldField,notFirst + 1);
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void convertArray(StringBuilder buffer,PVScalarArray * pv,int notFirst)
|
void convertArray(StringBuilder buffer,PVScalarArray *pv,int notFirst)
|
||||||
{
|
{
|
||||||
ScalarArrayConstPtr array = pv->getScalarArray();
|
ScalarArrayConstPtr array = pv->getScalarArray();
|
||||||
ScalarType type = array->getElementType();
|
ScalarType type = array->getElementType();
|
||||||
@@ -141,9 +139,9 @@ void convertArray(StringBuilder buffer,PVScalarArray * pv,int notFirst)
|
|||||||
PVBooleanArray *pvdata = static_cast<PVBooleanArray*>(pv);
|
PVBooleanArray *pvdata = static_cast<PVBooleanArray*>(pv);
|
||||||
BooleanArrayData data = BooleanArrayData();
|
BooleanArrayData data = BooleanArrayData();
|
||||||
*buffer += "[";
|
*buffer += "[";
|
||||||
for(int i=0; i < pvdata->getLength(); i++) {
|
for(size_t i=0; i < pvdata->getLength(); i++) {
|
||||||
if(i!=0) *buffer += ",";
|
if(i!=0) *buffer += ",";
|
||||||
int num = pvdata->get(i,1,&data);
|
int num = pvdata->get(i,1,data);
|
||||||
if(num==1) {
|
if(num==1) {
|
||||||
BooleanArray value = data.data;
|
BooleanArray value = data.data;
|
||||||
if(value[data.offset]) {
|
if(value[data.offset]) {
|
||||||
@@ -162,9 +160,9 @@ void convertArray(StringBuilder buffer,PVScalarArray * pv,int notFirst)
|
|||||||
PVByteArray *pvdata = static_cast<PVByteArray*>(pv);
|
PVByteArray *pvdata = static_cast<PVByteArray*>(pv);
|
||||||
ByteArrayData data = ByteArrayData();
|
ByteArrayData data = ByteArrayData();
|
||||||
*buffer += "[";
|
*buffer += "[";
|
||||||
for(int i=0; i < pvdata->getLength(); i++) {
|
for(size_t i=0; i < pvdata->getLength(); i++) {
|
||||||
if(i!=0) *buffer += ",";
|
if(i!=0) *buffer += ",";
|
||||||
int num = pvdata->get(i,1,&data);
|
int num = pvdata->get(i,1,data);
|
||||||
if(num==1) {
|
if(num==1) {
|
||||||
int val = data.data[data.offset];
|
int val = data.data[data.offset];
|
||||||
char buf[16];
|
char buf[16];
|
||||||
@@ -181,9 +179,9 @@ void convertArray(StringBuilder buffer,PVScalarArray * pv,int notFirst)
|
|||||||
PVShortArray *pvdata = static_cast<PVShortArray*>(pv);
|
PVShortArray *pvdata = static_cast<PVShortArray*>(pv);
|
||||||
ShortArrayData data = ShortArrayData();
|
ShortArrayData data = ShortArrayData();
|
||||||
*buffer += "[";
|
*buffer += "[";
|
||||||
for(int i=0; i < pvdata->getLength(); i++) {
|
for(size_t i=0; i < pvdata->getLength(); i++) {
|
||||||
if(i!=0) *buffer += ',';
|
if(i!=0) *buffer += ',';
|
||||||
int num = pvdata->get(i,1,&data);
|
int num = pvdata->get(i,1,data);
|
||||||
if(num==1) {
|
if(num==1) {
|
||||||
int val = data.data[data.offset];
|
int val = data.data[data.offset];
|
||||||
char buf[16];
|
char buf[16];
|
||||||
@@ -200,9 +198,9 @@ void convertArray(StringBuilder buffer,PVScalarArray * pv,int notFirst)
|
|||||||
PVIntArray *pvdata = static_cast<PVIntArray*>(pv);
|
PVIntArray *pvdata = static_cast<PVIntArray*>(pv);
|
||||||
IntArrayData data = IntArrayData();
|
IntArrayData data = IntArrayData();
|
||||||
*buffer += "[";
|
*buffer += "[";
|
||||||
for(int i=0; i < pvdata->getLength(); i++) {
|
for(size_t i=0; i < pvdata->getLength(); i++) {
|
||||||
if(i!=0) *buffer += ',';
|
if(i!=0) *buffer += ',';
|
||||||
int num = pvdata->get(i,1,&data);
|
int num = pvdata->get(i,1,data);
|
||||||
if(num==1) {
|
if(num==1) {
|
||||||
int val = data.data[data.offset];
|
int val = data.data[data.offset];
|
||||||
char buf[16];
|
char buf[16];
|
||||||
@@ -219,9 +217,9 @@ void convertArray(StringBuilder buffer,PVScalarArray * pv,int notFirst)
|
|||||||
PVLongArray *pvdata = static_cast<PVLongArray*>(pv);
|
PVLongArray *pvdata = static_cast<PVLongArray*>(pv);
|
||||||
LongArrayData data = LongArrayData();
|
LongArrayData data = LongArrayData();
|
||||||
*buffer += "[";
|
*buffer += "[";
|
||||||
for(int i=0; i < pvdata->getLength(); i++) {
|
for(size_t i=0; i < pvdata->getLength(); i++) {
|
||||||
if(i!=0) *buffer += ',';
|
if(i!=0) *buffer += ',';
|
||||||
int num = pvdata->get(i,1,&data);
|
int num = pvdata->get(i,1,data);
|
||||||
if(num==1) {
|
if(num==1) {
|
||||||
int64 val = data.data[data.offset];
|
int64 val = data.data[data.offset];
|
||||||
char buf[16];
|
char buf[16];
|
||||||
@@ -238,9 +236,9 @@ void convertArray(StringBuilder buffer,PVScalarArray * pv,int notFirst)
|
|||||||
PVFloatArray *pvdata = static_cast<PVFloatArray*>(pv);
|
PVFloatArray *pvdata = static_cast<PVFloatArray*>(pv);
|
||||||
FloatArrayData data = FloatArrayData();
|
FloatArrayData data = FloatArrayData();
|
||||||
*buffer += "[";
|
*buffer += "[";
|
||||||
for(int i=0; i < pvdata->getLength(); i++) {
|
for(size_t i=0; i < pvdata->getLength(); i++) {
|
||||||
if(i!=0) *buffer += ',';
|
if(i!=0) *buffer += ',';
|
||||||
int num = pvdata->get(i,1,&data);
|
int num = pvdata->get(i,1,data);
|
||||||
if(num==1) {
|
if(num==1) {
|
||||||
float val = data.data[data.offset];
|
float val = data.data[data.offset];
|
||||||
char buf[16];
|
char buf[16];
|
||||||
@@ -257,9 +255,9 @@ void convertArray(StringBuilder buffer,PVScalarArray * pv,int notFirst)
|
|||||||
PVDoubleArray *pvdata = static_cast<PVDoubleArray*>(pv);
|
PVDoubleArray *pvdata = static_cast<PVDoubleArray*>(pv);
|
||||||
DoubleArrayData data = DoubleArrayData();
|
DoubleArrayData data = DoubleArrayData();
|
||||||
*buffer += "[";
|
*buffer += "[";
|
||||||
for(int i=0; i < pvdata->getLength(); i++) {
|
for(size_t i=0; i < pvdata->getLength(); i++) {
|
||||||
if(i!=0) *buffer += ',';
|
if(i!=0) *buffer += ',';
|
||||||
int num = pvdata->get(i,1,&data);
|
int num = pvdata->get(i,1,data);
|
||||||
if(num==1) {
|
if(num==1) {
|
||||||
double val = data.data[data.offset];
|
double val = data.data[data.offset];
|
||||||
char buf[16];
|
char buf[16];
|
||||||
@@ -276,9 +274,9 @@ void convertArray(StringBuilder buffer,PVScalarArray * pv,int notFirst)
|
|||||||
PVStringArray *pvdata = static_cast<PVStringArray*>(pv);
|
PVStringArray *pvdata = static_cast<PVStringArray*>(pv);
|
||||||
StringArrayData data = StringArrayData();
|
StringArrayData data = StringArrayData();
|
||||||
*buffer += "[";
|
*buffer += "[";
|
||||||
for(int i=0; i < pvdata->getLength(); i++) {
|
for(size_t i=0; i < pvdata->getLength(); i++) {
|
||||||
if(i!=0) *buffer += ",";
|
if(i!=0) *buffer += ",";
|
||||||
int num = pvdata->get(i,1,&data);
|
int num = pvdata->get(i,1,data);
|
||||||
StringArray value = data.data;
|
StringArray value = data.data;
|
||||||
if(num==1) {
|
if(num==1) {
|
||||||
if(value[data.offset].length()>0) {
|
if(value[data.offset].length()>0) {
|
||||||
@@ -306,13 +304,13 @@ void convertStructureArray(StringBuilder buffer,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
StructureArrayData data = StructureArrayData();
|
StructureArrayData data = StructureArrayData();
|
||||||
pvdata->get(0, length, &data);
|
pvdata->get(0, length, data);
|
||||||
for (int i = 0; i < length; i++) {
|
for (int i = 0; i < length; i++) {
|
||||||
PVStructure *pvStructure = data.data[i];
|
PVStructurePtr pvStructure = data.data[i];
|
||||||
if (pvStructure == 0) {
|
if (pvStructure == 0) {
|
||||||
*buffer += "null";
|
*buffer += "null";
|
||||||
} else {
|
} else {
|
||||||
convertToString(buffer,pvStructure,notFirst+1);
|
convertToString(buffer,pvStructure.get(),notFirst+1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -379,7 +377,7 @@ class ChannelGetRequesterImpl : public ChannelGetRequester
|
|||||||
|
|
||||||
virtual void message(String message,MessageType messageType)
|
virtual void message(String message,MessageType messageType)
|
||||||
{
|
{
|
||||||
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
|
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")" << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void channelGetConnect(const epics::pvData::Status& status,ChannelGet::shared_pointer const & channelGet,
|
virtual void channelGetConnect(const epics::pvData::Status& status,ChannelGet::shared_pointer const & channelGet,
|
||||||
@@ -475,7 +473,7 @@ public:
|
|||||||
|
|
||||||
virtual void message(String message,MessageType messageType)
|
virtual void message(String message,MessageType messageType)
|
||||||
{
|
{
|
||||||
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
|
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")" << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void channelCreated(const epics::pvData::Status& status, Channel::shared_pointer const & channel)
|
virtual void channelCreated(const epics::pvData::Status& status, Channel::shared_pointer const & channel)
|
||||||
|
|||||||
@@ -121,13 +121,11 @@ void convertToString(StringBuilder buffer,PVField * pv,int notFirst)
|
|||||||
void convertStructure(StringBuilder buffer,PVStructure *data,int notFirst)
|
void convertStructure(StringBuilder buffer,PVStructure *data,int notFirst)
|
||||||
{
|
{
|
||||||
PVFieldPtrArray fieldsData = data->getPVFields();
|
PVFieldPtrArray fieldsData = data->getPVFields();
|
||||||
if (fieldsData != 0) {
|
int length = data->getStructure()->getNumberFields();
|
||||||
int length = data->getStructure()->getNumberFields();
|
for(int i=0; i<length; i++) {
|
||||||
for(int i=0; i<length; i++) {
|
PVFieldPtr fieldField = fieldsData[i];
|
||||||
PVField *fieldField = fieldsData[i];
|
convertToString(buffer,fieldField.get(),notFirst + 1);
|
||||||
convertToString(buffer,fieldField,notFirst + 1);
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void convertArray(StringBuilder buffer,PVScalarArray * pv,int notFirst)
|
void convertArray(StringBuilder buffer,PVScalarArray * pv,int notFirst)
|
||||||
@@ -139,9 +137,9 @@ void convertArray(StringBuilder buffer,PVScalarArray * pv,int notFirst)
|
|||||||
PVBooleanArray *pvdata = static_cast<PVBooleanArray*>(pv);
|
PVBooleanArray *pvdata = static_cast<PVBooleanArray*>(pv);
|
||||||
BooleanArrayData data = BooleanArrayData();
|
BooleanArrayData data = BooleanArrayData();
|
||||||
*buffer += "[";
|
*buffer += "[";
|
||||||
for(int i=0; i < pvdata->getLength(); i++) {
|
for(size_t i=0; i < pvdata->getLength(); i++) {
|
||||||
if(i!=0) *buffer += ",";
|
if(i!=0) *buffer += ",";
|
||||||
int num = pvdata->get(i,1,&data);
|
int num = pvdata->get(i,1,data);
|
||||||
if(num==1) {
|
if(num==1) {
|
||||||
BooleanArray value = data.data;
|
BooleanArray value = data.data;
|
||||||
if(value[data.offset]) {
|
if(value[data.offset]) {
|
||||||
@@ -160,9 +158,9 @@ void convertArray(StringBuilder buffer,PVScalarArray * pv,int notFirst)
|
|||||||
PVByteArray *pvdata = static_cast<PVByteArray*>(pv);
|
PVByteArray *pvdata = static_cast<PVByteArray*>(pv);
|
||||||
ByteArrayData data = ByteArrayData();
|
ByteArrayData data = ByteArrayData();
|
||||||
*buffer += "[";
|
*buffer += "[";
|
||||||
for(int i=0; i < pvdata->getLength(); i++) {
|
for(size_t i=0; i < pvdata->getLength(); i++) {
|
||||||
if(i!=0) *buffer += ",";
|
if(i!=0) *buffer += ",";
|
||||||
int num = pvdata->get(i,1,&data);
|
int num = pvdata->get(i,1,data);
|
||||||
if(num==1) {
|
if(num==1) {
|
||||||
int val = data.data[data.offset];
|
int val = data.data[data.offset];
|
||||||
char buf[16];
|
char buf[16];
|
||||||
@@ -179,9 +177,9 @@ void convertArray(StringBuilder buffer,PVScalarArray * pv,int notFirst)
|
|||||||
PVShortArray *pvdata = static_cast<PVShortArray*>(pv);
|
PVShortArray *pvdata = static_cast<PVShortArray*>(pv);
|
||||||
ShortArrayData data = ShortArrayData();
|
ShortArrayData data = ShortArrayData();
|
||||||
*buffer += "[";
|
*buffer += "[";
|
||||||
for(int i=0; i < pvdata->getLength(); i++) {
|
for(size_t i=0; i < pvdata->getLength(); i++) {
|
||||||
if(i!=0) *buffer += ',';
|
if(i!=0) *buffer += ',';
|
||||||
int num = pvdata->get(i,1,&data);
|
int num = pvdata->get(i,1,data);
|
||||||
if(num==1) {
|
if(num==1) {
|
||||||
int val = data.data[data.offset];
|
int val = data.data[data.offset];
|
||||||
char buf[16];
|
char buf[16];
|
||||||
@@ -198,9 +196,9 @@ void convertArray(StringBuilder buffer,PVScalarArray * pv,int notFirst)
|
|||||||
PVIntArray *pvdata = static_cast<PVIntArray*>(pv);
|
PVIntArray *pvdata = static_cast<PVIntArray*>(pv);
|
||||||
IntArrayData data = IntArrayData();
|
IntArrayData data = IntArrayData();
|
||||||
*buffer += "[";
|
*buffer += "[";
|
||||||
for(int i=0; i < pvdata->getLength(); i++) {
|
for(size_t i=0; i < pvdata->getLength(); i++) {
|
||||||
if(i!=0) *buffer += ',';
|
if(i!=0) *buffer += ',';
|
||||||
int num = pvdata->get(i,1,&data);
|
int num = pvdata->get(i,1,data);
|
||||||
if(num==1) {
|
if(num==1) {
|
||||||
int val = data.data[data.offset];
|
int val = data.data[data.offset];
|
||||||
char buf[16];
|
char buf[16];
|
||||||
@@ -217,9 +215,9 @@ void convertArray(StringBuilder buffer,PVScalarArray * pv,int notFirst)
|
|||||||
PVLongArray *pvdata = static_cast<PVLongArray*>(pv);
|
PVLongArray *pvdata = static_cast<PVLongArray*>(pv);
|
||||||
LongArrayData data = LongArrayData();
|
LongArrayData data = LongArrayData();
|
||||||
*buffer += "[";
|
*buffer += "[";
|
||||||
for(int i=0; i < pvdata->getLength(); i++) {
|
for(size_t i=0; i < pvdata->getLength(); i++) {
|
||||||
if(i!=0) *buffer += ',';
|
if(i!=0) *buffer += ',';
|
||||||
int num = pvdata->get(i,1,&data);
|
int num = pvdata->get(i,1,data);
|
||||||
if(num==1) {
|
if(num==1) {
|
||||||
int64 val = data.data[data.offset];
|
int64 val = data.data[data.offset];
|
||||||
char buf[16];
|
char buf[16];
|
||||||
@@ -236,9 +234,9 @@ void convertArray(StringBuilder buffer,PVScalarArray * pv,int notFirst)
|
|||||||
PVFloatArray *pvdata = static_cast<PVFloatArray*>(pv);
|
PVFloatArray *pvdata = static_cast<PVFloatArray*>(pv);
|
||||||
FloatArrayData data = FloatArrayData();
|
FloatArrayData data = FloatArrayData();
|
||||||
*buffer += "[";
|
*buffer += "[";
|
||||||
for(int i=0; i < pvdata->getLength(); i++) {
|
for(size_t i=0; i < pvdata->getLength(); i++) {
|
||||||
if(i!=0) *buffer += ',';
|
if(i!=0) *buffer += ',';
|
||||||
int num = pvdata->get(i,1,&data);
|
int num = pvdata->get(i,1,data);
|
||||||
if(num==1) {
|
if(num==1) {
|
||||||
float val = data.data[data.offset];
|
float val = data.data[data.offset];
|
||||||
char buf[16];
|
char buf[16];
|
||||||
@@ -255,9 +253,9 @@ void convertArray(StringBuilder buffer,PVScalarArray * pv,int notFirst)
|
|||||||
PVDoubleArray *pvdata = static_cast<PVDoubleArray*>(pv);
|
PVDoubleArray *pvdata = static_cast<PVDoubleArray*>(pv);
|
||||||
DoubleArrayData data = DoubleArrayData();
|
DoubleArrayData data = DoubleArrayData();
|
||||||
*buffer += "[";
|
*buffer += "[";
|
||||||
for(int i=0; i < pvdata->getLength(); i++) {
|
for(size_t i=0; i < pvdata->getLength(); i++) {
|
||||||
if(i!=0) *buffer += ',';
|
if(i!=0) *buffer += ',';
|
||||||
int num = pvdata->get(i,1,&data);
|
int num = pvdata->get(i,1,data);
|
||||||
if(num==1) {
|
if(num==1) {
|
||||||
double val = data.data[data.offset];
|
double val = data.data[data.offset];
|
||||||
char buf[16];
|
char buf[16];
|
||||||
@@ -274,9 +272,9 @@ void convertArray(StringBuilder buffer,PVScalarArray * pv,int notFirst)
|
|||||||
PVStringArray *pvdata = static_cast<PVStringArray*>(pv);
|
PVStringArray *pvdata = static_cast<PVStringArray*>(pv);
|
||||||
StringArrayData data = StringArrayData();
|
StringArrayData data = StringArrayData();
|
||||||
*buffer += "[";
|
*buffer += "[";
|
||||||
for(int i=0; i < pvdata->getLength(); i++) {
|
for(size_t i=0; i < pvdata->getLength(); i++) {
|
||||||
if(i!=0) *buffer += ",";
|
if(i!=0) *buffer += ",";
|
||||||
int num = pvdata->get(i,1,&data);
|
int num = pvdata->get(i,1,data);
|
||||||
StringArray value = data.data;
|
StringArray value = data.data;
|
||||||
if(num==1) {
|
if(num==1) {
|
||||||
if(value[data.offset].length()>0) {
|
if(value[data.offset].length()>0) {
|
||||||
@@ -304,13 +302,13 @@ void convertStructureArray(StringBuilder buffer,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
StructureArrayData data = StructureArrayData();
|
StructureArrayData data = StructureArrayData();
|
||||||
pvdata->get(0, length, &data);
|
pvdata->get(0, length, data);
|
||||||
for (int i = 0; i < length; i++) {
|
for (int i = 0; i < length; i++) {
|
||||||
PVStructure *pvStructure = data.data[i];
|
PVStructurePtr pvStructure = data.data[i];
|
||||||
if (pvStructure == 0) {
|
if (pvStructure == 0) {
|
||||||
*buffer += "null";
|
*buffer += "null";
|
||||||
} else {
|
} else {
|
||||||
convertToString(buffer,pvStructure,notFirst+1);
|
convertToString(buffer,pvStructure.get(),notFirst+1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -378,7 +376,7 @@ class ChannelPutRequesterImpl : public ChannelPutRequester
|
|||||||
|
|
||||||
virtual void message(String message,MessageType messageType)
|
virtual void message(String message,MessageType messageType)
|
||||||
{
|
{
|
||||||
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
|
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")" << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void channelPutConnect(const epics::pvData::Status& status,ChannelPut::shared_pointer const & channelPut,
|
virtual void channelPutConnect(const epics::pvData::Status& status,ChannelPut::shared_pointer const & channelPut,
|
||||||
@@ -485,7 +483,7 @@ public:
|
|||||||
|
|
||||||
virtual void message(String message,MessageType messageType)
|
virtual void message(String message,MessageType messageType)
|
||||||
{
|
{
|
||||||
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
|
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")" << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void channelCreated(const epics::pvData::Status& status, Channel::shared_pointer const & channel)
|
virtual void channelCreated(const epics::pvData::Status& status, Channel::shared_pointer const & channel)
|
||||||
@@ -635,7 +633,7 @@ int main (int argc, char *argv[])
|
|||||||
allOK &= putRequesterImpl->waitUntilDone(timeOut);
|
allOK &= putRequesterImpl->waitUntilDone(timeOut);
|
||||||
if (allOK)
|
if (allOK)
|
||||||
{
|
{
|
||||||
getConvert()->fromString(putRequesterImpl->getStructure().get(), values);
|
getConvert()->fromString(putRequesterImpl->getStructure(), values);
|
||||||
|
|
||||||
putRequesterImpl->resetEvent();
|
putRequesterImpl->resetEvent();
|
||||||
channelPut->put(false);
|
channelPut->put(false);
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ class ChannelRPCRequesterImpl : public ChannelRPCRequester
|
|||||||
|
|
||||||
virtual void message(String message,MessageType messageType)
|
virtual void message(String message,MessageType messageType)
|
||||||
{
|
{
|
||||||
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
|
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")" << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
void resetEvent()
|
void resetEvent()
|
||||||
@@ -96,7 +96,7 @@ public:
|
|||||||
|
|
||||||
virtual void message(String message,MessageType messageType)
|
virtual void message(String message,MessageType messageType)
|
||||||
{
|
{
|
||||||
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
|
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")" << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void channelCreated(const epics::pvData::Status& status, Channel::shared_pointer const & channel)
|
virtual void channelCreated(const epics::pvData::Status& status, Channel::shared_pointer const & channel)
|
||||||
@@ -243,8 +243,10 @@ int main (int argc, char *argv[])
|
|||||||
shared_ptr<ChannelRPCRequesterImpl> rpcRequesterImpl(new ChannelRPCRequesterImpl(channel->getChannelName()));
|
shared_ptr<ChannelRPCRequesterImpl> rpcRequesterImpl(new ChannelRPCRequesterImpl(channel->getChannelName()));
|
||||||
|
|
||||||
// A PVStructure is sent at ChannelRPC connect time but we don't use it, so send an empty one
|
// A PVStructure is sent at ChannelRPC connect time but we don't use it, so send an empty one
|
||||||
|
StringArray fieldNames;
|
||||||
|
FieldConstPtrArray fields;
|
||||||
PVStructure::shared_pointer nothing(
|
PVStructure::shared_pointer nothing(
|
||||||
new PVStructure(NULL, getFieldCreate()->createStructure("nothing", 0, NULL)));
|
new PVStructure(getFieldCreate()->createStructure(fieldNames, fields)));
|
||||||
|
|
||||||
ChannelRPC::shared_pointer channelRPC = channel->createChannelRPC(rpcRequesterImpl, nothing);
|
ChannelRPC::shared_pointer channelRPC = channel->createChannelRPC(rpcRequesterImpl, nothing);
|
||||||
allOK &= rpcRequesterImpl->waitUntilDone(timeOut);
|
allOK &= rpcRequesterImpl->waitUntilDone(timeOut);
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
virtual void handleResponse(osiSockAddr* responseFrom,
|
virtual void handleResponse(osiSockAddr* responseFrom,
|
||||||
Transport::shared_pointer const & transport, int8 version, int8 command, int payloadSize,
|
Transport::shared_pointer const & transport, int8 version, int8 command, std::size_t payloadSize,
|
||||||
ByteBuffer* payloadBuffer) {
|
ByteBuffer* payloadBuffer) {
|
||||||
|
|
||||||
if(command==CMD_CONNECTION_VALIDATION) transport->verified();
|
if(command==CMD_CONNECTION_VALIDATION) transport->verified();
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ private:
|
|||||||
class DummyResponseHandler : public ResponseHandler {
|
class DummyResponseHandler : public ResponseHandler {
|
||||||
public:
|
public:
|
||||||
virtual void handleResponse(osiSockAddr* responseFrom,
|
virtual void handleResponse(osiSockAddr* responseFrom,
|
||||||
Transport::shared_pointer const & transport, int8 version, int8 command, int payloadSize,
|
Transport::shared_pointer const & transport, int8 version, int8 command, std::size_t payloadSize,
|
||||||
ByteBuffer* payloadBuffer) {
|
ByteBuffer* payloadBuffer) {
|
||||||
cout << "DummyResponseHandler::handleResponse" << endl;
|
cout << "DummyResponseHandler::handleResponse" << endl;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ public:
|
|||||||
virtual ~DummyResponseHandler() {}
|
virtual ~DummyResponseHandler() {}
|
||||||
|
|
||||||
virtual void handleResponse(osiSockAddr* responseFrom,
|
virtual void handleResponse(osiSockAddr* responseFrom,
|
||||||
Transport::shared_pointer const &, int8 version, int8 command, int payloadSize,
|
Transport::shared_pointer const &, int8 version, int8 command, std::size_t payloadSize,
|
||||||
ByteBuffer* payloadBuffer) {
|
ByteBuffer* payloadBuffer) {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -60,14 +60,14 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
virtual void handleResponse(osiSockAddr* responseFrom,
|
virtual void handleResponse(osiSockAddr* responseFrom,
|
||||||
Transport::shared_pointer const &, int8 version, int8 command, int payloadSize,
|
Transport::shared_pointer const &, int8 version, int8 command, std::size_t payloadSize,
|
||||||
ByteBuffer* payloadBuffer);
|
ByteBuffer* payloadBuffer);
|
||||||
private:
|
private:
|
||||||
int packets;
|
int packets;
|
||||||
};
|
};
|
||||||
|
|
||||||
void DummyResponseHandler::handleResponse(osiSockAddr* responseFrom,
|
void DummyResponseHandler::handleResponse(osiSockAddr* responseFrom,
|
||||||
Transport::shared_pointer const &, int8 version, int8 command, int payloadSize,
|
Transport::shared_pointer const &, int8 version, int8 command, std::size_t payloadSize,
|
||||||
ByteBuffer* payloadBuffer) {
|
ByteBuffer* payloadBuffer) {
|
||||||
std::ostringstream os;
|
std::ostringstream os;
|
||||||
|
|
||||||
@@ -84,7 +84,7 @@ void DummyResponseHandler::handleResponse(osiSockAddr* responseFrom,
|
|||||||
|
|
||||||
char payload[50];
|
char payload[50];
|
||||||
|
|
||||||
for(int i = 0; i<payloadSize;) {
|
for(std::size_t i = 0; i<payloadSize;) {
|
||||||
int dataCount = payloadSize-i<50 ? payloadSize-i : 50;
|
int dataCount = payloadSize-i<50 ? payloadSize-i : 50;
|
||||||
payloadBuffer->get(payload, 0, dataCount);
|
payloadBuffer->get(payload, 0, dataCount);
|
||||||
os<<"Payload ("<<i<<"-"<<(dataCount-1)<<")";
|
os<<"Payload ("<<i<<"-"<<(dataCount-1)<<")";
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ private:
|
|||||||
|
|
||||||
virtual void message(String message,MessageType messageType)
|
virtual void message(String message,MessageType messageType)
|
||||||
{
|
{
|
||||||
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
|
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")" << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void channelCreated(const epics::pvData::Status& status, Channel::shared_pointer const & channel)
|
virtual void channelCreated(const epics::pvData::Status& status, Channel::shared_pointer const & channel)
|
||||||
|
|||||||
@@ -20,9 +20,11 @@ using namespace std::tr1;
|
|||||||
using namespace epics::pvData;
|
using namespace epics::pvData;
|
||||||
using namespace epics::pvAccess;
|
using namespace epics::pvAccess;
|
||||||
|
|
||||||
#define COUNT 100000
|
#define COUNT 1000 // repetitions per result
|
||||||
|
#define CHANNELS 1000
|
||||||
|
#define ARRAY_SIZE 1
|
||||||
|
|
||||||
#define DEFAULT_TIMEOUT 60.0
|
#define DEFAULT_TIMEOUT 600.0
|
||||||
#define DEFAULT_REQUEST "field(value)"
|
#define DEFAULT_REQUEST "field(value)"
|
||||||
|
|
||||||
double timeOut = DEFAULT_TIMEOUT;
|
double timeOut = DEFAULT_TIMEOUT;
|
||||||
@@ -40,6 +42,25 @@ void usage (void)
|
|||||||
, DEFAULT_REQUEST, DEFAULT_TIMEOUT);
|
, DEFAULT_REQUEST, DEFAULT_TIMEOUT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
vector<ChannelGet::shared_pointer> getCs;
|
||||||
|
int channelCount = 0;
|
||||||
|
int allCount = 0;
|
||||||
|
|
||||||
|
timeval startTime;
|
||||||
|
|
||||||
|
void get_all()
|
||||||
|
{
|
||||||
|
ChannelGet::shared_pointer last;
|
||||||
|
for (vector<ChannelGet::shared_pointer>::const_iterator i = getCs.begin();
|
||||||
|
i != getCs.end();
|
||||||
|
i++)
|
||||||
|
{
|
||||||
|
(*i)->get(false);
|
||||||
|
last = *i;
|
||||||
|
}
|
||||||
|
last->get(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
class ChannelGetRequesterImpl : public ChannelGetRequester
|
class ChannelGetRequesterImpl : public ChannelGetRequester
|
||||||
{
|
{
|
||||||
@@ -48,6 +69,7 @@ class ChannelGetRequesterImpl : public ChannelGetRequester
|
|||||||
PVStructure::shared_pointer m_pvStructure;
|
PVStructure::shared_pointer m_pvStructure;
|
||||||
BitSet::shared_pointer m_bitSet;
|
BitSet::shared_pointer m_bitSet;
|
||||||
Event m_event;
|
Event m_event;
|
||||||
|
Event m_connectionEvent;
|
||||||
String m_channelName;
|
String m_channelName;
|
||||||
int m_count;
|
int m_count;
|
||||||
|
|
||||||
@@ -64,7 +86,7 @@ class ChannelGetRequesterImpl : public ChannelGetRequester
|
|||||||
|
|
||||||
virtual void message(String message,MessageType messageType)
|
virtual void message(String message,MessageType messageType)
|
||||||
{
|
{
|
||||||
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
|
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")" << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void channelGetConnect(const epics::pvData::Status& status,
|
virtual void channelGetConnect(const epics::pvData::Status& status,
|
||||||
@@ -83,11 +105,14 @@ class ChannelGetRequesterImpl : public ChannelGetRequester
|
|||||||
m_channelGet = channelGet;
|
m_channelGet = channelGet;
|
||||||
m_pvStructure = pvStructure;
|
m_pvStructure = pvStructure;
|
||||||
m_bitSet = bitSet;
|
m_bitSet = bitSet;
|
||||||
|
|
||||||
|
m_connectionEvent.signal();
|
||||||
|
|
||||||
|
/*
|
||||||
m_count = COUNT;
|
m_count = COUNT;
|
||||||
|
|
||||||
gettimeofday(&m_startTime, NULL);
|
gettimeofday(&m_startTime, NULL);
|
||||||
m_channelGet->get(false);
|
*/
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -105,32 +130,43 @@ class ChannelGetRequesterImpl : public ChannelGetRequester
|
|||||||
std::cout << "[" << m_channelName << "] channel get: " << status.toString() << std::endl;
|
std::cout << "[" << m_channelName << "] channel get: " << status.toString() << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
channelCount++;
|
||||||
|
if (channelCount == CHANNELS)
|
||||||
|
{
|
||||||
|
allCount++;
|
||||||
|
channelCount = 0;
|
||||||
|
}
|
||||||
|
//printf("channelCount %d\n", channelCount);
|
||||||
|
|
||||||
|
if (allCount == COUNT)
|
||||||
|
{
|
||||||
|
timeval endTime;
|
||||||
|
gettimeofday(&endTime, NULL);
|
||||||
|
|
||||||
|
|
||||||
|
long seconds, nseconds;
|
||||||
|
double duration;
|
||||||
|
seconds = endTime.tv_sec - startTime.tv_sec;
|
||||||
|
nseconds = endTime.tv_usec - startTime.tv_usec;
|
||||||
|
|
||||||
|
duration = seconds + nseconds/1000000.0;
|
||||||
|
|
||||||
|
printf("%5.6f seconds, %5.3f (x %d = %5.3f) gets/s\n", duration, COUNT/duration, CHANNELS, COUNT*CHANNELS/duration);
|
||||||
|
|
||||||
|
allCount = 0;
|
||||||
|
gettimeofday(&startTime, NULL);
|
||||||
|
|
||||||
|
get_all();
|
||||||
|
|
||||||
//String str;
|
}
|
||||||
//m_pvStructure->toString(&str);
|
else if (channelCount == 0)
|
||||||
//std::cout << str << std::endl;
|
{
|
||||||
|
|
||||||
//m_event.signal();
|
get_all();
|
||||||
|
}
|
||||||
if (--m_count)
|
|
||||||
m_channelGet->get(false);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
timeval endTime;
|
|
||||||
gettimeofday(&endTime, NULL);
|
|
||||||
|
|
||||||
|
|
||||||
long seconds, nseconds;
|
|
||||||
double duration;
|
|
||||||
seconds = endTime.tv_sec - m_startTime.tv_sec;
|
|
||||||
nseconds = endTime.tv_usec - m_startTime.tv_usec;
|
|
||||||
|
|
||||||
duration = seconds + nseconds/1000000.0;
|
|
||||||
|
|
||||||
printf("%5.6f seconds, %5.3f gets/s \n", duration, COUNT/duration);
|
|
||||||
|
|
||||||
m_event.signal();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -139,10 +175,16 @@ class ChannelGetRequesterImpl : public ChannelGetRequester
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wait(double timeOut)
|
/*
|
||||||
|
void get()
|
||||||
{
|
{
|
||||||
return m_event.wait(timeOut);
|
return m_event.wait(timeOut);
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
bool waitUntilConnected(double timeOut)
|
||||||
|
{
|
||||||
|
return m_connectionEvent.wait(timeOut);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class ChannelRequesterImpl : public ChannelRequester
|
class ChannelRequesterImpl : public ChannelRequester
|
||||||
@@ -159,7 +201,7 @@ public:
|
|||||||
|
|
||||||
virtual void message(String message,MessageType messageType)
|
virtual void message(String message,MessageType messageType)
|
||||||
{
|
{
|
||||||
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
|
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")" << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void channelCreated(const epics::pvData::Status& status,
|
virtual void channelCreated(const epics::pvData::Status& status,
|
||||||
@@ -194,9 +236,10 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int main (int argc, char *argv[])
|
int main (int argc, char *argv[])
|
||||||
{
|
{
|
||||||
|
printf("this does not work... since this impl. requires bulk get control... tODO\n");
|
||||||
|
return -1;
|
||||||
int opt; // getopt() current option
|
int opt; // getopt() current option
|
||||||
|
|
||||||
setvbuf(stdout,NULL,_IOLBF,BUFSIZ); // Set stdout to line buffering
|
setvbuf(stdout,NULL,_IOLBF,BUFSIZ); // Set stdout to line buffering
|
||||||
@@ -233,14 +276,17 @@ int main (int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int nPvs = argc - optind; // Remaining arg list is PV name
|
printf("%d channels of double array size of %d elements, %d repetitions per sample\n", CHANNELS, ARRAY_SIZE, COUNT);
|
||||||
if (nPvs < 1 || nPvs > 1)
|
|
||||||
{
|
vector<string> pvs;
|
||||||
fprintf(stderr, "No pv name specified. ('testGetPerformance -h' for help.)\n");
|
char buf[64];
|
||||||
return 1;
|
for (int i = 0; i < CHANNELS; i++)
|
||||||
}
|
{
|
||||||
|
sprintf(buf, "array%d_%d", ARRAY_SIZE, i);
|
||||||
|
pvs.push_back(buf);
|
||||||
|
//printf("%s\n", buf);
|
||||||
|
}
|
||||||
|
|
||||||
string pvName = argv[optind]; // Copy PV name from command line
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
pvRequest = getCreateRequest()->createRequest(request);
|
pvRequest = getCreateRequest()->createRequest(request);
|
||||||
@@ -257,33 +303,57 @@ int main (int argc, char *argv[])
|
|||||||
ClientFactory::start();
|
ClientFactory::start();
|
||||||
ChannelProvider::shared_pointer provider = getChannelAccess()->getProvider("pvAccess");
|
ChannelProvider::shared_pointer provider = getChannelAccess()->getProvider("pvAccess");
|
||||||
|
|
||||||
|
|
||||||
|
vector<Channel::shared_pointer> chs;
|
||||||
|
|
||||||
|
for (vector<string>::iterator i = pvs.begin();
|
||||||
|
i != pvs.end();
|
||||||
|
i++)
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
shared_ptr<ChannelRequesterImpl> channelRequesterImpl(new
|
shared_ptr<ChannelRequesterImpl> channelRequesterImpl(new
|
||||||
ChannelRequesterImpl());
|
ChannelRequesterImpl());
|
||||||
Channel::shared_pointer channel = provider->createChannel(pvName, channelRequesterImpl);
|
Channel::shared_pointer channel = provider->createChannel(*i, channelRequesterImpl);
|
||||||
|
chs.push_back(channel);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (vector<Channel::shared_pointer>::iterator i = chs.begin();
|
||||||
|
i != chs.end();
|
||||||
|
i++)
|
||||||
|
{
|
||||||
|
Channel::shared_pointer channel = *i;
|
||||||
|
shared_ptr<ChannelRequesterImpl> channelRequesterImpl = dynamic_pointer_cast<ChannelRequesterImpl>(channel->getChannelRequester());
|
||||||
if (channelRequesterImpl->waitUntilConnected(5.0))
|
if (channelRequesterImpl->waitUntilConnected(5.0))
|
||||||
{
|
{
|
||||||
shared_ptr<ChannelGetRequesterImpl> getRequesterImpl(new
|
shared_ptr<ChannelGetRequesterImpl> getRequesterImpl(new
|
||||||
ChannelGetRequesterImpl(channel->getChannelName()));
|
ChannelGetRequesterImpl(channel->getChannelName()));
|
||||||
ChannelGet::shared_pointer channelGet = channel->createChannelGet(getRequesterImpl, pvRequest);
|
ChannelGet::shared_pointer channelGet = channel->createChannelGet(getRequesterImpl, pvRequest);
|
||||||
|
|
||||||
allOK &= getRequesterImpl->wait(timeOut);
|
allOK = getRequesterImpl->waitUntilConnected(timeOut);
|
||||||
|
|
||||||
if (!allOK)
|
if (!allOK)
|
||||||
{
|
{
|
||||||
std::cout << "[" << channel->getChannelName() << "] failed to get all the gets" << std::endl;
|
std::cout << "[" << channel->getChannelName() << "] failed to get all the gets" << std::endl;
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
channelGet->destroy();
|
getCs.push_back(channelGet);
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
allOK = false;
|
|
||||||
channel->destroy();
|
|
||||||
std::cout << "[" << channel->getChannelName() << "] connection timeout" << std::endl;
|
std::cout << "[" << channel->getChannelName() << "] connection timeout" << std::endl;
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
std::cout << "all connected" << std::endl;
|
||||||
|
|
||||||
ClientFactory::stop();
|
gettimeofday(&startTime, NULL);
|
||||||
|
get_all();
|
||||||
|
|
||||||
|
epicsThreadSleep(DEFAULT_TIMEOUT);
|
||||||
|
//ClientFactory::stop();
|
||||||
|
|
||||||
return allOK ? 0 : 1;
|
return allOK ? 0 : 1;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ class ChannelRequesterImpl : public ChannelRequester
|
|||||||
|
|
||||||
virtual void message(String message,MessageType messageType)
|
virtual void message(String message,MessageType messageType)
|
||||||
{
|
{
|
||||||
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
|
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")" << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void channelCreated(const epics::pvData::Status& status, Channel::shared_pointer const & channel)
|
virtual void channelCreated(const epics::pvData::Status& status, Channel::shared_pointer const & channel)
|
||||||
@@ -56,7 +56,7 @@ class GetFieldRequesterImpl : public GetFieldRequester
|
|||||||
|
|
||||||
virtual void message(String message,MessageType messageType)
|
virtual void message(String message,MessageType messageType)
|
||||||
{
|
{
|
||||||
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
|
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")" << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void getDone(const epics::pvData::Status& status,epics::pvData::FieldConstPtr const & field)
|
virtual void getDone(const epics::pvData::Status& status,epics::pvData::FieldConstPtr const & field)
|
||||||
@@ -91,7 +91,7 @@ class ChannelGetRequesterImpl : public ChannelGetRequester
|
|||||||
|
|
||||||
virtual void message(String message,MessageType messageType)
|
virtual void message(String message,MessageType messageType)
|
||||||
{
|
{
|
||||||
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
|
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")" << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void channelGetConnect(const epics::pvData::Status& status,ChannelGet::shared_pointer const & channelGet,
|
virtual void channelGetConnect(const epics::pvData::Status& status,ChannelGet::shared_pointer const & channelGet,
|
||||||
@@ -141,7 +141,7 @@ class ChannelPutRequesterImpl : public ChannelPutRequester
|
|||||||
|
|
||||||
virtual void message(String message,MessageType messageType)
|
virtual void message(String message,MessageType messageType)
|
||||||
{
|
{
|
||||||
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
|
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")" << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void channelPutConnect(const epics::pvData::Status& status,ChannelPut::shared_pointer const & channelPut,
|
virtual void channelPutConnect(const epics::pvData::Status& status,ChannelPut::shared_pointer const & channelPut,
|
||||||
@@ -197,7 +197,7 @@ class ChannelPutGetRequesterImpl : public ChannelPutGetRequester
|
|||||||
|
|
||||||
virtual void message(String message,MessageType messageType)
|
virtual void message(String message,MessageType messageType)
|
||||||
{
|
{
|
||||||
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
|
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")" << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void channelPutGetConnect(const epics::pvData::Status& status, ChannelPutGet::shared_pointer const & channelPutGet,
|
virtual void channelPutGetConnect(const epics::pvData::Status& status, ChannelPutGet::shared_pointer const & channelPutGet,
|
||||||
@@ -275,7 +275,7 @@ class ChannelRPCRequesterImpl : public ChannelRPCRequester
|
|||||||
|
|
||||||
virtual void message(String message,MessageType messageType)
|
virtual void message(String message,MessageType messageType)
|
||||||
{
|
{
|
||||||
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
|
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")" << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void channelRPCConnect(const epics::pvData::Status& status,ChannelRPC::shared_pointer const & channelRPC)
|
virtual void channelRPCConnect(const epics::pvData::Status& status,ChannelRPC::shared_pointer const & channelRPC)
|
||||||
@@ -314,7 +314,7 @@ class ChannelArrayRequesterImpl : public ChannelArrayRequester
|
|||||||
|
|
||||||
virtual void message(String message,MessageType messageType)
|
virtual void message(String message,MessageType messageType)
|
||||||
{
|
{
|
||||||
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
|
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")" << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void channelArrayConnect(const epics::pvData::Status& status,ChannelArray::shared_pointer const & channelArray,
|
virtual void channelArrayConnect(const epics::pvData::Status& status,ChannelArray::shared_pointer const & channelArray,
|
||||||
@@ -364,10 +364,10 @@ class MonitorRequesterImpl : public MonitorRequester
|
|||||||
|
|
||||||
virtual void message(String message,MessageType messageType)
|
virtual void message(String message,MessageType messageType)
|
||||||
{
|
{
|
||||||
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
|
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")" << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void monitorConnect(const epics::pvData::Status& status, Monitor::shared_pointer const & monitor, StructureConstPtr const & structure)
|
virtual void monitorConnect(const epics::pvData::Status& status, Monitor::shared_pointer & monitor, StructureConstPtr const & structure)
|
||||||
{
|
{
|
||||||
std::cout << "monitorConnect(" << status.toString() << ")" << std::endl;
|
std::cout << "monitorConnect(" << status.toString() << ")" << std::endl;
|
||||||
if (status.isSuccess() && structure)
|
if (status.isSuccess() && structure)
|
||||||
@@ -385,11 +385,11 @@ class MonitorRequesterImpl : public MonitorRequester
|
|||||||
MonitorElement::shared_pointer element = monitor->poll();
|
MonitorElement::shared_pointer element = monitor->poll();
|
||||||
|
|
||||||
String str("changed/overrun ");
|
String str("changed/overrun ");
|
||||||
element->getChangedBitSet()->toString(&str);
|
element->changedBitSet->toString(&str);
|
||||||
str += '/';
|
str += '/';
|
||||||
element->getOverrunBitSet()->toString(&str);
|
element->overrunBitSet->toString(&str);
|
||||||
str += '\n';
|
str += '\n';
|
||||||
element->getPVStructure()->toString(&str);
|
element->pvStructurePtr->toString(&str);
|
||||||
std::cout << str << std::endl;
|
std::cout << str << std::endl;
|
||||||
|
|
||||||
monitor->release(element);
|
monitor->release(element);
|
||||||
@@ -413,7 +413,7 @@ class ChannelProcessRequesterImpl : public ChannelProcessRequester
|
|||||||
|
|
||||||
virtual void message(String message,MessageType messageType)
|
virtual void message(String message,MessageType messageType)
|
||||||
{
|
{
|
||||||
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
|
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")" << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void channelProcessConnect(const epics::pvData::Status& status,ChannelProcess::shared_pointer const & channelProcess)
|
virtual void channelProcessConnect(const epics::pvData::Status& status,ChannelProcess::shared_pointer const & channelProcess)
|
||||||
@@ -526,10 +526,9 @@ int main(int argc,char *argv[])
|
|||||||
|
|
||||||
{
|
{
|
||||||
ChannelArrayRequester::shared_pointer channelArrayRequesterImpl(new ChannelArrayRequesterImpl());
|
ChannelArrayRequester::shared_pointer channelArrayRequesterImpl(new ChannelArrayRequesterImpl());
|
||||||
PVStructure::shared_pointer pvRequest(getPVDataCreate()->createPVStructure(0, "", 0));
|
StringArray fieldNames(1); fieldNames.push_back("field");
|
||||||
PVString* pvFieldName = (PVString*)getPVDataCreate()->createPVScalar(pvRequest.get(), "field", pvString);
|
FieldConstPtrArray fields(1); fields.push_back(getFieldCreate()->createScalar(pvString));
|
||||||
pvFieldName->put("value");
|
PVStructure::shared_pointer pvRequest(getPVDataCreate()->createPVStructure(getFieldCreate()->createStructure(fieldNames, fields)));
|
||||||
pvRequest->appendPVField(pvFieldName);
|
|
||||||
|
|
||||||
ChannelArray::shared_pointer channelArray = channel->createChannelArray(channelArrayRequesterImpl, pvRequest);
|
ChannelArray::shared_pointer channelArray = channel->createChannelArray(channelArrayRequesterImpl, pvRequest);
|
||||||
epicsThreadSleep ( 1.0 );
|
epicsThreadSleep ( 1.0 );
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ class MockChannelProcess :
|
|||||||
private:
|
private:
|
||||||
ChannelProcessRequester::shared_pointer m_channelProcessRequester;
|
ChannelProcessRequester::shared_pointer m_channelProcessRequester;
|
||||||
PVStructure::shared_pointer m_pvStructure;
|
PVStructure::shared_pointer m_pvStructure;
|
||||||
PVScalar* m_valueField;
|
PVScalarPtr m_valueField;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
MockChannelProcess(ChannelProcessRequester::shared_pointer const & channelProcessRequester, PVStructure::shared_pointer const & pvStructure, PVStructure::shared_pointer const & pvRequest) :
|
MockChannelProcess(ChannelProcessRequester::shared_pointer const & channelProcessRequester, PVStructure::shared_pointer const & pvStructure, PVStructure::shared_pointer const & pvRequest) :
|
||||||
@@ -37,8 +37,8 @@ class MockChannelProcess :
|
|||||||
PVDATA_REFCOUNT_MONITOR_CONSTRUCT(mockChannelProcess);
|
PVDATA_REFCOUNT_MONITOR_CONSTRUCT(mockChannelProcess);
|
||||||
|
|
||||||
ChannelProcess::shared_pointer thisPtr; // we return null = static_pointer_cast<ChannelProcess>(shared_from_this());
|
ChannelProcess::shared_pointer thisPtr; // we return null = static_pointer_cast<ChannelProcess>(shared_from_this());
|
||||||
PVField* field = pvStructure->getSubField(String("value"));
|
PVFieldPtr field = pvStructure->getSubField(String("value"));
|
||||||
if (field == 0)
|
if (field.get() == 0)
|
||||||
{
|
{
|
||||||
Status noValueFieldStatus(Status::STATUSTYPE_ERROR, "no 'value' field");
|
Status noValueFieldStatus(Status::STATUSTYPE_ERROR, "no 'value' field");
|
||||||
m_channelProcessRequester->channelProcessConnect(noValueFieldStatus, thisPtr);
|
m_channelProcessRequester->channelProcessConnect(noValueFieldStatus, thisPtr);
|
||||||
@@ -56,7 +56,7 @@ class MockChannelProcess :
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_valueField = static_cast<PVScalar*>(field);
|
m_valueField = static_pointer_cast<PVScalar>(field);
|
||||||
}
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@@ -83,56 +83,56 @@ class MockChannelProcess :
|
|||||||
case pvBoolean:
|
case pvBoolean:
|
||||||
{
|
{
|
||||||
// negate
|
// negate
|
||||||
PVBoolean *pvBoolean = static_cast<PVBoolean*>(m_valueField);
|
PVBooleanPtr pvBoolean = static_pointer_cast<PVBoolean>(m_valueField);
|
||||||
pvBoolean->put(!pvBoolean->get());
|
pvBoolean->put(!pvBoolean->get());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case pvByte:
|
case pvByte:
|
||||||
{
|
{
|
||||||
// increment by one
|
// increment by one
|
||||||
PVByte *pvByte = static_cast<PVByte*>(m_valueField);
|
PVBytePtr pvByte = static_pointer_cast<PVByte>(m_valueField);
|
||||||
pvByte->put(pvByte->get() + 1);
|
pvByte->put(pvByte->get() + 1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case pvShort:
|
case pvShort:
|
||||||
{
|
{
|
||||||
// increment by one
|
// increment by one
|
||||||
PVShort *pvShort = static_cast<PVShort*>(m_valueField);
|
PVShortPtr pvShort = static_pointer_cast<PVShort>(m_valueField);
|
||||||
pvShort->put(pvShort->get() + 1);
|
pvShort->put(pvShort->get() + 1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case pvInt:
|
case pvInt:
|
||||||
{
|
{
|
||||||
// increment by one
|
// increment by one
|
||||||
PVInt *pvInt = static_cast<PVInt*>(m_valueField);
|
PVIntPtr pvInt = static_pointer_cast<PVInt>(m_valueField);
|
||||||
pvInt->put(pvInt->get() + 1);
|
pvInt->put(pvInt->get() + 1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case pvLong:
|
case pvLong:
|
||||||
{
|
{
|
||||||
// increment by one
|
// increment by one
|
||||||
PVLong *pvLong = static_cast<PVLong*>(m_valueField);
|
PVLongPtr pvLong = static_pointer_cast<PVLong>(m_valueField);
|
||||||
pvLong->put(pvLong->get() + 1);
|
pvLong->put(pvLong->get() + 1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case pvFloat:
|
case pvFloat:
|
||||||
{
|
{
|
||||||
// increment by one
|
// increment by one
|
||||||
PVFloat *pvFloat = static_cast<PVFloat*>(m_valueField);
|
PVFloatPtr pvFloat = static_pointer_cast<PVFloat>(m_valueField);
|
||||||
pvFloat->put(pvFloat->get() + 1.0f);
|
pvFloat->put(pvFloat->get() + 1.0f);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case pvDouble:
|
case pvDouble:
|
||||||
{
|
{
|
||||||
// increment by one
|
// increment by one
|
||||||
PVDouble *pvDouble = static_cast<PVDouble*>(m_valueField);
|
PVDoublePtr pvDouble = static_pointer_cast<PVDouble>(m_valueField);
|
||||||
pvDouble->put(pvDouble->get() + 1.0);
|
pvDouble->put(pvDouble->get() + 1.0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case pvString:
|
case pvString:
|
||||||
{
|
{
|
||||||
// increment by one
|
// increment by one
|
||||||
PVString *pvString = static_cast<PVString*>(m_valueField);
|
PVStringPtr pvString = static_pointer_cast<PVString>(m_valueField);
|
||||||
String val = pvString->get();
|
String val = pvString->get();
|
||||||
if (val.empty())
|
if (val.empty())
|
||||||
pvString->put("gen0");
|
pvString->put("gen0");
|
||||||
@@ -404,8 +404,8 @@ class MockChannelRPC : public ChannelRPC
|
|||||||
if (m_channelName == "rpcNTTable")
|
if (m_channelName == "rpcNTTable")
|
||||||
{
|
{
|
||||||
// TODO type check, getStringField is verbose
|
// TODO type check, getStringField is verbose
|
||||||
PVString* columns = static_cast<PVString*>(pvArgument->getSubField("columns"));
|
PVStringPtr columns = static_pointer_cast<PVString>(pvArgument->getSubField("columns"));
|
||||||
if (columns == 0)
|
if (columns.get() == 0)
|
||||||
{
|
{
|
||||||
PVStructure::shared_pointer nullPtr;
|
PVStructure::shared_pointer nullPtr;
|
||||||
Status errorStatus(Status::STATUSTYPE_ERROR, "no columns specified");
|
Status errorStatus(Status::STATUSTYPE_ERROR, "no columns specified");
|
||||||
@@ -415,23 +415,27 @@ class MockChannelRPC : public ChannelRPC
|
|||||||
{
|
{
|
||||||
int i = 0;
|
int i = 0;
|
||||||
int totalFields = 1 + 1 + atoi(columns->get().c_str()); // normativeType, labels, <columns>
|
int totalFields = 1 + 1 + atoi(columns->get().c_str()); // normativeType, labels, <columns>
|
||||||
FieldConstPtrArray fields = new FieldConstPtr[totalFields];
|
StringArray fieldNames(totalFields);
|
||||||
fields[i++] = getFieldCreate()->createScalar("normativeType", pvString);
|
FieldConstPtrArray fields(totalFields);
|
||||||
fields[i++] = getFieldCreate()->createScalarArray("labels", pvString);
|
fieldNames[i] = "normativeType";
|
||||||
|
fields[i++] = getFieldCreate()->createScalar(pvString);
|
||||||
|
fieldNames[i] = "labels";
|
||||||
|
fields[i++] = getFieldCreate()->createScalarArray(pvString);
|
||||||
char sbuf[16];
|
char sbuf[16];
|
||||||
vector<String> labels;
|
vector<String> labels;
|
||||||
for (; i < totalFields; i++)
|
for (; i < totalFields; i++)
|
||||||
{
|
{
|
||||||
sprintf(sbuf, "column%d", i-1 );
|
sprintf(sbuf, "column%d", i-1 );
|
||||||
fields[i] = getFieldCreate()->createScalarArray(sbuf, pvDouble);
|
fieldNames[i] = sbuf;
|
||||||
|
fields[i] = getFieldCreate()->createScalarArray(pvDouble);
|
||||||
labels.push_back(sbuf);
|
labels.push_back(sbuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
PVStructure::shared_pointer result(
|
PVStructure::shared_pointer result(
|
||||||
new PVStructure(NULL, getFieldCreate()->createStructure("", totalFields, fields)));
|
new PVStructure(getFieldCreate()->createStructure(fieldNames, fields)));
|
||||||
|
|
||||||
result->getStringField("normativeType")->put("NTTable");
|
result->getStringField("normativeType")->put("NTTable");
|
||||||
static_cast<PVStringArray*>(result->getScalarArrayField("labels", pvString))->put(0, labels.size(), &labels[0], 0);
|
static_pointer_cast<PVStringArray>(result->getScalarArrayField("labels", pvString))->put(0, labels.size(), &labels[0], 0);
|
||||||
|
|
||||||
srand ( time(NULL) );
|
srand ( time(NULL) );
|
||||||
|
|
||||||
@@ -446,7 +450,7 @@ class MockChannelRPC : public ChannelRPC
|
|||||||
iter++)
|
iter++)
|
||||||
{
|
{
|
||||||
FILL_VALUES;
|
FILL_VALUES;
|
||||||
static_cast<PVDoubleArray*>(result->getScalarArrayField(*iter, pvDouble))->put(0, ROWS, values, 0);
|
static_pointer_cast<PVDoubleArray>(result->getScalarArrayField(*iter, pvDouble))->put(0, ROWS, values, 0);
|
||||||
}
|
}
|
||||||
m_channelRPCRequester->requestDone(Status::Ok, result);
|
m_channelRPCRequester->requestDone(Status::Ok, result);
|
||||||
}
|
}
|
||||||
@@ -499,7 +503,7 @@ class MockChannelArray : public ChannelArray
|
|||||||
protected:
|
protected:
|
||||||
MockChannelArray(ChannelArrayRequester::shared_pointer const & channelArrayRequester, PVStructure::shared_pointer const & pvStructure, PVStructure::shared_pointer const & pvRequest) :
|
MockChannelArray(ChannelArrayRequester::shared_pointer const & channelArrayRequester, PVStructure::shared_pointer const & pvStructure, PVStructure::shared_pointer const & pvRequest) :
|
||||||
m_channelArrayRequester(channelArrayRequester),
|
m_channelArrayRequester(channelArrayRequester),
|
||||||
m_pvArray(getPVDataCreate()->createPVScalarArray(0, "", pvDouble))
|
m_pvArray(getPVDataCreate()->createPVScalarArray(pvDouble))
|
||||||
{
|
{
|
||||||
PVDATA_REFCOUNT_MONITOR_CONSTRUCT(mockChannelArray);
|
PVDATA_REFCOUNT_MONITOR_CONSTRUCT(mockChannelArray);
|
||||||
}
|
}
|
||||||
@@ -625,7 +629,7 @@ class MockMonitor : public Monitor, public MonitorElement, public std::tr1::enab
|
|||||||
return Status::Ok;
|
return Status::Ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual MonitorElement::shared_pointer const & poll()
|
virtual MonitorElement::shared_pointer poll()
|
||||||
{
|
{
|
||||||
Lock xx(m_lock);
|
Lock xx(m_lock);
|
||||||
if (m_count)
|
if (m_count)
|
||||||
@@ -640,7 +644,7 @@ class MockMonitor : public Monitor, public MonitorElement, public std::tr1::enab
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void release(MonitorElement::shared_pointer const & monitorElement)
|
virtual void release(MonitorElement::shared_pointer & monitorElement)
|
||||||
{
|
{
|
||||||
Lock xx(m_lock);
|
Lock xx(m_lock);
|
||||||
if (m_count)
|
if (m_count)
|
||||||
@@ -716,21 +720,62 @@ class MockChannel : public Channel {
|
|||||||
|
|
||||||
if (m_name.find("array") == 0)
|
if (m_name.find("array") == 0)
|
||||||
{
|
{
|
||||||
String allProperties("alarm,timeStamp,display,control");
|
String allProperties("");
|
||||||
m_pvStructure.reset(getStandardPVField()->scalarArray(0,name,pvDouble,allProperties));
|
// String allProperties("alarm,timeStamp,display,control");
|
||||||
PVDoubleArray *pvField = static_cast<PVDoubleArray*>(m_pvStructure->getScalarArrayField(String("value"), pvDouble));
|
m_pvStructure = getStandardPVField()->scalarArray(pvDouble,allProperties);
|
||||||
double v = 0;
|
PVDoubleArrayPtr pvField = static_pointer_cast<PVDoubleArray>(m_pvStructure->getScalarArrayField(String("value"), pvDouble));
|
||||||
int ix = 0;
|
|
||||||
const int COUNT = 1000;
|
|
||||||
|
|
||||||
pvField->setCapacity(1000*COUNT);
|
int specCount = 0; char postfix[64];
|
||||||
for (int n = 0; n < 1000; n++)
|
int done = sscanf(m_name.c_str(), "array%d%s", &specCount, postfix);
|
||||||
|
|
||||||
|
if (done && specCount > 0)
|
||||||
{
|
{
|
||||||
|
pvField->setCapacity(specCount);
|
||||||
double array[COUNT];
|
pvField->setLength(specCount);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
double v = 0;
|
||||||
|
int ix = 0;
|
||||||
|
const int COUNT = 1024;
|
||||||
|
|
||||||
|
pvField->setCapacity(1024*COUNT);
|
||||||
|
for (int n = 0; n < 1024; n++)
|
||||||
|
{
|
||||||
|
|
||||||
|
double array[COUNT];
|
||||||
|
for (int i = 0; i < COUNT; i++)
|
||||||
|
{
|
||||||
|
array[i] = v; v+=1.1;
|
||||||
|
}
|
||||||
|
pvField->put(ix, COUNT, array, 0);
|
||||||
|
ix += COUNT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
printf("array prepared------------------------------------!!!\n");
|
||||||
|
String str;
|
||||||
|
pvField->toString(&str);
|
||||||
|
printf("%s\n", str.c_str());
|
||||||
|
printf("=============------------------------------------!!!\n");
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
else if (m_name.find("image") == 0)
|
||||||
|
{
|
||||||
|
String allProperties("alarm,timeStamp,display,control");
|
||||||
|
m_pvStructure = getStandardPVField()->scalarArray(pvByte,allProperties);
|
||||||
|
PVByteArrayPtr pvField = static_pointer_cast<PVByteArray>(m_pvStructure->getScalarArrayField(String("value"), pvByte));
|
||||||
|
int ix = 0;
|
||||||
|
const int COUNT = 1024;
|
||||||
|
|
||||||
|
pvField->setCapacity(1024*COUNT);
|
||||||
|
for (int n = 0; n < 1024; n++)
|
||||||
|
{
|
||||||
|
|
||||||
|
int8 array[COUNT];
|
||||||
for (int i = 0; i < COUNT; i++)
|
for (int i = 0; i < COUNT; i++)
|
||||||
{
|
{
|
||||||
array[i] = v; v+=1.1;
|
array[i] = ix;
|
||||||
}
|
}
|
||||||
pvField->put(ix, COUNT, array, 0);
|
pvField->put(ix, COUNT, array, 0);
|
||||||
ix += COUNT;
|
ix += COUNT;
|
||||||
@@ -741,17 +786,24 @@ class MockChannel : public Channel {
|
|||||||
pvField->toString(&str);
|
pvField->toString(&str);
|
||||||
printf("%s\n", str.c_str());
|
printf("%s\n", str.c_str());
|
||||||
printf("=============------------------------------------!!!\n");
|
printf("=============------------------------------------!!!\n");
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
else if (m_name.find("rpc") == 0)
|
else if (m_name.find("rpc") == 0)
|
||||||
{
|
{
|
||||||
m_pvStructure.reset(getPVDataCreate()->createPVStructure(0, name, 0, static_cast<epics::pvData::FieldConstPtr*>(0)));
|
StringArray fieldNames;
|
||||||
|
PVFieldPtrArray fields;
|
||||||
|
m_pvStructure = getPVDataCreate()->createPVStructure(fieldNames, fields);
|
||||||
|
}
|
||||||
|
else if (m_name.find("valueOnly") == 0)
|
||||||
|
{
|
||||||
|
String allProperties("");
|
||||||
|
m_pvStructure = getStandardPVField()->scalar(pvDouble,allProperties);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
String allProperties("alarm,timeStamp,display,control,valueAlarm");
|
String allProperties("alarm,timeStamp,display,control,valueAlarm");
|
||||||
m_pvStructure.reset(getStandardPVField()->scalar(0,name,pvDouble,allProperties));
|
m_pvStructure = getStandardPVField()->scalar(pvDouble,allProperties);
|
||||||
PVDouble *pvField = m_pvStructure->getDoubleField(String("value"));
|
PVDoublePtr pvField = m_pvStructure->getDoubleField(String("value"));
|
||||||
pvField->put(1.123);
|
pvField->put(1.123);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -788,7 +840,7 @@ class MockChannel : public Channel {
|
|||||||
|
|
||||||
virtual void message(String message,MessageType messageType)
|
virtual void message(String message,MessageType messageType)
|
||||||
{
|
{
|
||||||
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
|
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")" << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual ChannelProvider::shared_pointer const & getProvider()
|
virtual ChannelProvider::shared_pointer const & getProvider()
|
||||||
@@ -831,7 +883,7 @@ class MockChannel : public Channel {
|
|||||||
PVFieldPtr pvField;
|
PVFieldPtr pvField;
|
||||||
if(subField == "")
|
if(subField == "")
|
||||||
{
|
{
|
||||||
pvField = m_pvStructure.get();
|
pvField = m_pvStructure;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -1042,7 +1094,7 @@ class ChannelRequesterImpl : public ChannelRequester
|
|||||||
|
|
||||||
virtual void message(String message,MessageType messageType)
|
virtual void message(String message,MessageType messageType)
|
||||||
{
|
{
|
||||||
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
|
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")" << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void channelCreated(const epics::pvData::Status& status, Channel::shared_pointer &channel)
|
virtual void channelCreated(const epics::pvData::Status& status, Channel::shared_pointer &channel)
|
||||||
@@ -1066,7 +1118,7 @@ class GetFieldRequesterImpl : public GetFieldRequester
|
|||||||
|
|
||||||
virtual void message(String message,MessageType messageType)
|
virtual void message(String message,MessageType messageType)
|
||||||
{
|
{
|
||||||
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
|
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")" << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void getDone(const epics::pvData::Status& status,epics::pvData::FieldConstPtr field)
|
virtual void getDone(const epics::pvData::Status& status,epics::pvData::FieldConstPtr field)
|
||||||
@@ -1097,7 +1149,7 @@ class ChannelGetRequesterImpl : public ChannelGetRequester
|
|||||||
|
|
||||||
virtual void message(String message,MessageType messageType)
|
virtual void message(String message,MessageType messageType)
|
||||||
{
|
{
|
||||||
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
|
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")" << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void channelGetConnect(const epics::pvData::Status& status, ChannelGet::shared_pointer const & channelGet,
|
virtual void channelGetConnect(const epics::pvData::Status& status, ChannelGet::shared_pointer const & channelGet,
|
||||||
@@ -1133,7 +1185,7 @@ class ChannelPutRequesterImpl : public ChannelPutRequester
|
|||||||
|
|
||||||
virtual void message(String message,MessageType messageType)
|
virtual void message(String message,MessageType messageType)
|
||||||
{
|
{
|
||||||
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
|
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")" << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void channelPutConnect(const epics::pvData::Status& status,ChannelPut::shared_pointer const & channelPut,
|
virtual void channelPutConnect(const epics::pvData::Status& status,ChannelPut::shared_pointer const & channelPut,
|
||||||
@@ -1176,7 +1228,7 @@ class MonitorRequesterImpl : public MonitorRequester
|
|||||||
|
|
||||||
virtual void message(String message,MessageType messageType)
|
virtual void message(String message,MessageType messageType)
|
||||||
{
|
{
|
||||||
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
|
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")" << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void monitorConnect(const Status& status, Monitor::shared_pointer const & monitor, StructureConstPtr& structure)
|
virtual void monitorConnect(const Status& status, Monitor::shared_pointer const & monitor, StructureConstPtr& structure)
|
||||||
@@ -1197,11 +1249,11 @@ class MonitorRequesterImpl : public MonitorRequester
|
|||||||
MonitorElement::shared_pointer element = monitor->poll();
|
MonitorElement::shared_pointer element = monitor->poll();
|
||||||
|
|
||||||
String str("changed/overrun ");
|
String str("changed/overrun ");
|
||||||
element->getChangedBitSet()->toString(&str);
|
element->changedBitSet->toString(&str);
|
||||||
str += '/';
|
str += '/';
|
||||||
element->getOverrunBitSet()->toString(&str);
|
element->overrunBitSet->toString(&str);
|
||||||
str += '\n';
|
str += '\n';
|
||||||
element->getPVStructure()->toString(&str);
|
element->pvStructurePtr->toString(&str);
|
||||||
std::cout << str << std::endl;
|
std::cout << str << std::endl;
|
||||||
|
|
||||||
monitor->release(element);
|
monitor->release(element);
|
||||||
@@ -1225,7 +1277,7 @@ class ChannelProcessRequesterImpl : public ChannelProcessRequester
|
|||||||
|
|
||||||
virtual void message(String message,MessageType messageType)
|
virtual void message(String message,MessageType messageType)
|
||||||
{
|
{
|
||||||
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
|
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")" << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void channelProcessConnect(const epics::pvData::Status& status,ChannelProcess::shared_pointer const & channelProcess)
|
virtual void channelProcessConnect(const epics::pvData::Status& status,ChannelProcess::shared_pointer const & channelProcess)
|
||||||
|
|||||||
@@ -112,7 +112,7 @@ TEST(inetAddressUtils, encodeAsIPv6Address)
|
|||||||
osiSockAddr addr = *paddr;
|
osiSockAddr addr = *paddr;
|
||||||
|
|
||||||
encodeAsIPv6Address(buff.get(), &addr);
|
encodeAsIPv6Address(buff.get(), &addr);
|
||||||
ASSERT_EQ(static_cast<uintptr_t>(16), buff->getPosition());
|
ASSERT_EQ(static_cast<size_t>(16), buff->getPosition());
|
||||||
|
|
||||||
EXPECT_TRUE(strncmp(buff->getArray(), src, 16)==0);
|
EXPECT_TRUE(strncmp(buff->getArray(), src, 16)==0);
|
||||||
}
|
}
|
||||||
@@ -134,4 +134,4 @@ TEST(inetAddressUtils, getBroadcastAddresses)
|
|||||||
cout<<"\t"<<inetAddressToString(broadcasts->at(i))<<endl;
|
cout<<"\t"<<inetAddressToString(broadcasts->at(i))<<endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user