client : new TCP transport implementation ( using synapse library ) in synapse_tcp_protocol.pas

server : TCP server implementatiion ( using synapse library ) in synapse_tcp_server.pas
Delphi : first binary format support
bugs fix in the WSDL generation for the server side

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@158 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
inoussa
2007-05-02 22:55:35 +00:00
parent 7e4a4bb440
commit 74d5466765
56 changed files with 4190 additions and 842 deletions

View File

@ -11,7 +11,7 @@
}
unit base_binary_formatter;
{$mode objfpc}{$H+}
{$INCLUDE wst.inc}
{$DEFINE wst_binary_header}
interface
@ -154,7 +154,7 @@ type
const ADataType : TDataType
):PDataBuffer;override;
function CreateInnerBuffer(const ADataType : TDataType):PDataBuffer;override;
function GetInnerBuffer():PDataBuffer;
function GetInnerBuffer():PDataBuffer;overload;override;
procedure NilCurrentScope();override;
function IsCurrentScopeNil():Boolean;override;
End;
@ -169,7 +169,7 @@ type
{$IFDEF wst_binary_header}
FHeaderEnterCount : Integer;
{$ENDIF}
private
protected
function GetCurrentScope: String;
function GetCurrentScopeObject():PDataBuffer;
procedure SetSerializationStyle(const ASerializationStyle : TSerializationStyle);
@ -315,8 +315,8 @@ type
procedure SaveToStream(AStream : TStream);
procedure LoadFromStream(AStream : TStream);
procedure Error(Const AMsg:string);
procedure Error(Const AMsg:string; Const AArgs : array of const);
procedure Error(Const AMsg:string);overload;
procedure Error(Const AMsg:string; Const AArgs : array of const);overload;
End;
TDBGPinterProc = procedure(const AMsg:string);
@ -339,6 +339,8 @@ type
implementation
{$INCLUDE wst_rtl_imp.inc}
procedure PrintObj(const ARoot: PDataBuffer; const ALevel : Integer; const APrinterProc : TDBGPinterProc);
Var
p : PObjectBufferItem;
@ -418,7 +420,7 @@ Var
p : PObjectBufferItem;
Begin
If ( AOwner^.DataType = dtObject ) Then Begin
p := GetMem(SizeOf(PObjectBufferItem^));
p := wst_GetMem(SizeOf(TObjectBufferItem));
p^.Data := AChildData;
p^.Next := Nil;
If Assigned(AOwner^.ObjectData^.Head) Then Begin
@ -446,8 +448,8 @@ function CreateObjBuffer(
var
resLen, i : Integer;
begin
resLen := SizeOf(PDataBuffer^);
Result := GetMem(resLen);
resLen := SizeOf(TDataBuffer);
Result := wst_GetMem(resLen);
Try
FillChar(Result^,resLen,#0);
Result^.Name := AName;
@ -455,15 +457,15 @@ begin
Case Result^.DataType Of
dtString :
Begin
i := SizeOf(PStringBuffer^);
Result^.StrData := GetMem(i);
i := SizeOf(TStringBuffer);
Result^.StrData := wst_GetMem(i);
FillChar(Result^.StrData^,i,#0);
Result^.StrData^.Data := '';
End;
dtObject :
Begin
Result^.ObjectData := GetMem(SizeOf(PObjectBuffer^));
FillChar(Result^.ObjectData^,SizeOf(PObjectBuffer^),#0);
Result^.ObjectData := wst_GetMem(SizeOf(TObjectBuffer));
FillChar(Result^.ObjectData^,SizeOf(TObjectBuffer),#0);
End;
End;
If Assigned(AOwner) Then
@ -484,18 +486,18 @@ Var
i, resLen : Integer;
begin
Assert(ALength>=0);
resLen := SizeOf(PDataBuffer^);
Result := GetMem(resLen);
resLen := SizeOf(TDataBuffer);
Result := wst_GetMem(resLen);
Try
FillChar(Result^,resLen,#0);
Result^.Name := AName;
Result^.DataType := dtArray;
Result^.ArrayData := GetMem(SizeOf(PArrayBuffer^));
FillChar(Result^.ArrayData^,SizeOf(PArrayBuffer^),#0);
Result^.ArrayData := wst_GetMem(SizeOf(TArrayBuffer));
FillChar(Result^.ArrayData^,SizeOf(TArrayBuffer),#0);
Result^.ArrayData^.Count := ALength;
If ( ALength > 0 ) Then Begin
i := ALength*SizeOf(PDataBuffer);
Result^.ArrayData^.Items := GetMem(i);
Result^.ArrayData^.Items := wst_GetMem(i);
FillChar(Result^.ArrayData^.Items^[0],i,#0);
End Else Begin
Result^.ArrayData^.Items := Nil;
@ -669,7 +671,7 @@ Begin
End;
dtArray :
Begin
eltLen := SizeOf(PDataBuffer^);
eltLen := SizeOf(TDataBuffer);
For j := 0 to Pred(AOwner^.ArrayData^.Count) Do Begin
ClearObj(AOwner^.ArrayData^.Items^[j]);
Freemem(AOwner^.ArrayData^.Items^[j],eltLen);
@ -679,7 +681,7 @@ Begin
Freemem(AOwner^.ArrayData^.Items,i);
AOwner^.ArrayData^.Items := Nil;
ClearObjectBuffer(AOwner^.ArrayData^.Attributes);
i := SizeOf(PArrayBuffer^);
i := SizeOf(TArrayBuffer);
Freemem(AOwner^.ArrayData,i);
AOwner^.ArrayData := Nil;
End;
@ -829,7 +831,7 @@ end;
function TBaseBinaryFormatter.HasScope(): Boolean;
begin
Result := Assigned(FStack.Peek);
Result := ( FStack.Peek <> nil );
end;
procedure TBaseBinaryFormatter.CheckScope();
@ -1121,12 +1123,12 @@ Var
floatDt : TFloat_Extended_10;
begin
Case ATypeInfo^.Kind Of
tkLString, tkAString :
tkLString{$IFDEF FPC},tkAString{$ENDIF} :
Begin
strData := String(AData);
PutStr(AName,ATypeInfo,strData);
End;
tkInt64,tkQWord :
tkInt64{$IFDEF FPC},tkQWord{$ENDIF} :
Begin
int64Data := Int64(AData);
PutInt64(AName,ATypeInfo,int64Data);
@ -1136,13 +1138,23 @@ begin
objData := TObject(AData);
PutObj(AName,ATypeInfo,objData);
End;
{$IFDEF FPC}
tkBool :
Begin
boolData := Boolean(AData);
PutBool(AName,ATypeInfo,boolData);
End;
{$ENDIF}
tkInteger, tkEnumeration :
Begin
begin
{$IFNDEF FPC}
if ( ATypeInfo^.Kind = tkEnumeration ) and
( GetTypeData(ATypeInfo)^.BaseType^ = TypeInfo(Boolean) )
then begin
boolData := Boolean(AData);
PutBool(AName,ATypeInfo,boolData);
end else begin
{$ENDIF}
enumData := 0;
Case GetTypeData(ATypeInfo)^.OrdType Of
otSByte : enumData := ShortInt(AData);
@ -1156,7 +1168,10 @@ begin
PutInt(AName,ATypeInfo,enumData)
Else
PutEnum(AName,ATypeInfo,enumData);
End;
{$IFNDEF FPC}
end;
{$ENDIF}
end;
tkFloat :
Begin
floatDt := 0;
@ -1186,7 +1201,7 @@ var
begin
CheckScope();
case ATypeInfo^.Kind of
tkLString, tkAString :
tkLString{$IFDEF FPC},tkAString{$ENDIF} :
begin
strData := string(AData);
StackTop().CreateInnerBuffer(dtString)^.StrData^.Data := strData;
@ -1196,20 +1211,24 @@ begin
int64SData := Int64(AData);
StackTop().CreateInnerBuffer(dtInt64S)^.Int64S := int64SData;
end;
{$IFDEF FPC}
tkQWord :
begin
int64UData := QWord(AData);
StackTop().CreateInnerBuffer(dtInt64U)^.Int64U := int64UData;
end;
{$ENDIF}
tkClass :
begin
raise EBinaryFormatterException.Create('Inner Scope value must be a "simple type" value.');
end;
{$IFDEF FPC}
tkBool :
begin
boolData := Boolean(AData);
StackTop().CreateInnerBuffer(dtBool)^.BoolData := boolData;
end;
{$ENDIF}
tkInteger :
begin
enumData := 0;
@ -1248,6 +1267,14 @@ begin
end;
tkEnumeration :
begin
{$IFNDEF FPC}
if ( ATypeInfo^.Kind = tkEnumeration ) and
( GetTypeData(ATypeInfo)^.BaseType^ = TypeInfo(Boolean) )
then begin
boolData := Boolean(AData);
StackTop().CreateInnerBuffer(dtBool)^.BoolData := boolData;
end else begin
{$ENDIF}
enumData := 0;
case GetTypeData(ATypeInfo)^.OrdType of
otSByte : enumData := ShortInt(AData);
@ -1258,6 +1285,9 @@ begin
otULong : enumData := LongWord(AData);
end;
StackTop().CreateInnerBuffer(dtEnum)^.EnumData := enumData;
{$IFNDEF FPC}
end;
{$ENDIF}
end;
tkFloat :
begin
@ -1309,13 +1339,13 @@ Var
floatDt : TFloat_Extended_10;
begin
Case ATypeInfo^.Kind Of
tkInt64, tkQWord :
tkInt64{$IFDEF FPC},tkQWord{$ENDIF} :
Begin
int64Data := 0;
GetInt64(ATypeInfo,AName,int64Data);
Int64(AData) := int64Data;
End;
tkLString, tkAString :
tkLString{$IFDEF FPC},tkAString{$ENDIF} :
Begin
strData := '';
GetStr(ATypeInfo,AName,strData);
@ -1327,14 +1357,25 @@ begin
GetObj(ATypeInfo,AName,objData);
TObject(AData) := objData;
End;
{$IFDEF FPC}
tkBool :
Begin
boolData := False;
GetBool(ATypeInfo,AName,boolData);
Boolean(AData) := boolData;
End;
{$ENDIF}
tkInteger, tkEnumeration :
Begin
{$IFNDEF FPC}
if ( ATypeInfo^.Kind = tkEnumeration ) and
( GetTypeData(ATypeInfo)^.BaseType^ = TypeInfo(Boolean) )
then begin
boolData := False;
GetBool(ATypeInfo,AName,boolData);
Boolean(AData) := boolData;
end else begin
{$ENDIF}
enumData := 0;
If ( ATypeInfo^.Kind = tkInteger ) Then
GetInt(ATypeInfo,AName,enumData)
@ -1348,6 +1389,9 @@ begin
otSLong : LongInt(AData) := enumData;
otULong : LongWord(AData) := enumData;
End;
{$IFNDEF FPC}
end;
{$ENDIF}
End;
tkFloat :
Begin
@ -1375,11 +1419,19 @@ begin
dataBuffer := StackTop().GetInnerBuffer();
Case ATypeInfo^.Kind Of
tkInt64 : Int64(AData) := dataBuffer^.Int64S;
{$IFDEF FPC}
tkQWord : QWord(AData) := dataBuffer^.Int64U;
tkLString,
tkAString : string(AData) := dataBuffer^.StrData^.Data;
{$ENDIF}
tkLString
{$IFDEF FPC},
tkAString
{$ENDIF} : string(AData) := dataBuffer^.StrData^.Data;
tkClass : raise EBinaryFormatterException.Create('Inner Scope value must be a "simple type" value.');
{$IFDEF FPC}
tkBool : Boolean(AData) := dataBuffer^.BoolData;
{$ENDIF}
tkInteger :
begin
case GetTypeData(ATypeInfo)^.OrdType Of
@ -1393,6 +1445,13 @@ begin
end;
tkEnumeration :
begin
{$IFNDEF FPC}
if ( ATypeInfo^.Kind = tkEnumeration ) and
( GetTypeData(ATypeInfo)^.BaseType^ = TypeInfo(Boolean) )
then begin
Boolean(AData) := dataBuffer^.BoolData;
end else begin
{$ENDIF}
case GetTypeData(ATypeInfo)^.OrdType Of
otSByte : ShortInt(AData) := dataBuffer^.EnumData;
otUByte : Byte(AData) := dataBuffer^.EnumData;
@ -1401,6 +1460,9 @@ begin
otSLong : LongInt(AData) := dataBuffer^.EnumData;
otULong : LongWord(AData) := dataBuffer^.EnumData;
end;
{$IFNDEF FPC}
end;
{$ENDIF}
end;
tkFloat :
begin

View File

@ -12,13 +12,15 @@
}
unit base_service_intf;
{$mode objfpc}{$H+}
{$INCLUDE wst.inc}
interface
uses
Classes, SysUtils, TypInfo, Contnrs;
{$INCLUDE wst_delphi.inc}
const
stBase = 0;
stObject = stBase + 1;
@ -32,6 +34,7 @@ const
sEmbedded = 'embedded';
type
{ standart data types defines }
anyURI = type string;
token = type string;
@ -179,8 +182,8 @@ type
procedure LoadFromStream(AStream : TStream);
// This procedures will raise exceptions!!!
procedure Error(Const AMsg:string);
procedure Error(Const AMsg:string; Const AArgs : array of const);
procedure Error(Const AMsg:string);overload;
procedure Error(Const AMsg:string; Const AArgs : array of const);overload;
End;
{ TSimpleCallContext }
@ -563,6 +566,7 @@ type
class function GetItemTypeInfo():PTypeInfo;override;
constructor Create();override;
procedure Assign(Source: TPersistent); override;
procedure SetLength(Const ANewSize : Integer);override;
Property Item[AIndex:Integer] : TBaseRemotable Read GetItem;Default;
@ -959,7 +963,7 @@ type
function FindFactory(const AName: string): IItemFactory;
procedure Register(
const AName : string;
const AFactory : IItemFactory
AFactory : IItemFactory
);
protected
property Count : Integer read GetCount;
@ -1075,8 +1079,8 @@ type
TStoredPropertyManager = class(TInterfacedObject,IPropertyManager)
private
FData : TStringList;
procedure Error(Const AMsg:string);
procedure Error(Const AMsg:string; Const AArgs : array of const);
procedure Error(Const AMsg:string);overload;
procedure Error(Const AMsg:string; Const AArgs : array of const);overload;
protected
procedure SetProperty(Const AName,AValue:string);
procedure SetProperties(Const APropsStr:string);
@ -1198,6 +1202,7 @@ begin
r.Register(sXSD_NS,TypeInfo(TComplexBooleanContentRemotable),'boolean').AddPascalSynonym('TComplexBooleanContentRemotable');
end;
{$IFDEF FPC}
function IsStoredPropClass(AClass : TClass;PropInfo : PPropInfo) : TPropStoreType;
begin
case (PropInfo^.PropProcs shr 4) and 3 of
@ -1215,6 +1220,38 @@ begin
Result := pstOptional;
end;
end;
{$ELSE}
function IsStoredPropClass(AClass : TClass;PropInfo : PPropInfo) : TPropStoreType;
{var
b : PByte;
begin
if ( ( PropInfo^.StoredProc and $0FFFFFF00 ) = 0 ) then begin
if LongBool(PropInfo^.StoredProc) then // constante
Result := pstAlways
else
Result := pstNever;
end else begin
b := PByte(PropInfo^.StoredProc);
Inc(b,3);
if ( b^ < $FE ) then begin //StaticMethod
Result := pstOptional;
end else ( b^ > $FE ) begin Field
end else begin // virtual method
end;
end;
end;}
begin
if ( ( Cardinal(PropInfo^.StoredProc) and $0FFFFFF00 ) = 0 ) then begin
if LongBool(PropInfo^.StoredProc) then begin
Result := pstAlways
end else begin
Result := pstNever;
end;
end else begin
Result := pstOptional;
end;
end;
{$ENDIF}
{ TBaseRemotable }
@ -1428,7 +1465,7 @@ begin
typRegItem := GetTypeRegistry().ItemByTypeInfo[ATypeInfo];
for i := 0 to Pred(propCount) do begin
p := propList^[i];
pt := p^.PropType;
pt := p^.PropType{$IFNDEF FPC}^{$ENDIF};
if IsStoredProp(AObject,p) then begin
if IsAttributeProperty(p^.Name) then begin
if ( ss <> ssAttibuteSerialization ) then
@ -1441,12 +1478,12 @@ begin
AStore.SetSerializationStyle(ss);
prpName := typRegItem.GetExternalPropertyName(p^.Name);
case pt^.Kind of
tkInt64,tkQWord :
tkInt64{$IFDEF FPC},tkQWord{$ENDIF} :
begin
int64Data := GetOrdProp(AObject,p^.Name);
AStore.Put(prpName,pt,int64Data);
end;
tkLString, tkAString :
tkLString{$IFDEF FPC},tkAString{$ENDIF} :
begin
strData := GetStrProp(AObject,p^.Name);
AStore.Put(prpName,pt,strData);
@ -1456,15 +1493,25 @@ begin
objData := GetObjectProp(AObject,p^.Name);
AStore.Put(prpName,pt,objData);
end;
{$IFDEF FPC}
tkBool :
begin
boolData := Boolean(GetOrdProp(AObject,p^.Name));
AStore.Put(prpName,pt,boolData);
end;
{$ENDIF}
tkEnumeration,tkInteger :
begin
{$IFNDEF FPC}
if ( pt^.Kind = tkEnumeration ) and
( GetTypeData(pt)^.BaseType^ = TypeInfo(Boolean) )
then begin
boolData := Boolean(GetOrdProp(AObject,p^.Name));
AStore.Put(prpName,pt,boolData);
end else begin
{$ENDIF}
FillChar(enumData,SizeOf(enumData),#0);
case GetTypeData(p^.PropType)^.OrdType of
case GetTypeData(pt)^.OrdType of
otSByte :
begin
enumData.ShortIntData := ShortInt(GetOrdProp(AObject,p^.Name));
@ -1496,19 +1543,22 @@ begin
AStore.Put(prpName,pt,enumData.ULongIntData);
end;
end;
{$IFNDEF FPC}
end;
{$ENDIF}
end;
tkFloat :
begin
FillChar(floatDt,SizeOf(floatDt),#0);
case GetTypeData(p^.PropType)^.FloatType of
case GetTypeData(pt)^.FloatType of
ftSingle :
begin
floatDt.SingleData := Single(GetFloatProp(AObject,p^.Name));
floatDt.SingleData := GetFloatProp(AObject,p^.Name);
AStore.Put(prpName,pt,floatDt.SingleData);
end;
ftDouble :
begin
floatDt.DoubleData := Double(GetFloatProp(AObject,p^.Name));
floatDt.DoubleData := GetFloatProp(AObject,p^.Name);
AStore.Put(prpName,pt,floatDt.DoubleData);
end;
ftExtended :
@ -1518,12 +1568,12 @@ begin
end;
ftCurr :
begin
floatDt.CurrencyData := Currency(GetFloatProp(AObject,p^.Name));
floatDt.CurrencyData := GetFloatProp(AObject,p^.Name);
AStore.Put(prpName,pt,floatDt.CurrencyData);
end;
ftComp :
begin
floatDt.CompData := Comp(GetFloatProp(AObject,p^.Name));
floatDt.CompData := GetFloatProp(AObject,p^.Name);
AStore.Put(prpName,pt,floatDt.CompData);
end;
end;
@ -1585,7 +1635,7 @@ begin
p := propList^[i];
persistType := IsStoredPropClass(objTypeData^.ClassType,p);
If ( persistType in [pstOptional,pstAlways] ) Then Begin
pt := p^.PropType;
pt := p^.PropType{$IFNDEF FPC}^{$ENDIF};
propName := typRegItem.GetExternalPropertyName(p^.Name);
if IsAttributeProperty(p^.Name) then begin
ss := ssAttibuteSerialization;
@ -1596,21 +1646,23 @@ begin
AStore.SetSerializationStyle(ss);
try
Case pt^.Kind Of
tkInt64,tkQWord :
tkInt64{$IFDEF FPC},tkQWord{$ENDIF} :
Begin
AStore.Get(pt,propName,int64Data);
SetOrdProp(AObject,p^.Name,int64Data);
End;
tkLString, tkAString :
tkLString{$IFDEF FPC}, tkAString{$ENDIF} :
Begin
AStore.Get(pt,propName,strData);
SetStrProp(AObject,p^.Name,strData);
End;
{$IFDEF FPC}
tkBool :
Begin
AStore.Get(pt,propName,boolData);
SetOrdProp(AObject,p^.Name,Ord(boolData));
End;
{$ENDIF}
tkClass :
Begin
objData := GetObjectProp(AObject,p^.Name);
@ -1626,8 +1678,16 @@ begin
End;
tkEnumeration,tkInteger :
Begin
{$IFNDEF FPC}
if ( pt^.Kind = tkEnumeration ) and
( GetTypeData(pt)^.BaseType^ = TypeInfo(Boolean) )
then begin
boolData := Boolean(GetOrdProp(AObject,p^.Name));
AStore.Put(propName,pt,boolData);
end else begin
{$ENDIF}
FillChar(enumData,SizeOf(enumData),#0);
Case GetTypeData(p^.PropType)^.OrdType Of
Case GetTypeData(pt)^.OrdType Of
otSByte :
Begin
AStore.Get(pt,propName,enumData.ShortIntData);
@ -1659,12 +1719,15 @@ begin
int64Data := enumData.ULongIntData;
End;
End;
{$IFNDEF FPC}
end;
{$ENDIF}
SetOrdProp(AObject,p^.Name,int64Data);
End;
tkFloat :
Begin
FillChar(floatDt,SizeOf(floatBuffer),#0);
Case GetTypeData(p^.PropType)^.FloatType Of
Case GetTypeData(pt)^.FloatType Of
ftSingle :
Begin
AStore.Get(pt,propName,floatBuffer.SingleData);
@ -1817,6 +1880,27 @@ begin
FArray := Nil;
end;
procedure TBaseObjectArrayRemotable.Assign(Source: TPersistent);
var
src : TBaseObjectArrayRemotable;
i, c : PtrInt;
begin
if Assigned(Source) then begin
if Source.InheritsFrom(TBaseObjectArrayRemotable) then begin
src := TBaseObjectArrayRemotable(Source);
c := src.Length;
SetLength(c);
for i := 0 to Pred(c) do begin
Item[i].Assign(src.Item[i]);
end;
end else begin
inherited Assign(Source);
end;
end else begin
SetLength(0);
end;
end;
procedure TBaseObjectArrayRemotable.SetLength(const ANewSize: Integer);
var
i,oldLen : Integer;
@ -1889,7 +1973,7 @@ end;
procedure TBaseFactoryRegistry.Register(
const AName : string;
const AFactory : IItemFactory
AFactory : IItemFactory
);
begin
Assert(Assigned(AFactory));
@ -3217,6 +3301,7 @@ var
i, propCount, propListLen : Integer;
p, sp : PPropInfo;
selfTypeInfo : PTypeInfo;
srcObj, dstObj : TObject;
begin
if not Assigned(Source) then
Exit;
@ -3232,12 +3317,30 @@ begin
Assigned(p^.SetProc)
then begin
case p^.PropType^.Kind of
tkInt64,tkQWord, tkBool, tkEnumeration,tkInteger :
tkInt64{$IFDEF FPC},tkQWord, tkBool{$ENDIF}, tkEnumeration,tkInteger :
SetOrdProp(Self,p,GetOrdProp(Source,p^.Name));
tkLString, tkAString :
tkLString{$IFDEF FPC}, tkAString{$ENDIF} :
SetStrProp(Self,p,GetStrProp(Source,p^.Name));
tkClass :
SetObjectProp(Self,p,GetObjectProp(Source,p^.Name));
begin
srcObj := GetObjectProp(Source,p^.Name);
dstObj := GetObjectProp(Self,p^.Name);
if ( not Assigned(dstObj) ) and
( Assigned(srcObj) and srcObj.InheritsFrom(TAbstractComplexRemotable) )
then begin
dstObj := TAbstractComplexRemotableClass(srcObj.ClassType).Create();
SetObjectProp(Self,p,dstObj);
end;
if Assigned(dstObj) then begin
if ( srcObj = nil ) then begin
FreeAndNil(dstObj);
SetObjectProp(Self,p,dstObj);
end else begin
if dstObj.InheritsFrom(TPersistent) and srcObj.InheritsFrom(TPersistent) then
TPersistent(dstObj).Assign(TPersistent(srcObj));
end;
end;
end;
tkFloat :
SetFloatProp(Self,p,GetFloatProp(Source,p^.Name));
end;
@ -3288,16 +3391,16 @@ begin
AStore.SetSerializationStyle(ssAttibuteSerialization);
for i := 0 to Pred(propCount) do begin
p := propList^[i];
pt := p^.PropType;
pt := p^.PropType{$IFNDEF FPC}^{$ENDIF};
propName := tr.ItemByTypeInfo[pt].GetExternalPropertyName(p^.Name);
if IsStoredProp(AObject,p) then begin
case pt^.Kind of
tkInt64,tkQWord :
tkInt64{$IFDEF FPC},tkQWord{$ENDIF} :
begin
int64Data := GetOrdProp(AObject,p^.Name);
AStore.Put(propName,pt,int64Data);
end;
tkLString, tkAString :
tkLString{$IFDEF FPC},tkAString{$ENDIF} :
begin
strData := GetStrProp(AObject,p^.Name);
AStore.Put(propName,pt,strData);
@ -3307,15 +3410,25 @@ begin
objData := GetObjectProp(AObject,p^.Name);
AStore.Put(propName,pt,objData);
end;
{$IFDEF FPC}
tkBool :
begin
boolData := Boolean(GetOrdProp(AObject,p^.Name));
AStore.Put(propName,pt,boolData);
end;
{$ENDIF}
tkEnumeration,tkInteger :
begin
{$IFNDEF FPC}
if ( pt^.Kind = tkEnumeration ) and
( GetTypeData(pt)^.BaseType^ = TypeInfo(Boolean) )
then begin
boolData := Boolean(GetOrdProp(AObject,p^.Name));
AStore.Put(propName,pt,boolData);
end else begin
{$ENDIF}
FillChar(enumData,SizeOf(enumData),#0);
case GetTypeData(p^.PropType)^.OrdType of
case GetTypeData(pt)^.OrdType of
otSByte :
begin
enumData.ShortIntData := ShortInt(GetOrdProp(AObject,p^.Name));
@ -3347,19 +3460,22 @@ begin
AStore.Put(propName,pt,enumData.ULongIntData);
end;
end;
{$IFNDEF FPC}
end;
{$ENDIF}
end;
tkFloat :
begin
FillChar(floatDt,SizeOf(floatDt),#0);
case GetTypeData(p^.PropType)^.FloatType of
case GetTypeData(pt)^.FloatType of
ftSingle :
begin
floatDt.SingleData := Single(GetFloatProp(AObject,p^.Name));
floatDt.SingleData := GetFloatProp(AObject,p^.Name);
AStore.Put(propName,pt,floatDt.SingleData);
end;
ftDouble :
begin
floatDt.DoubleData := Double(GetFloatProp(AObject,p^.Name));
floatDt.DoubleData := GetFloatProp(AObject,p^.Name);
AStore.Put(propName,pt,floatDt.DoubleData);
end;
ftExtended :
@ -3369,12 +3485,12 @@ begin
end;
ftCurr :
begin
floatDt.CurrencyData := Currency(GetFloatProp(AObject,p^.Name));
floatDt.CurrencyData := GetFloatProp(AObject,p^.Name);
AStore.Put(propName,pt,floatDt.CurrencyData);
end;
ftComp :
begin
floatDt.CompData := Comp(GetFloatProp(AObject,p^.Name));
floatDt.CompData := GetFloatProp(AObject,p^.Name);
AStore.Put(propName,pt,floatDt.CompData);
end;
end;
@ -3436,25 +3552,27 @@ begin
p := propList^[i];
persistType := IsStoredPropClass(objTypeData^.ClassType,p);
If ( persistType in [pstOptional,pstAlways] ) Then Begin
pt := p^.PropType;
pt := p^.PropType{$IFNDEF FPC}^{$ENDIF};
propName := tr.ItemByTypeInfo[pt].GetExternalPropertyName(p^.Name);
try
Case pt^.Kind Of
tkInt64,tkQWord :
tkInt64{$IFDEF FPC},tkQWord{$ENDIF} :
Begin
AStore.Get(pt,propName,int64Data);
SetOrdProp(AObject,p^.Name,int64Data);
End;
tkLString, tkAString :
tkLString{$IFDEF FPC},tkAString{$ENDIF} :
Begin
AStore.Get(pt,propName,strData);
SetStrProp(AObject,p^.Name,strData);
End;
{$IFDEF FPC}
tkBool :
Begin
AStore.Get(pt,propName,boolData);
SetOrdProp(AObject,p^.Name,Ord(boolData));
End;
{$ENDIF}
tkClass :
Begin
objData := GetObjectProp(AObject,p^.Name);
@ -3471,7 +3589,7 @@ begin
tkEnumeration,tkInteger :
Begin
FillChar(enumData,SizeOf(enumData),#0);
Case GetTypeData(p^.PropType)^.OrdType Of
Case GetTypeData(pt)^.OrdType Of
otSByte :
Begin
AStore.Get(pt,propName,enumData.ShortIntData);
@ -3508,7 +3626,7 @@ begin
tkFloat :
Begin
FillChar(floatDt,SizeOf(floatBuffer),#0);
Case GetTypeData(p^.PropType)^.FloatType Of
Case GetTypeData(pt)^.FloatType Of
ftSingle :
Begin
AStore.Get(pt,propName,floatBuffer.SingleData);

View File

@ -118,7 +118,7 @@ Type
function CreateList(const ANodeName : string):TDOMNodeList;override;
end;
TSOAPEncodingStyle = ( Encoded, Literal );
TSOAPEncodingStyle = ( Literal, Encoded );
TSOAPDocumentStyle = ( RPC, Document );
{$M+}

View File

@ -12,7 +12,7 @@
}
unit binary_formatter;
{$mode objfpc}{$H+}
{$INCLUDE wst.inc}
interface

View File

@ -12,12 +12,14 @@
}
unit binary_streamer;
{$mode objfpc}{$H+}
{$INCLUDE wst.inc}
interface
uses
Classes, SysUtils;
Classes, SysUtils, Types;
{$INCLUDE wst_delphi.inc}
Const
MAX_ARRAY_LENGTH = 1024*1024;
@ -90,19 +92,19 @@ Type
function CreateBinaryWriter(AStream : TStream):IDataStore;
procedure ReverseBytes(var AData; const ALength : Integer);{$IFDEF ENDIAN_BIG}inline;{$ENDIF}
function Reverse_16(AValue:Word):Word;inline;
function Reverse_32(AValue:DWord):DWord;inline;
function Reverse_64(AValue:QWord):QWord;inline;
function Reverse_16(AValue:Word):Word;{$IFDEF USE_INLINE}inline;{$ENDIF}
function Reverse_32(AValue:DWord):DWord;{$IFDEF USE_INLINE}inline;{$ENDIF}
function Reverse_64(AValue:QWord):QWord;{$IFDEF USE_INLINE}inline;{$ENDIF}
function Reverse_Single(AValue:Single):Single;inline;
function Reverse_Double(AValue:Double):Double;inline;
function Reverse_Extended(AValue:Extended):Extended;inline;
function Reverse_Currency(AValue:Currency):Currency;inline;
function Reverse_Single(AValue:Single):Single;{$IFDEF USE_INLINE}inline;{$ENDIF}
function Reverse_Double(AValue:Double):Double;{$IFDEF USE_INLINE}inline;{$ENDIF}
function Reverse_Extended(AValue:Extended):Extended;{$IFDEF USE_INLINE}inline;{$ENDIF}
function Reverse_Currency(AValue:Currency):Currency;{$IFDEF USE_INLINE}inline;{$ENDIF}
implementation
{$IFDEF ENDIAN_BIG}
procedure ReverseBytes(var AData; const ALength : Integer);inline;
procedure ReverseBytes(var AData; const ALength : Integer);{$IFDEF USE_INLINE}inline;{$ENDIF}
begin
end;
{$ELSE} // assume ENDIAN_LITTLE
@ -110,55 +112,55 @@ procedure ReverseBytes(var AData; const ALength : Integer);
Var
i,j : PtrInt;
c : Byte;
pDt : ^Byte;
pDt : {$IFDEF FPC}^Byte{$ELSE}PByteArray{$ENDIF};
begin
pDt := @AData;
j := ALength div 2;
For i := 0 To Pred(j) Do Begin
c := pDt[i];
c := pDt{$IFNDEF FPC}^{$ENDIF}[i];
pDt[i] := pDt[(ALength - 1 ) - i];
pDt[(ALength - 1 ) - i] := c;
End;
end;
{$ENDIF}
function Reverse_16(AValue:Word):Word;inline;
function Reverse_16(AValue:Word):Word;{$IFDEF USE_INLINE}inline;{$ENDIF}
begin
Result := AValue;
ReverseBytes(Result,2)
end;
function Reverse_32(AValue:DWord):DWord;inline;
function Reverse_32(AValue:DWord):DWord;{$IFDEF USE_INLINE}inline;{$ENDIF}
begin
Result := AValue;
ReverseBytes(Result,4)
end;
function Reverse_64(AValue:QWord):QWord;inline;
function Reverse_64(AValue:QWord):QWord;{$IFDEF USE_INLINE}inline;{$ENDIF}
begin
Result := AValue;
ReverseBytes(Result,8)
end;
function Reverse_Single(AValue:Single):Single;inline;
function Reverse_Single(AValue:Single):Single;{$IFDEF USE_INLINE}inline;{$ENDIF}
begin
Result := AValue;
ReverseBytes(Result,4)
end;
function Reverse_Double(AValue:Double):Double;inline;
function Reverse_Double(AValue:Double):Double;{$IFDEF USE_INLINE}inline;{$ENDIF}
begin
Result := AValue;
ReverseBytes(Result,8)
end;
function Reverse_Extended(AValue:Extended):Extended;inline;
function Reverse_Extended(AValue:Extended):Extended;{$IFDEF USE_INLINE}inline;{$ENDIF}
begin
Result := AValue;
ReverseBytes(Result,10);
end;
function Reverse_Currency(AValue:Currency):Currency;inline;
function Reverse_Currency(AValue:Currency):Currency;{$IFDEF USE_INLINE}inline;{$ENDIF}
begin
Result := AValue;
ReverseBytes(Result,8);
@ -248,6 +250,7 @@ begin
FStream.Write(AData,SizeOf(AData));
end;
{$IFDEF FPC}
procedure TDataStore.WriteInt16U(const AData: TInt16U);
begin
FStream.Write(Reverse_16(AData),SizeOf(AData));
@ -277,6 +280,55 @@ procedure TDataStore.WriteInt64S(const AData: TInt64S);
begin
FStream.Write(Reverse_64(AData),SizeOf(AData));
end;
{$ELSE}
procedure TDataStore.WriteInt16U(const AData: TInt16U);
var
bffr : TInt16U;
begin
bffr := Reverse_16(AData);
FStream.Write(bffr,SizeOf(AData));
end;
procedure TDataStore.WriteInt16S(const AData: TInt16S);
var
bffr : TInt16U;
begin
bffr := Reverse_16(AData);
FStream.Write(bffr,SizeOf(AData));
end;
procedure TDataStore.WriteInt32U(const AData: TInt32U);
var
bffr : TInt32U;
begin
bffr := Reverse_32(AData);
FStream.Write(bffr,SizeOf(AData));
end;
procedure TDataStore.WriteInt32S(const AData: TInt32S);
var
bffr : TInt32U;
begin
bffr := Reverse_32(AData);
FStream.Write(bffr,SizeOf(AData));
end;
procedure TDataStore.WriteInt64U(const AData: TInt64U);
var
bffr : TInt64U;
begin
bffr := Reverse_64(AData);
FStream.Write(bffr,SizeOf(AData));
end;
procedure TDataStore.WriteInt64S(const AData: TInt64S);
var
bffr : TInt64U;
begin
bffr := Reverse_64(AData);
FStream.Write(bffr,SizeOf(AData));
end;
{$ENDIF}
procedure TDataStore.WriteBool(const AData: TBoolData);
Var
@ -304,6 +356,7 @@ begin
FStream.Write(AData[1],i);
end;
{$IFDEF FPC}
procedure TDataStore.WriteSingle(const AData: TFloat_Single_4);
begin
FStream.Write(Reverse_Single(AData),SizeOf(AData));
@ -323,6 +376,39 @@ procedure TDataStore.WriteCurrency(const AData: TFloat_Currency_8);
begin
FStream.Write(Reverse_Currency(AData),SizeOf(AData));
end;
{$ELSE}
procedure TDataStore.WriteSingle(const AData: TFloat_Single_4);
var
bffr : TFloat_Single_4;
begin
bffr := Reverse_Single(AData);
FStream.Write(bffr,SizeOf(AData));
end;
procedure TDataStore.WriteDouble(const AData: TFloat_Double_8);
var
bffr : TFloat_Double_8;
begin
bffr := Reverse_Double(AData);
FStream.Write(bffr,SizeOf(AData));
end;
procedure TDataStore.WriteExtended(const AData: TFloat_Extended_10);
var
bffr : TFloat_Extended_10;
begin
bffr := Reverse_Extended(AData);
FStream.Write(bffr,SizeOf(AData));
end;
procedure TDataStore.WriteCurrency(const AData: TFloat_Currency_8);
var
bffr : TFloat_Currency_8;
begin
bffr := Reverse_Currency(AData);
FStream.Write(bffr,SizeOf(AData));
end;
{$ENDIF}
constructor TDataStore.Create(AStream: TStream);
begin

View File

@ -12,7 +12,7 @@
}
unit ics_tcp_protocol;
{$mode objfpc}{$H+}
{$INCLUDE wst.inc}
interface
@ -138,8 +138,8 @@ begin
FAllDataRead := False;
FPropMngr := TPublishedPropertyManager.Create(Self);
FConnection := TWSocket.Create(Nil);
FConnection.OnDataAvailable := @DataAvailable;
FConnection.OnBgException := @BgExceptionHandler;
FConnection.OnDataAvailable := {$IFDEF FPC}@{$ENDIF}DataAvailable;
FConnection.OnBgException := {$IFDEF FPC}@{$ENDIF}BgExceptionHandler;
end;
destructor TTCPTransport.Destroy();

View File

@ -12,7 +12,7 @@
}
unit imp_utils;
{$mode objfpc}{$H+}
{$INCLUDE wst.inc}
interface
@ -30,8 +30,8 @@ Type
TPublishedPropertyManager = class(TInterfacedObject,IPropertyManager)
Private
FParent : TObject;
procedure Error(Const AMsg:string);
procedure Error(Const AMsg:string; Const AArgs : array of const);
procedure Error(Const AMsg:string);overload;
procedure Error(Const AMsg:string; Const AArgs : array of const);overload;
Protected
procedure SetProperty(Const AName,AValue:string);
procedure SetProperties(Const APropsStr:string);
@ -87,11 +87,11 @@ begin
pinf := GetPropInfo(FParent,AName);
If Assigned(pinf) And Assigned(pinf^.SetProc) Then Begin
Case pinf^.PropType^.Kind of
tkSString,tkLString,tkAString,tkWString:
tkLString{$IFDEF FPC},tkSString,tkAString{$ENDIF},tkWString:
SetStrProp(FParent,pinf,AValue);
tkEnumeration :
SetEnumProp(FParent,pinf,AValue);
tkInteger,tkInt64,tkQWord:
tkInteger,tkInt64{$IFDEF FPC},tkQWord{$ENDIF} :
Begin
If TryStrToInt64(AValue,int64Val) Then
SetOrdProp(FParent,AName,int64Val);
@ -127,11 +127,11 @@ begin
pinf := GetPropInfo(FParent,AName);
If Assigned(pinf) And Assigned(pinf^.SetProc) Then Begin
Case pinf^.PropType^.Kind of
tkSString,tkLString,tkAString,tkWString:
tkLString{$IFDEF FPC},tkSString,tkAString{$ENDIF},tkWString:
Result := GetStrProp(FParent,pinf);
tkEnumeration :
Result := GetEnumProp(FParent,pinf);
tkInteger,tkInt64,tkQWord:
tkInteger,tkInt64{$IFDEF FPC},tkQWord{$ENDIF} :
Result := IntToStr(GetOrdProp(FParent,pinf));
End;
End;
@ -147,9 +147,9 @@ begin
Try
For i := 0 To Pred(propListLen) Do Begin
If ( propList^[i]^.PropType^.Kind in
[ tkSString,tkLString,tkAString,tkWString,
[ tkLString{$IFDEF FPC},tkSString,tkAString{$ENDIF},tkWString,
tkEnumeration,
tkInteger,tkInt64,tkQWord
tkInteger,tkInt64{$IFDEF FPC},tkQWord{$ENDIF}
]
)
Then

View File

@ -13,7 +13,7 @@
unit metadata_repository;
{$mode objfpc}{$H+}
{$INCLUDE wst.inc}
interface
@ -119,6 +119,8 @@ type
implementation
uses wst_resources_imp, binary_streamer, imp_utils;
{$INCLUDE wst_rtl_imp.inc}
const sADDRESS = 'Address';
function GetServiceDefaultAddress(AServiceTyp : PTypeInfo):string;
var
@ -178,7 +180,7 @@ var
begin
if not Assigned(AProps) then
Exit;
c := SizeOf(PPropertyData^);
c := SizeOf(TPropertyData);
p := AProps;
while Assigned(p) do begin
q := p;
@ -198,12 +200,12 @@ begin
Result := nil;
if not Assigned(AProps) then
Exit;
c := SizeOf(PPropertyData^);
q0 := GetMem(c);
c := SizeOf(TPropertyData);
q0 := wst_GetMem(c);
q := q0;
p := AProps;
while Assigned(p) do begin
q^.Next := GetMem(c);
q^.Next := wst_GetMem(c);
FillChar(q^.Next^,c,#0);
q := q^.Next;
q^.Name := p^.Name;
@ -234,15 +236,15 @@ function Add(
) : PPropertyData;
begin
if not Assigned(AProps) then begin
AProps := GetMem(SizeOf(PPropertyData^));
FillChar(AProps^,SizeOf(PPropertyData^),#0);
AProps := wst_GetMem(SizeOf(TPropertyData));
FillChar(AProps^,SizeOf(TPropertyData),#0);
AProps^.Next := nil;
Result := AProps;
end else begin
Result := Find(AProps,APropName);
if not Assigned(Result) then begin
Result := GetMem(SizeOf(PPropertyData^));
FillChar(Result^,SizeOf(PPropertyData^),#0);
Result := wst_GetMem(SizeOf(TPropertyData));
FillChar(Result^,SizeOf(TPropertyData),#0);
Result^.Next := AProps;
AProps := Result;
end;
@ -259,7 +261,7 @@ procedure ClearService(AService : PService; const AFreeService : Boolean);
begin
cc := AOperation^.ParamsCount;
if ( cc > 0 ) then begin
Freemem(AOperation^.Params, cc * SizeOf(POperationParam^) );
Freemem(AOperation^.Params, cc * SizeOf(TOperationParam) );
end;
ClearProperties(AOperation^.Properties);
end;
@ -274,15 +276,17 @@ begin
if ( k > 0 ) then begin
po := AService^.Operations;
for j := 0 to Pred(k) do begin
ClearOperation(@(po[j]));
//ClearOperation(@(po[j]));
ClearOperation(po);
Inc(po);
end;
Freemem(AService^.Operations, k * SizeOf(PServiceOperation^) );
Freemem(AService^.Operations, k * SizeOf(TServiceOperation) );
AService^.Operations := nil;
ClearProperties(AService^.Properties);
AService^.Properties := nil;
end;
if AFreeService then
Freemem(AService,SizeOf(PService^));
Freemem(AService,SizeOf(TService));
end;
procedure ClearRepositoryData(var ARepository : PServiceRepository);
@ -295,11 +299,13 @@ begin
if ( c > 0 ) then begin
ps := ARepository^.Services;
for i := 0 to Pred(c) do begin
ClearService(@(ps[i]),false);
//ClearService(@(ps[i]),false);
ClearService(ps,false);
Inc(ps);
end;
Freemem(ARepository^.Services, c * SizeOf(PService^) );
Freemem(ARepository^.Services, c * SizeOf(TService) );
end;
Freemem(ARepository,SizeOf(PServiceRepository^));
Freemem(ARepository,SizeOf(TServiceRepository));
ARepository := nil;
end;
end;
@ -330,12 +336,14 @@ var
AOperation^.Properties := nil;
cc := rdr.ReadInt8U();
if ( cc > 0 ) then begin
AOperation^.Params := GetMem( cc * SizeOf(POperationParam^) );
FillChar(AOperation^.Params^, cc * SizeOf(POperationParam^), #0);
AOperation^.Params := wst_GetMem( cc * SizeOf(TOperationParam) );
FillChar(AOperation^.Params^, cc * SizeOf(TOperationParam), #0);
AOperation^.ParamsCount := cc;
pp := AOperation^.Params;
for ii := 0 to Pred(cc) do begin
LoadParam(@(pp[ii]));
//LoadParam(@(pp[ii]));
LoadParam(pp);
Inc(pp);
end;
end;
end;
@ -348,12 +356,14 @@ var
AService^.Properties := nil;
k := rdr.ReadInt8U();
if ( k > 0 ) then begin
AService^.Operations := GetMem( k * SizeOf(PServiceOperation^) );
AService^.Operations := wst_GetMem( k * SizeOf(TServiceOperation) );
AService^.OperationsCount := k;
FillChar(AService^.Operations^,k * SizeOf(PServiceOperation^), #0);
FillChar(AService^.Operations^,k * SizeOf(TServiceOperation), #0);
po := AService^.Operations;
for j := 0 to Pred(k) do begin
LoadOperation(@(po[j]));
//LoadOperation(@(po[j]));
LoadOperation(po);
Inc(po);
end;
end;
end;
@ -369,19 +379,21 @@ begin
buf := rdr.ReadStr();
if ( sWST_SIGNATURE <> buf ) then
raise EMetadataException.CreateFmt('Invalid Metadata signature : "%s"',[buf]);
c := SizeOf(PServiceRepository^);
ARepository := GetMem(c);
c := SizeOf(TServiceRepository);
ARepository := wst_GetMem(c);
try
FillChar(ARepository^,c,#0);
ARepository^.Name := rdr.ReadStr();
c := rdr.ReadInt8U();
if ( c > 0 ) then begin
ARepository^.Services := GetMem( c * SizeOf(PService^) );
ARepository^.Services := wst_GetMem( c * SizeOf(TService) );
ARepository^.ServicesCount := c;
FillChar(ARepository^.Services^,c * SizeOf(PService^),#0);
FillChar(ARepository^.Services^,c * SizeOf(TService),#0);
ps := ARepository^.Services;
for i := 0 to Pred(c) do begin
LoadService(@(ps[i]));
//LoadService(@(ps[i]));
LoadService(ps);
Inc(ps);
end;
end;
Result := c;
@ -403,36 +415,44 @@ procedure CopyService(ASrcService,ADestService : PService);
var
ii, cc : LongInt;
pp : POperationParam;
ppSrc, pp : POperationParam;
begin
ADstOperation^.Name := ASrcOperation^.Name;
ADstOperation^.Properties := CloneProperties(ASrcOperation^.Properties);
cc := ASrcOperation^.ParamsCount;
if ( cc > 0 ) then begin
ADstOperation^.Params := GetMem( cc * SizeOf(POperationParam^) );
FillChar(ADstOperation^.Params^, cc * SizeOf(POperationParam^), #0);
ADstOperation^.Params := wst_GetMem( cc * SizeOf(TOperationParam) );
FillChar(ADstOperation^.Params^, cc * SizeOf(TOperationParam), #0);
ADstOperation^.ParamsCount := cc;
ppSrc := ASrcOperation^.Params;
pp := ADstOperation^.Params;
for ii := 0 to Pred(cc) do begin
CopyParam(@(ASrcOperation^.Params[ii]),@(pp[ii]));
//CopyParam(@(ASrcOperation^.Params[ii]),@(pp[ii]));
CopyParam(ppSrc,pp);
Inc(ppSrc);
Inc(pp);
end;
end;
end;
var
j, k : LongInt;
po : PServiceOperation;
poSrc, po : PServiceOperation;
begin
ADestService^.Name := ASrcService^.Name;
ADestService^.Properties := CloneProperties(ASrcService^.Properties);
k := ASrcService^.OperationsCount;
if ( k > 0 ) then begin
ADestService^.Operations := GetMem( k * SizeOf(PServiceOperation^) );
ADestService^.Operations := wst_GetMem( k * SizeOf(TServiceOperation) );
ADestService^.OperationsCount := k;
FillChar(ADestService^.Operations^,k * SizeOf(PServiceOperation^), #0);
FillChar(ADestService^.Operations^,k * SizeOf(TServiceOperation), #0);
po := ADestService^.Operations;
poSrc := ASrcService^.Operations;
for j := 0 to Pred(k) do begin
CopyOperation(@(ASrcService^.Operations[j]),@(po[j]));
//CopyOperation(@(ASrcService^.Operations[j]),@(po[j]));
CopyOperation(poSrc,po);
Inc(poSrc);
Inc(po);
end;
end;
end;
@ -441,8 +461,8 @@ function CloneService(const ASrcService : PService) : PService;
var
c : Integer;
begin
c := SizeOf(PService^);
Result := GetMem(c);
c := SizeOf(TService);
Result := wst_GetMem(c);
FillChar(Result^,c,#0);
CopyService(ASrcService,Result);
end;
@ -453,13 +473,13 @@ procedure CloneRepository(
);
var
i, c : LongInt;
ps : PService;
psSrc, ps : PService;
begin
ADest := nil;
if not Assigned(ASource) then
Exit;
c := SizeOf(PServiceRepository^);
ADest := GetMem(c);
c := SizeOf(TServiceRepository);
ADest := wst_GetMem(c);
try
FillChar(ADest^,c,#0);
ADest^.Name := ASource^.Name;
@ -467,12 +487,14 @@ begin
ADest^.RootAddress := ASource^.RootAddress;
c := ASource^.ServicesCount;
if ( c > 0 ) then begin
ADest^.Services := GetMem( c * SizeOf(PService^) );
ADest^.Services := wst_GetMem( c * SizeOf(TService) );
ADest^.ServicesCount := c;
FillChar(ADest^.Services^,c * SizeOf(PService^),#0);
FillChar(ADest^.Services^,c * SizeOf(TService),#0);
ps := ADest^.Services;
psSrc := ASource^.Services;
for i := 0 to Pred(c) do begin
CopyService(@(ASource^.Services[i]),@(ps[i]));
//CopyService(@(ASource^.Services[i]),@(ps[i]));
CopyService(psSrc,ps);
end;
end;
except
@ -679,12 +701,16 @@ function FindService(
) : PService;
var
i : Integer;
srv : PService;
begin
srv := ARep^.Services;
for i := 0 to Pred(ARep^.ServicesCount) do begin
if AnsiSameText(AServiceName,ARep^.Services[i].Name) then begin
Result := @(ARep^.Services[i]);
//if AnsiSameText(AServiceName,ARep^.Services[i].Name) then begin
if AnsiSameText(AServiceName,srv^.Name) then begin
Result := srv;
Exit;
end;
Inc(srv);
end;
Result := nil;
end;
@ -716,12 +742,15 @@ function FindOperation(
) : PServiceOperation;
var
i : Integer;
sop : PServiceOperation;
begin
sop := AServ^.Operations;
for i := 0 to Pred(AServ^.OperationsCount) do begin
if AnsiSameText(AOperationName,AServ^.Operations[i].Name) then begin
Result := @(AServ^.Operations[i]);
if AnsiSameText(AOperationName,sop^.Name) then begin
Result := sop;
Exit;
end;
Inc(sop);
end;
Result := nil;
end;
@ -762,11 +791,9 @@ begin
if ( i < 0 ) then
i := InternalLoadRepository(ARepName);
rp := FRepositories[i];
for i := 0 to Pred(rp^.ServicesCount) do begin
if AnsiSameText(AServiceName,rp^.Services[i].Name) then begin
Result := CloneService(@(rp^.Services[i]));
Exit;
end;
Result := FindService(rp,AServiceName);
if ( Result <> nil ) then begin
Result := CloneService(Result);
end;
end;

View File

@ -13,7 +13,7 @@
unit metadata_service;
{$mode objfpc}{$H+}
{$INCLUDE wst.inc}
interface

View File

@ -5,7 +5,7 @@ This unit has been produced by ws_helper.
Date : "12/11/2006 11:12".
}
unit metadata_service_binder;
{$mode objfpc}{$H+}
{$INCLUDE wst.inc}
interface
uses SysUtils, Classes, base_service_intf, server_service_intf, metadata_service;

View File

@ -5,7 +5,7 @@ This unit has been produced by ws_helper.
Date : "01/07/2006 22:14".
}
Unit metadata_service_imp;
{$mode objfpc}{$H+}
{$INCLUDE wst.inc}
Interface
Uses SysUtils, Classes,

View File

@ -13,7 +13,7 @@
unit metadata_wsdl;
{$mode objfpc}{$H+}
{$INCLUDE wst.inc}
interface
@ -138,6 +138,9 @@ const
sWSDL_TYPE = sTYPE;
sWSDL_TYPES = 'types';
sFORMAT_Input_EncodingStyle = 'FORMAT_Input_EncodingStyle';
sFORMAT_Input_EncodingStyleURI = 'FORMAT_Input_EncodingStyleURI';
var
WsdlTypeHandlerRegistryInst : IWsdlTypeHandlerRegistry;
@ -290,7 +293,7 @@ begin
if FindAttributeByValueInNode(ANameSpace,AWsdlDocument.DocumentElement,Result,0,sXMLNS) then begin
Result := Copy(Result,Length(sXMLNS+':')+1,MaxInt);
end else begin
Result := Format('ns%d',[AWsdlDocument.DocumentElement.Attributes.Count]) ;
Result := Format('ns%d',[AWsdlDocument.DocumentElement.Attributes.{$IFNDEF FPC_211}Count{$ELSE}Length{$ENDIF}]) ;
AWsdlDocument.DocumentElement.SetAttribute(Format('%s:%s',[sXMLNS,Result]),ANameSpace);
end;
end;
@ -395,24 +398,39 @@ procedure GenerateWSDL(AMdtdRep : PServiceRepository; ADoc : TDOMDocument);
var
opNode, inNode, outNode, bdyNode : TDOMElement;
strBuff : string;
propData : PPropertyData;
encdStyl,encdStylURI : string;
begin
strBuff := Format('%s:%s',[sSOAP,sWSDL_OPERATION]);
CreateElement(strBuff,ABndngNode,ADoc).SetAttribute(sSOAP_ACTION,Format('%s/%s%s',[AMdtdRep^.NameSpace,AService^.Name,AOperation^.Name]));
//CreateElement(strBuff,ABndngNode,ADoc).SetAttribute(sSOAP_ACTION,Format('%s/%s%s',[AMdtdRep^.NameSpace,AService^.Name,AOperation^.Name]));
opNode := CreateElement(sWSDL_OPERATION,ABndngNode,ADoc);
opNode.SetAttribute(sWSDL_NAME,AOperation^.Name);
CreateElement(strBuff,opNode,ADoc).SetAttribute(sSOAP_ACTION,Format('%s/%s%s',[AMdtdRep^.NameSpace,AService^.Name,AOperation^.Name]));
inNode := CreateElement(sWSDL_INPUT,opNode,ADoc);
strBuff := Format('%s:%s',[sSOAP,sBODY]);
bdyNode := CreateElement(strBuff,inNode,ADoc);
bdyNode.SetAttribute(sSOAP_USE,sSOAP_ENCODED);
encdStyl := 'literal';
encdStylURI := '';
propData := Find(AOperation^.Properties,sFORMAT_Input_EncodingStyle);
if Assigned(propData) and ( Length(Trim(propData^.Data)) > 0 ) then begin
encdStyl := Trim(propData^.Data);
end;
bdyNode.SetAttribute(sSOAP_USE,encdStyl);
bdyNode.SetAttribute(sNAME_SPACE,Format('%s',[AMdtdRep^.NameSpace]));
bdyNode.SetAttribute(sSOAP_ENCODING_STYLE,sSOAP_ENC_NS);
propData := Find(AOperation^.Properties,sFORMAT_Input_EncodingStyleURI);
if Assigned(propData) and ( Length(Trim(propData^.Data)) > 0 ) then begin
encdStylURI := Trim(propData^.Data);
end;
if ( Length(encdStylURI) > 0 ) then
bdyNode.SetAttribute(sSOAP_ENCODING_STYLE,encdStylURI);
outNode := CreateElement(sWSDL_OUTPUT,opNode,ADoc);
strBuff := Format('%s:%s',[sSOAP,sBODY]);
bdyNode := CreateElement(strBuff,outNode,ADoc);
bdyNode.SetAttribute(sSOAP_USE,sSOAP_ENCODED);
bdyNode.SetAttribute(sSOAP_USE,encdStyl);
bdyNode.SetAttribute(sNAME_SPACE,Format('%s',[AMdtdRep^.NameSpace]));
bdyNode.SetAttribute(sSOAP_ENCODING_STYLE,sSOAP_ENC_NS);
if ( Length(encdStylURI) > 0 ) then
bdyNode.SetAttribute(sSOAP_ENCODING_STYLE,encdStylURI);
end;
var
@ -651,7 +669,7 @@ begin
if FindAttributeByValueInNode(typItm.NameSpace,AWsdlDocument.DocumentElement,ns_shortName) then begin
ns_shortName := Copy(ns_shortName,Length(sXMLNS+':')+1,MaxInt);
end else begin
ns_shortName := Format('ns%d',[AWsdlDocument.DocumentElement.Attributes.Count]) ;
ns_shortName := Format('ns%d',[AWsdlDocument.DocumentElement.Attributes.{$IFNDEF FPC_211}Count{$ELSE}Length{$ENDIF}]) ;
AWsdlDocument.DocumentElement.SetAttribute(Format('%s:%s',[sXMLNS,ns_shortName]),typItm.NameSpace);
end;
defTypesNode := AWsdlDocument.DocumentElement.FindNode(sWSDL_TYPES) as TDOMElement;
@ -749,7 +767,7 @@ procedure TBaseArrayRemotable_TypeHandler.Generate(
if FindAttributeByValueInNode(ANameSpace,AWsdlDocument.DocumentElement,Result,0,sXMLNS) then begin
Result := Copy(Result,Length(sXMLNS+':')+1,MaxInt);
end else begin
Result := Format('ns%d',[AWsdlDocument.DocumentElement.Attributes.Count]) ;
Result := Format('ns%d',[AWsdlDocument.DocumentElement.Attributes.{$IFNDEF FPC_211}Count{$ELSE}Length{$ENDIF}]) ;
AWsdlDocument.DocumentElement.SetAttribute(Format('%s:%s',[sXMLNS,Result]),ANameSpace);
end;
end;

View File

@ -0,0 +1 @@
..\..\wst\ws_helper\ws_helper -b -o. "user_service_intf.wsdl" >extract_bind.res.txt

View File

@ -0,0 +1 @@
..\..\wst\ws_helper\ws_helper -i -o. "user_service_intf.wsdl" >extract_imp.res.txt

View File

@ -0,0 +1 @@
..\..\wst\ws_helper\ws_helper -uA -p -o. "user_service_intf.wsdl" >extract_intf.res.txt

View File

@ -0,0 +1 @@
..\..\wst\ws_helper\ws_helper -p -o. "user_service_intf.wsdl" >extract_proxy.res.txt

View File

@ -0,0 +1,77 @@
unit imp_helper;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils,
base_service_intf,
base_binary_formatter;
procedure SaveObjectToStream(AObject : TPersistent; AStream : TStream);
procedure LoadObjectFromStream(AObject : TPersistent; AStream : TStream);
procedure SaveObjectToFile(AObject : TPersistent; const AFileName : string);
procedure LoadObjectFromFile(AObject : TPersistent; const AFileName : string);
implementation
uses TypInfo;
procedure SaveObjectToFile(AObject : TPersistent; const AFileName : string);
var
strm : TFileStream;
begin
if FileExists(AFileName) then
DeleteFile(AFileName);
strm := TFileStream.Create(AFileName,fmCreate);
try
SaveObjectToStream(AObject,strm);
finally
strm.Free();
end;
end;
procedure LoadObjectFromFile(AObject : TPersistent; const AFileName : string);
var
strm : TFileStream;
begin
if not FileExists(AFileName) then
raise Exception.CreateFmt('File not found : "%s"',[AFileName]);
strm := TFileStream.Create(AFileName,fmOpenRead);
try
LoadObjectFromStream(AObject,strm);
finally
strm.Free();
end;
end;
procedure SaveObjectToStream(AObject : TPersistent; AStream : TStream);
var
srlzr : IFormatterBase;
begin
srlzr := TBaseBinaryFormatter.Create();
srlzr.BeginObject('root',TypeInfo(TPersistent));
srlzr.Put('object',PTypeInfo(AObject.ClassInfo),AObject);
srlzr.EndScope();
srlzr.SaveToStream(AStream);
end;
procedure LoadObjectFromStream(AObject : TPersistent; AStream : TStream);
var
srlzr : IFormatterBase;
nme : string;
begin
srlzr := TBaseBinaryFormatter.Create();
srlzr.LoadFromStream(AStream);
nme := 'root';
srlzr.BeginObjectRead(nme,TypeInfo(TPersistent));
nme := 'object';
srlzr.Get(PTypeInfo(AObject.ClassInfo),nme,AObject);
srlzr.EndScopeRead();
end;
end.

View File

@ -0,0 +1,354 @@
<?xml version="1.0"?>
<CONFIG>
<ProjectOptions>
<PathDelim Value="\"/>
<Version Value="5"/>
<General>
<Flags>
<MainUnitHasUsesSectionForAllUnits Value="False"/>
<MainUnitHasCreateFormStatements Value="False"/>
<MainUnitHasTitleStatement Value="False"/>
</Flags>
<MainUnit Value="0"/>
<IconPath Value="./"/>
<TargetFileExt Value=".exe"/>
<ActiveEditorIndexAtStart Value="0"/>
</General>
<VersionInfo>
<ProjectVersion Value=""/>
</VersionInfo>
<PublishOptions>
<Version Value="2"/>
<IgnoreBinaries Value="False"/>
<IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
<ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/>
</PublishOptions>
<RunParams>
<local>
<FormatVersion Value="1"/>
<LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
</local>
</RunParams>
<Units Count="36">
<Unit0>
<Filename Value="tcp_server.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="tcp_server"/>
<CursorPos X="28" Y="25"/>
<TopLine Value="17"/>
<EditorIndex Value="0"/>
<UsageCount Value="64"/>
<Loaded Value="True"/>
</Unit0>
<Unit1>
<Filename Value="synapse_tcp_server.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="synapse_tcp_server"/>
<CursorPos X="42" Y="211"/>
<TopLine Value="197"/>
<UsageCount Value="64"/>
</Unit1>
<Unit2>
<Filename Value="..\..\..\..\..\lazarus23_213\fpc\2.1.3\source\rtl\objpas\classes\classesh.inc"/>
<CursorPos X="26" Y="686"/>
<TopLine Value="672"/>
<UsageCount Value="9"/>
</Unit2>
<Unit3>
<Filename Value="..\..\..\..\..\lazarus23_213\fpc\2.1.3\source\rtl\win\sysosh.inc"/>
<CursorPos X="3" Y="25"/>
<TopLine Value="4"/>
<UsageCount Value="6"/>
</Unit3>
<Unit4>
<Filename Value="..\..\..\..\..\lazarus23_213\others_package\synapse\blcksock.pas"/>
<UnitName Value="blcksock"/>
<CursorPos X="1" Y="2407"/>
<TopLine Value="2395"/>
<UsageCount Value="9"/>
</Unit4>
<Unit5>
<Filename Value="..\..\binary_streamer.pas"/>
<UnitName Value="binary_streamer"/>
<CursorPos X="37" Y="13"/>
<TopLine Value="178"/>
<UsageCount Value="8"/>
</Unit5>
<Unit6>
<Filename Value="..\..\server_service_soap.pas"/>
<UnitName Value="server_service_soap"/>
<CursorPos X="35" Y="29"/>
<TopLine Value="8"/>
<UsageCount Value="22"/>
</Unit6>
<Unit7>
<Filename Value="..\..\server_binary_formatter.pas"/>
<UnitName Value="server_binary_formatter"/>
<CursorPos X="24" Y="22"/>
<TopLine Value="1"/>
<UsageCount Value="10"/>
</Unit7>
<Unit8>
<Filename Value="..\..\metadata_service.pas"/>
<UnitName Value="metadata_service"/>
<CursorPos X="96" Y="118"/>
<TopLine Value="103"/>
<UsageCount Value="8"/>
</Unit8>
<Unit9>
<Filename Value="..\..\metadata_service_imp.pas"/>
<UnitName Value="metadata_service_imp"/>
<CursorPos X="1" Y="39"/>
<TopLine Value="28"/>
<UsageCount Value="8"/>
</Unit9>
<Unit10>
<Filename Value="..\..\metadata_service_binder.pas"/>
<UnitName Value="metadata_service_binder"/>
<CursorPos X="69" Y="11"/>
<TopLine Value="9"/>
<UsageCount Value="8"/>
</Unit10>
<Unit11>
<Filename Value="..\user_service_intf.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="user_service_intf"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="174"/>
<EditorIndex Value="3"/>
<UsageCount Value="64"/>
<Loaded Value="True"/>
</Unit11>
<Unit12>
<Filename Value="..\..\base_service_intf.pas"/>
<UnitName Value="base_service_intf"/>
<CursorPos X="38" Y="569"/>
<TopLine Value="551"/>
<UsageCount Value="24"/>
<Bookmarks Count="1">
<Item0 X="19" Y="545" ID="0"/>
</Bookmarks>
</Unit12>
<Unit13>
<Filename Value="..\..\wst_rtti_filter\std_cursors.pas"/>
<UnitName Value="std_cursors"/>
<CursorPos X="1" Y="48"/>
<TopLine Value="36"/>
<EditorIndex Value="5"/>
<UsageCount Value="31"/>
<Loaded Value="True"/>
</Unit13>
<Unit14>
<Filename Value="..\..\wst_rtti_filter\cursor_intf.pas"/>
<UnitName Value="cursor_intf"/>
<CursorPos X="3" Y="27"/>
<TopLine Value="15"/>
<UsageCount Value="24"/>
</Unit14>
<Unit15>
<Filename Value="..\user_service_intf_binder.pas"/>
<UnitName Value="user_service_intf_binder"/>
<CursorPos X="70" Y="11"/>
<TopLine Value="1"/>
<EditorIndex Value="2"/>
<UsageCount Value="32"/>
<Loaded Value="True"/>
</Unit15>
<Unit16>
<Filename Value="..\user_service_intf.wst"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<UsageCount Value="8"/>
<SyntaxHighlighter Value="None"/>
</Unit16>
<Unit17>
<Filename Value="..\..\metadata_repository.pas"/>
<UnitName Value="metadata_repository"/>
<CursorPos X="37" Y="571"/>
<TopLine Value="562"/>
<UsageCount Value="8"/>
</Unit17>
<Unit18>
<Filename Value="..\..\wst_resources_imp.pas"/>
<UnitName Value="wst_resources_imp"/>
<CursorPos X="15" Y="63"/>
<TopLine Value="45"/>
<UsageCount Value="8"/>
</Unit18>
<Unit19>
<Filename Value="..\..\..\..\..\lazarus23_213\fpc\2.1.3\source\rtl\inc\except.inc"/>
<CursorPos X="3" Y="95"/>
<TopLine Value="73"/>
<UsageCount Value="6"/>
</Unit19>
<Unit20>
<Filename Value="..\..\..\..\..\lazarus23_213\fpc\2.1.3\source\rtl\i386\setjump.inc"/>
<CursorPos X="1" Y="36"/>
<TopLine Value="16"/>
<UsageCount Value="6"/>
</Unit20>
<Unit21>
<Filename Value="..\..\..\..\..\lazarus23_213\fpc\2.1.3\source\rtl\inc\objpas.inc"/>
<CursorPos X="1" Y="76"/>
<TopLine Value="64"/>
<UsageCount Value="6"/>
</Unit21>
<Unit22>
<Filename Value="..\..\..\..\..\lazarus23_213\fpc\2.1.3\source\rtl\objpas\classes\collect.inc"/>
<CursorPos X="1" Y="264"/>
<TopLine Value="252"/>
<UsageCount Value="6"/>
</Unit22>
<Unit23>
<Filename Value="..\..\..\..\..\lazarus23_213\fpc\2.1.3\source\rtl\objpas\classes\lists.inc"/>
<CursorPos X="1" Y="381"/>
<TopLine Value="369"/>
<UsageCount Value="6"/>
</Unit23>
<Unit24>
<Filename Value="..\..\..\..\..\lazarus23_213\fpc\2.1.3\source\rtl\inc\system.inc"/>
<CursorPos X="1" Y="674"/>
<TopLine Value="662"/>
<UsageCount Value="6"/>
</Unit24>
<Unit25>
<Filename Value="..\..\server_service_intf.pas"/>
<UnitName Value="server_service_intf"/>
<CursorPos X="16" Y="346"/>
<TopLine Value="323"/>
<UsageCount Value="8"/>
</Unit25>
<Unit26>
<Filename Value="..\..\..\..\..\lazarus23_213\fpc\2.1.3\source\rtl\i386\i386.inc"/>
<CursorPos X="1" Y="1125"/>
<TopLine Value="1113"/>
<UsageCount Value="6"/>
</Unit26>
<Unit27>
<Filename Value="..\user_service_intf_imp.pas"/>
<UnitName Value="user_service_intf_imp"/>
<CursorPos X="72" Y="128"/>
<TopLine Value="108"/>
<EditorIndex Value="4"/>
<UsageCount Value="32"/>
<Loaded Value="True"/>
</Unit27>
<Unit28>
<Filename Value="..\..\service_intf.pas"/>
<UnitName Value="service_intf"/>
<CursorPos X="15" Y="23"/>
<TopLine Value="19"/>
<UsageCount Value="7"/>
</Unit28>
<Unit29>
<Filename Value="..\..\base_soap_formatter.pas"/>
<UnitName Value="base_soap_formatter"/>
<CursorPos X="65" Y="313"/>
<TopLine Value="304"/>
<UsageCount Value="9"/>
</Unit29>
<Unit30>
<Filename Value="..\..\..\..\..\lazarus23_213\fpc\2.1.3\source\rtl\objpas\typinfo.pp"/>
<UnitName Value="typinfo"/>
<CursorPos X="11" Y="247"/>
<TopLine Value="226"/>
<UsageCount Value="8"/>
</Unit30>
<Unit31>
<Filename Value="..\..\base_binary_formatter.pas"/>
<UnitName Value="base_binary_formatter"/>
<CursorPos X="3" Y="1063"/>
<TopLine Value="1055"/>
<UsageCount Value="10"/>
</Unit31>
<Unit32>
<Filename Value="imp_helper.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="imp_helper"/>
<CursorPos X="1" Y="44"/>
<TopLine Value="32"/>
<EditorIndex Value="1"/>
<UsageCount Value="33"/>
<Loaded Value="True"/>
</Unit32>
<Unit33>
<Filename Value="..\..\..\..\..\lazarus23_213\fpc\2.1.3\source\rtl\objpas\classes\persist.inc"/>
<CursorPos X="3" Y="36"/>
<TopLine Value="32"/>
<UsageCount Value="9"/>
</Unit33>
<Unit34>
<Filename Value="..\..\..\..\..\lazarus23_213\fpc\2.1.3\source\rtl\objpas\classes\streams.inc"/>
<CursorPos X="43" Y="511"/>
<TopLine Value="506"/>
<UsageCount Value="9"/>
</Unit34>
<Unit35>
<Filename Value="..\..\..\..\..\lazarus23_213\fpc\2.1.3\source\rtl\win\sysutils.pp"/>
<UnitName Value="sysutils"/>
<CursorPos X="1" Y="326"/>
<TopLine Value="314"/>
<UsageCount Value="9"/>
</Unit35>
</Units>
<JumpHistory Count="0" HistoryIndex="-1"/>
</ProjectOptions>
<CompilerOptions>
<Version Value="5"/>
<PathDelim Value="\"/>
<Target>
<Filename Value="tcp_server.exe"/>
</Target>
<SearchPaths>
<IncludeFiles Value="C:\Programmes\lazarus\wst\"/>
<OtherUnitFiles Value="C:\Programmes\lazarus\wst\;C:\Programmes\lazarus\wst\wst_rtti_filter\;$(LazarusDir)\others_package\synapse\;C:\Programmes\lazarus\wst\samples\"/>
<UnitOutputDirectory Value="obj"/>
</SearchPaths>
<CodeGeneration>
<Generate Value="Faster"/>
</CodeGeneration>
<Other>
<CompilerPath Value="$(CompPath)"/>
</Other>
</CompilerOptions>
<Debugging>
<BreakPoints Count="5">
<Item1>
<Source Value="D:\lazarusClean\fpcsrc\rtl\inc\getopts.pp"/>
<Line Value="230"/>
</Item1>
<Item2>
<Source Value="D:\lazarusClean\fpcsrc\rtl\inc\getopts.pp"/>
<Line Value="193"/>
</Item2>
<Item3>
<Source Value="D:\lazarusClean\fpcsrc\rtl\inc\getopts.pp"/>
<Line Value="198"/>
</Item3>
<Item4>
<Source Value="..\..\ws_helper\wsdl2pas_imp.pas"/>
<Line Value="606"/>
</Item4>
<Item5>
<Source Value="..\user_service_intf_imp.pas"/>
<Line Value="176"/>
</Item5>
</BreakPoints>
<Watches Count="2">
<Item1>
<Expression Value="locStrFilter"/>
</Item1>
<Item2>
<Expression Value="i"/>
</Item2>
</Watches>
<Exceptions Count="2">
<Item1>
<Name Value="ECodetoolError"/>
</Item1>
<Item2>
<Name Value="EFOpenError"/>
</Item2>
</Exceptions>
</Debugging>
</CONFIG>

View File

@ -0,0 +1,45 @@
{
This file is part of the Web Service Toolkit
Copyright (c) 2006 by Inoussa OUEDRAOGO
This file is provide under modified LGPL licence
( the files COPYING.modifiedLGPL and COPYING.LGPL).
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
}
program tcp_server;
{$INCLUDE wst.inc}
uses
Classes, SysUtils,
base_service_intf, server_service_soap,
base_binary_formatter, server_binary_formatter,
metadata_service, metadata_service_imp, metadata_service_binder,
synapse_tcp_server,
user_service_intf, user_service_intf_binder, user_service_intf_imp , imp_helper;
var
listnerThread : TServerListnerThread;
begin
SetLogger(TConsoleLogger.Create());
Server_service_RegisterBinaryFormat();
Server_service_RegisterSoapFormat();
Server_service_RegisterWSTMetadataServiceService();
RegisterWSTMetadataServiceImplementationFactory();
Server_service_RegisterUserServiceService();
RegisterUserServiceImplementationFactory();
Logger().Log('WST sample TCP Server listning on "%s"',[sSERVER_PORT]);
Logger().Log('Hit <enter> to stop.');
listnerThread := TServerListnerThread.Create();
ReadLn;
end.

View File

@ -0,0 +1,124 @@
object fMain: TfMain
Left = 379
Height = 382
Top = 283
Width = 651
HorzScrollBar.Page = 650
VertScrollBar.Page = 381
ActiveControl = Grid
Caption = 'fMain'
ClientHeight = 382
ClientWidth = 651
Position = poMainFormCenter
object Panel1: TPanel
Height = 182
Top = 200
Width = 651
Align = alClient
BevelInner = bvLowered
Caption = 'Panel1'
ClientHeight = 182
ClientWidth = 651
TabOrder = 0
object Grid: TTIGrid
Left = 2
Height = 178
Top = 2
Width = 647
Align = alClient
AutoFillColumns = True
BorderSpacing.CellAlignHorizontal = ccaRightBottom
BorderStyle = bsNone
Filter = [tkInteger, tkChar, tkEnumeration, tkFloat, tkSString, tkLString, tkAString, tkWString, tkVariant, tkWChar, tkBool, tkInt64, tkQWord]
FixedColor = clBtnFace
Flat = True
OnGetObject = GridGetObject
OnGetObjectCount = GridGetObjectCount
OnGetObjectName = GridGetObjectName
Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRangeSelect, goDrawFocusSelected, goColSizing, goRowMoving, goColMoving, goColSpanning, goDblClickAutoSize, goFixedRowNumbering, goScrollKeepVisible]
ParentColor = False
PropertyOrder.Strings = (
'Name'
'Category'
'Preferences'
'eMail'
)
TabOrder = 0
TabStop = True
end
end
object GroupBox1: TGroupBox
Height = 200
Width = 651
Align = alTop
ClientHeight = 178
ClientWidth = 647
TabOrder = 1
object btnSearch: TButton
Left = 500
Height = 35
Top = -1
Width = 131
Action = actSearch
Anchors = [akTop, akRight]
BorderSpacing.InnerBorder = 4
TabOrder = 0
end
object btnAdd: TButton
Left = 500
Height = 35
Top = 42
Width = 131
Action = actNew
Anchors = [akTop, akRight]
BorderSpacing.InnerBorder = 4
TabOrder = 1
end
object btnAdd1: TButton
Left = 500
Height = 35
Top = 87
Width = 131
Action = actUpdate
Anchors = [akTop, akRight]
BorderSpacing.InnerBorder = 4
TabOrder = 2
end
object btnAdd2: TButton
Left = 500
Height = 35
Top = 132
Width = 131
Action = actDelete
Anchors = [akTop, akRight]
BorderSpacing.InnerBorder = 4
TabOrder = 3
end
end
object AL: TActionList
left = 99
top = 56
object actNew: TAction
Caption = 'Create User'
DisableIfNoHandler = True
OnExecute = actNewExecute
end
object actUpdate: TAction
Caption = 'Update User'
DisableIfNoHandler = True
OnExecute = actUpdateExecute
OnUpdate = actUpdateUpdate
end
object actDelete: TAction
Caption = 'Delete'
DisableIfNoHandler = True
OnExecute = actDeleteExecute
OnUpdate = actUpdateUpdate
end
object actSearch: TAction
Caption = 'Get List'
DisableIfNoHandler = True
OnExecute = actSearchExecute
end
end
end

View File

@ -0,0 +1,44 @@
{ Ceci est un fichier ressource g�n�r� automatiquement par Lazarus }
LazarusResources.Add('TfMain','FORMDATA',[
'TPF0'#6'TfMain'#5'fMain'#4'Left'#3'{'#1#6'Height'#3'~'#1#3'Top'#3#27#1#5'Wid'
+'th'#3#139#2#18'HorzScrollBar.Page'#3#138#2#18'VertScrollBar.Page'#3'}'#1#13
+'ActiveControl'#7#4'Grid'#7'Caption'#6#5'fMain'#12'ClientHeight'#3'~'#1#11'C'
+'lientWidth'#3#139#2#8'Position'#7#16'poMainFormCenter'#0#6'TPanel'#6'Panel1'
+#6'Height'#3#182#0#3'Top'#3#200#0#5'Width'#3#139#2#5'Align'#7#8'alClient'#10
+'BevelInner'#7#9'bvLowered'#7'Caption'#6#6'Panel1'#12'ClientHeight'#3#182#0
+#11'ClientWidth'#3#139#2#8'TabOrder'#2#0#0#7'TTIGrid'#4'Grid'#4'Left'#2#2#6
+'Height'#3#178#0#3'Top'#2#2#5'Width'#3#135#2#5'Align'#7#8'alClient'#15'AutoF'
+'illColumns'#9'!BorderSpacing.CellAlignHorizontal'#7#14'ccaRightBottom'#11'B'
+'orderStyle'#7#6'bsNone'#6'Filter'#11#9'tkInteger'#6'tkChar'#13'tkEnumeratio'
+'n'#7'tkFloat'#9'tkSString'#9'tkLString'#9'tkAString'#9'tkWString'#9'tkVaria'
+'nt'#7'tkWChar'#6'tkBool'#7'tkInt64'#7'tkQWord'#0#10'FixedColor'#7#9'clBtnFa'
+'ce'#4'Flat'#9#11'OnGetObject'#7#13'GridGetObject'#16'OnGetObjectCount'#7#18
+'GridGetObjectCount'#15'OnGetObjectName'#7#17'GridGetObjectName'#7'Options'
+#11#15'goFixedVertLine'#15'goFixedHorzLine'#10'goVertLine'#10'goHorzLine'#13
+'goRangeSelect'#19'goDrawFocusSelected'#11'goColSizing'#11'goRowMoving'#11'g'
+'oColMoving'#13'goColSpanning'#18'goDblClickAutoSize'#19'goFixedRowNumbering'
+#19'goScrollKeepVisible'#0#11'ParentColor'#8#21'PropertyOrder.Strings'#1#6#4
+'Name'#6#8'Category'#6#11'Preferences'#6#5'eMail'#0#8'TabOrder'#2#0#7'TabSto'
+'p'#9#0#0#0#9'TGroupBox'#9'GroupBox1'#6'Height'#3#200#0#5'Width'#3#139#2#5'A'
+'lign'#7#5'alTop'#12'ClientHeight'#3#178#0#11'ClientWidth'#3#135#2#8'TabOrde'
+'r'#2#1#0#7'TButton'#9'btnSearch'#4'Left'#3#244#1#6'Height'#2'#'#3'Top'#2#255
+#5'Width'#3#131#0#6'Action'#7#9'actSearch'#7'Anchors'#11#5'akTop'#7'akRight'
+#0#25'BorderSpacing.InnerBorder'#2#4#8'TabOrder'#2#0#0#0#7'TButton'#6'btnAdd'
+#4'Left'#3#244#1#6'Height'#2'#'#3'Top'#2'*'#5'Width'#3#131#0#6'Action'#7#6'a'
+'ctNew'#7'Anchors'#11#5'akTop'#7'akRight'#0#25'BorderSpacing.InnerBorder'#2#4
+#8'TabOrder'#2#1#0#0#7'TButton'#7'btnAdd1'#4'Left'#3#244#1#6'Height'#2'#'#3
+'Top'#2'W'#5'Width'#3#131#0#6'Action'#7#9'actUpdate'#7'Anchors'#11#5'akTop'#7
+'akRight'#0#25'BorderSpacing.InnerBorder'#2#4#8'TabOrder'#2#2#0#0#7'TButton'
+#7'btnAdd2'#4'Left'#3#244#1#6'Height'#2'#'#3'Top'#3#132#0#5'Width'#3#131#0#6
+'Action'#7#9'actDelete'#7'Anchors'#11#5'akTop'#7'akRight'#0#25'BorderSpacing'
+'.InnerBorder'#2#4#8'TabOrder'#2#3#0#0#0#11'TActionList'#2'AL'#4'left'#2'c'#3
+'top'#2'8'#0#7'TAction'#6'actNew'#7'Caption'#6#11'Create User'#18'DisableIfN'
+'oHandler'#9#9'OnExecute'#7#13'actNewExecute'#0#0#7'TAction'#9'actUpdate'#7
+'Caption'#6#11'Update User'#18'DisableIfNoHandler'#9#9'OnExecute'#7#16'actUp'
+'dateExecute'#8'OnUpdate'#7#15'actUpdateUpdate'#0#0#7'TAction'#9'actDelete'#7
+'Caption'#6#6'Delete'#18'DisableIfNoHandler'#9#9'OnExecute'#7#16'actDeleteEx'
+'ecute'#8'OnUpdate'#7#15'actUpdateUpdate'#0#0#7'TAction'#9'actSearch'#7'Capt'
+'ion'#6#8'Get List'#18'DisableIfNoHandler'#9#9'OnExecute'#7#16'actSearchExec'
+'ute'#0#0#0#0
]);

View File

@ -0,0 +1,169 @@
unit umain;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, RTTIGrids,
ExtCtrls, StdCtrls, user_service_intf, Buttons, ActnList;
type
{ TfMain }
TfMain = class(TForm)
actDelete: TAction;
actSearch: TAction;
actUpdate: TAction;
actNew: TAction;
AL: TActionList;
btnAdd1: TButton;
btnAdd2: TButton;
btnSearch: TButton;
btnAdd: TButton;
GroupBox1: TGroupBox;
Panel1: TPanel;
Grid: TTIGrid;
procedure actDeleteExecute(Sender: TObject);
procedure actNewExecute(Sender: TObject);
procedure actSearchExecute(Sender: TObject);
procedure actUpdateExecute(Sender: TObject);
procedure actUpdateUpdate(Sender: TObject);
procedure GridGetObject(Sender: TTICustomGrid; Index: integer;
var TIObject: TPersistent);
procedure GridGetObjectCount(Sender: TTICustomGrid; ListObject: TObject;
var ObjCount: integer);
procedure GridGetObjectName(Sender: TObject; Index: integer;
TIObject: TPersistent; var ObjName: string);
private
FUserService : UserService;
function CreateObj():UserService;
function GetObjectIndex() : Integer;
public
FUsers : TUserArray;
end;
var
fMain: TfMain;
implementation
uses user_service_intf_proxy, synapse_tcp_protocol, synapse_http_protocol,
soap_formatter, binary_formatter, user_edit_imp ;
{ TfMain }
procedure TfMain.GridGetObjectCount(Sender: TTICustomGrid;
ListObject: TObject; var ObjCount: integer);
begin
if ( FUsers = nil ) then
ObjCount := 0
else
ObjCount := FUsers.Length;
end;
procedure TfMain.GridGetObjectName(Sender: TObject; Index: integer;
TIObject: TPersistent; var ObjName: string);
begin
if ( TIObject <> nil ) then
ObjName := (TIObject as TUser).UserName;
end;
function TfMain.CreateObj(): UserService;
begin
if ( FUserService = nil ) then begin
FUserService := TUserService_Proxy.Create(
'UserService',
'binary:',
'TCP:Address=127.0.0.1;Port=1234;target=UserService'
);
end;
Result := FUserService;
end;
type TCrakGrid = class(TTIGrid);
function TfMain.GetObjectIndex(): Integer;
begin
Result := TCrakGrid(Grid).Row - 1;
end;
procedure TfMain.GridGetObject(Sender: TTICustomGrid; Index: integer;
var TIObject: TPersistent);
begin
TIObject := FUsers[Index];
end;
procedure TfMain.actNewExecute(Sender: TObject);
var
obj : TUser;
f : TfUserEdit;
begin
obj := nil;
f := TfUserEdit.Create(Application);
try
obj := TUser.Create();
if f.UpdateObject(obj) then begin
CreateObj().Add(obj);
end;
finally
FreeAndNil(obj);
f.Release();
actSearch.Execute();
end;
end;
procedure TfMain.actSearchExecute(Sender: TObject);
begin
FreeAndNil(FUsers);
FUsers := CreateObj().GetList();
Grid.ListObject := FUsers;
Grid.Invalidate();
end;
procedure TfMain.actDeleteExecute(Sender: TObject);
var
i : Integer;
begin
i := GetObjectIndex();
if ( i >= 0 ) then begin
try
CreateObj().Delete(FUsers[i].UserName);
finally
actSearch.Execute();
end;
end;
end;
procedure TfMain.actUpdateExecute(Sender: TObject);
var
i : Integer;
obj : TUser;
f : TfUserEdit;
begin
i := GetObjectIndex();
if ( i >= 0 ) then begin
obj := FUsers[i];
f := TfUserEdit.Create(Application);
try
if f.UpdateObject(obj) then begin
CreateObj().Update(obj);
end;
finally
f.Release();
actSearch.Execute();
end;
end;
end;
procedure TfMain.actUpdateUpdate(Sender: TObject);
begin
TAction(Sender).Enabled := ( GetObjectIndex() >= 0 );
end;
initialization
{$I umain.lrs}
SYNAPSE_RegisterTCP_Transport();
SYNAPSE_RegisterHTTP_Transport();
end.

View File

@ -0,0 +1,362 @@
<?xml version="1.0"?>
<CONFIG>
<ProjectOptions>
<PathDelim Value="\"/>
<Version Value="5"/>
<General>
<MainUnit Value="0"/>
<IconPath Value="./"/>
<TargetFileExt Value=".exe"/>
<ActiveEditorIndexAtStart Value="7"/>
</General>
<VersionInfo>
<ProjectVersion Value=""/>
</VersionInfo>
<PublishOptions>
<Version Value="2"/>
<IgnoreBinaries Value="False"/>
<IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
<ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/>
</PublishOptions>
<RunParams>
<local>
<FormatVersion Value="1"/>
<LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
</local>
</RunParams>
<RequiredPackages Count="2">
<Item1>
<PackageName Value="RunTimeTypeInfoControls"/>
<MinVersion Minor="1" Valid="True"/>
</Item1>
<Item2>
<PackageName Value="LCL"/>
</Item2>
</RequiredPackages>
<Units Count="21">
<Unit0>
<Filename Value="user_client.lpr"/>
<IsPartOfProject Value="True"/>
<UnitName Value="user_client"/>
<CursorPos X="9" Y="9"/>
<TopLine Value="1"/>
<UsageCount Value="44"/>
</Unit0>
<Unit1>
<Filename Value="umain.pas"/>
<ComponentName Value="fMain"/>
<IsPartOfProject Value="True"/>
<ResourceFilename Value="umain.lrs"/>
<UnitName Value="umain"/>
<CursorPos X="44" Y="130"/>
<TopLine Value="116"/>
<EditorIndex Value="0"/>
<UsageCount Value="44"/>
<Loaded Value="True"/>
</Unit1>
<Unit2>
<Filename Value="..\user_service_intf.pas"/>
<UnitName Value="user_service_intf"/>
<CursorPos X="64" Y="30"/>
<TopLine Value="25"/>
<EditorIndex Value="6"/>
<UsageCount Value="23"/>
<Loaded Value="True"/>
</Unit2>
<Unit3>
<Filename Value="..\user_service_intf_proxy.pas"/>
<UnitName Value="user_service_intf_proxy"/>
<CursorPos X="24" Y="21"/>
<TopLine Value="13"/>
<EditorIndex Value="5"/>
<UsageCount Value="23"/>
<Loaded Value="True"/>
</Unit3>
<Unit4>
<Filename Value="..\..\synapse_tcp_protocol.pas"/>
<UnitName Value="synapse_tcp_protocol"/>
<CursorPos X="58" Y="28"/>
<TopLine Value="23"/>
<EditorIndex Value="4"/>
<UsageCount Value="23"/>
<Loaded Value="True"/>
</Unit4>
<Unit5>
<Filename Value="..\..\base_service_intf.pas"/>
<UnitName Value="base_service_intf"/>
<CursorPos X="1" Y="3316"/>
<TopLine Value="1"/>
<EditorIndex Value="2"/>
<UsageCount Value="23"/>
<Loaded Value="True"/>
</Unit5>
<Unit6>
<Filename Value="..\..\..\..\..\lazarus23_213\components\rtticontrols\rttigrids.pas"/>
<UnitName Value="RTTIGrids"/>
<CursorPos X="13" Y="680"/>
<TopLine Value="663"/>
<UsageCount Value="12"/>
</Unit6>
<Unit7>
<Filename Value="..\..\..\..\..\lazarus23_213\lcl\grids.pas"/>
<UnitName Value="Grids"/>
<CursorPos X="14" Y="829"/>
<TopLine Value="494"/>
<UsageCount Value="12"/>
</Unit7>
<Unit8>
<Filename Value="..\..\..\..\..\lazarus23_213\fpc\2.1.3\source\rtl\win32\classes.pp"/>
<UnitName Value="Classes"/>
<CursorPos X="7" Y="29"/>
<TopLine Value="19"/>
<UsageCount Value="9"/>
</Unit8>
<Unit9>
<Filename Value="..\..\..\..\..\lazarus23_213\fpc\2.1.3\source\rtl\objpas\types.pp"/>
<UnitName Value="types"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="268"/>
<UsageCount Value="9"/>
</Unit9>
<Unit10>
<Filename Value="..\..\..\..\..\lazarus23_213\fpc\2.1.3\source\rtl\objpas\typinfo.pp"/>
<UnitName Value="typinfo"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1276"/>
<UsageCount Value="9"/>
</Unit10>
<Unit11>
<Filename Value="user_edit_imp.pas"/>
<ComponentName Value="fUserEdit"/>
<IsPartOfProject Value="True"/>
<ResourceFilename Value="user_edit_imp.lrs"/>
<UnitName Value="user_edit_imp"/>
<CursorPos X="19" Y="27"/>
<TopLine Value="27"/>
<EditorIndex Value="7"/>
<UsageCount Value="37"/>
<Loaded Value="True"/>
</Unit11>
<Unit12>
<Filename Value="..\..\..\..\..\lazarus23_213\components\rtticontrols\rttictrls.pas"/>
<UnitName Value="RTTICtrls"/>
<CursorPos X="3" Y="2239"/>
<TopLine Value="2237"/>
<UsageCount Value="12"/>
</Unit12>
<Unit13>
<Filename Value="..\..\..\..\..\lazarus23_213\lcl\interfaces\win32\interfaces.pp"/>
<UnitName Value="Interfaces"/>
<CursorPos X="25" Y="40"/>
<TopLine Value="22"/>
<UsageCount Value="9"/>
</Unit13>
<Unit14>
<Filename Value="..\..\..\..\..\lazarus23_213\lcl\interfaces\win32\win32int.pp"/>
<UnitName Value="Win32Int"/>
<CursorPos X="34" Y="50"/>
<TopLine Value="246"/>
<UsageCount Value="9"/>
</Unit14>
<Unit15>
<Filename Value="..\..\..\..\..\lazarus23_213\fpc\2.1.3\source\rtl\inc\resh.inc"/>
<CursorPos X="3" Y="10"/>
<TopLine Value="1"/>
<UsageCount Value="9"/>
</Unit15>
<Unit16>
<Filename Value="user_edit_imp.lrs"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<UsageCount Value="9"/>
</Unit16>
<Unit17>
<Filename Value="..\..\binary_formatter.pas"/>
<UnitName Value="binary_formatter"/>
<CursorPos X="58" Y="132"/>
<TopLine Value="113"/>
<EditorIndex Value="3"/>
<UsageCount Value="15"/>
<Loaded Value="True"/>
</Unit17>
<Unit18>
<Filename Value="..\..\..\..\..\lazarus23_213\lcl\controls.pp"/>
<UnitName Value="Controls"/>
<CursorPos X="15" Y="1653"/>
<TopLine Value="1635"/>
<UsageCount Value="9"/>
</Unit18>
<Unit19>
<Filename Value="..\..\..\..\..\lazarus23_213\ideintf\propedits.pp"/>
<UnitName Value="PropEdits"/>
<CursorPos X="49" Y="4174"/>
<TopLine Value="4157"/>
<UsageCount Value="10"/>
</Unit19>
<Unit20>
<Filename Value="..\..\base_binary_formatter.pas"/>
<UnitName Value="base_binary_formatter"/>
<CursorPos X="1" Y="1511"/>
<TopLine Value="1497"/>
<EditorIndex Value="1"/>
<UsageCount Value="10"/>
<Loaded Value="True"/>
</Unit20>
</Units>
<JumpHistory Count="23" HistoryIndex="22">
<Position1>
<Filename Value="umain.pas"/>
<Caret Line="126" Column="27" TopLine="114"/>
</Position1>
<Position2>
<Filename Value="umain.pas"/>
<Caret Line="120" Column="17" TopLine="106"/>
</Position2>
<Position3>
<Filename Value="umain.pas"/>
<Caret Line="79" Column="36" TopLine="77"/>
</Position3>
<Position4>
<Filename Value="umain.pas"/>
<Caret Line="27" Column="5" TopLine="26"/>
</Position4>
<Position5>
<Filename Value="umain.pas"/>
<Caret Line="151" Column="22" TopLine="75"/>
</Position5>
<Position6>
<Filename Value="umain.pas"/>
<Caret Line="29" Column="49" TopLine="28"/>
</Position6>
<Position7>
<Filename Value="umain.pas"/>
<Caret Line="31" Column="48" TopLine="14"/>
</Position7>
<Position8>
<Filename Value="umain.pas"/>
<Caret Line="159" Column="3" TopLine="141"/>
</Position8>
<Position9>
<Filename Value="umain.pas"/>
<Caret Line="120" Column="1" TopLine="117"/>
</Position9>
<Position10>
<Filename Value="umain.pas"/>
<Caret Line="85" Column="38" TopLine="142"/>
</Position10>
<Position11>
<Filename Value="umain.pas"/>
<Caret Line="158" Column="51" TopLine="142"/>
</Position11>
<Position12>
<Filename Value="user_edit_imp.pas"/>
<Caret Line="25" Column="15" TopLine="1"/>
</Position12>
<Position13>
<Filename Value="user_edit_imp.pas"/>
<Caret Line="25" Column="18" TopLine="10"/>
</Position13>
<Position14>
<Filename Value="user_edit_imp.pas"/>
<Caret Line="25" Column="18" TopLine="10"/>
</Position14>
<Position15>
<Filename Value="user_edit_imp.pas"/>
<Caret Line="25" Column="19" TopLine="10"/>
</Position15>
<Position16>
<Filename Value="user_edit_imp.pas"/>
<Caret Line="25" Column="19" TopLine="10"/>
</Position16>
<Position17>
<Filename Value="..\user_service_intf_proxy.pas"/>
<Caret Line="21" Column="24" TopLine="13"/>
</Position17>
<Position18>
<Filename Value="umain.pas"/>
<Caret Line="158" Column="51" TopLine="1"/>
</Position18>
<Position19>
<Filename Value="umain.pas"/>
<Caret Line="69" Column="44" TopLine="55"/>
</Position19>
<Position20>
<Filename Value="umain.pas"/>
<Caret Line="130" Column="44" TopLine="116"/>
</Position20>
<Position21>
<Filename Value="user_edit_imp.pas"/>
<Caret Line="25" Column="19" TopLine="13"/>
</Position21>
<Position22>
<Filename Value="user_edit_imp.pas"/>
<Caret Line="26" Column="23" TopLine="13"/>
</Position22>
<Position23>
<Filename Value="user_edit_imp.pas"/>
<Caret Line="27" Column="22" TopLine="13"/>
</Position23>
</JumpHistory>
</ProjectOptions>
<CompilerOptions>
<Version Value="5"/>
<PathDelim Value="\"/>
<Target>
<Filename Value="user_client.exe"/>
</Target>
<SearchPaths>
<OtherUnitFiles Value="C:\Programmes\lazarus\wst\samples\;$(LazarusDir)\others_package\synapse\;C:\Programmes\lazarus\wst\"/>
<UnitOutputDirectory Value="obj"/>
<SrcPath Value="$(LazarusDir)\lcl\;$(LazarusDir)\lcl\interfaces\$(LCLWidgetType)\"/>
</SearchPaths>
<CodeGeneration>
<Generate Value="Faster"/>
</CodeGeneration>
<Linking>
<Options>
<Win32>
<GraphicApplication Value="True"/>
</Win32>
</Options>
</Linking>
<Other>
<CompilerPath Value="$(CompPath)"/>
</Other>
</CompilerOptions>
<Debugging>
<BreakPoints Count="4">
<Item1>
<Source Value="D:\lazarusClean\fpcsrc\rtl\inc\getopts.pp"/>
<Line Value="230"/>
</Item1>
<Item2>
<Source Value="D:\lazarusClean\fpcsrc\rtl\inc\getopts.pp"/>
<Line Value="193"/>
</Item2>
<Item3>
<Source Value="D:\lazarusClean\fpcsrc\rtl\inc\getopts.pp"/>
<Line Value="198"/>
</Item3>
<Item4>
<Source Value="..\..\ws_helper\wsdl2pas_imp.pas"/>
<Line Value="606"/>
</Item4>
</BreakPoints>
<Watches Count="2">
<Item1>
<Expression Value="locStrFilter"/>
</Item1>
<Item2>
<Expression Value="i"/>
</Item2>
</Watches>
<Exceptions Count="2">
<Item1>
<Name Value="ECodetoolError"/>
</Item1>
<Item2>
<Name Value="EFOpenError"/>
</Item2>
</Exceptions>
</Debugging>
</CONFIG>

View File

@ -0,0 +1,19 @@
program user_client;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Interfaces, // this includes the LCL widgetset
Forms
, umain, RunTimeTypeInfoControls, user_edit_imp;
begin
Application.Initialize;
Application.CreateForm(TfMain, fMain);
Application.CreateForm(TfUserEdit, fUserEdit);
Application.Run;
end.

View File

@ -0,0 +1,124 @@
object fUserEdit: TfUserEdit
Left = 395
Height = 241
Top = 199
Width = 400
HorzScrollBar.Page = 399
VertScrollBar.Page = 240
ActiveControl = btnOk
BorderIcons = [biSystemMenu]
BorderStyle = bsDialog
Caption = 'User Edit'
ClientHeight = 241
ClientWidth = 400
Position = poMainFormCenter
object Panel1: TPanel
Height = 50
Top = 191
Width = 400
Align = alBottom
ClientHeight = 50
ClientWidth = 400
TabOrder = 0
object btnOk: TButton
Left = 224
Height = 35
Top = 6
Width = 75
BorderSpacing.InnerBorder = 4
Caption = 'OK'
Default = True
ModalResult = 1
TabOrder = 0
end
object Button2: TButton
Left = 312
Height = 35
Top = 6
Width = 75
BorderSpacing.InnerBorder = 4
Cancel = True
Caption = 'Cancel'
ModalResult = 2
TabOrder = 1
end
end
object Panel2: TPanel
Height = 191
Width = 400
Align = alClient
ClientHeight = 191
ClientWidth = 400
TabOrder = 1
object Label1: TLabel
Left = 16
Height = 18
Top = 18
Width = 36
Caption = 'Name'
Color = clNone
ParentColor = False
end
object Label2: TLabel
Left = 16
Height = 18
Top = 53
Width = 34
Caption = 'e-Mail'
Color = clNone
ParentColor = False
end
object Label3: TLabel
Left = 16
Height = 18
Top = 88
Width = 58
Caption = 'Category'
Color = clNone
ParentColor = False
end
object Label4: TLabel
Left = 17
Height = 18
Top = 120
Width = 72
Caption = 'Preferences'
Color = clNone
ParentColor = False
end
object edtName: TTIEdit
Left = 80
Height = 23
Top = 16
Width = 304
Link.TIPropertyName = 'UserName'
TabOrder = 0
end
object edteMail: TTIEdit
Left = 80
Height = 23
Top = 53
Width = 304
Link.TIPropertyName = 'eMail'
TabOrder = 1
end
object edtCategory: TTIComboBox
Left = 80
Height = 24
Top = 88
Width = 160
Link.TIPropertyName = 'Category'
MaxLength = 0
Style = csDropDownList
TabOrder = 2
end
object edtPreferences: TTIEdit
Left = 17
Height = 23
Top = 146
Width = 368
Link.TIPropertyName = 'Preferences'
TabOrder = 3
end
end
end

View File

@ -0,0 +1,34 @@
{ Ceci est un fichier ressource g�n�r� automatiquement par Lazarus }
LazarusResources.Add('TfUserEdit','FORMDATA',[
'TPF0'#10'TfUserEdit'#9'fUserEdit'#4'Left'#3#139#1#6'Height'#3#241#0#3'Top'#3
+#199#0#5'Width'#3#144#1#18'HorzScrollBar.Page'#3#143#1#18'VertScrollBar.Page'
+#3#240#0#13'ActiveControl'#7#5'btnOk'#11'BorderIcons'#11#12'biSystemMenu'#0
+#11'BorderStyle'#7#8'bsDialog'#7'Caption'#6#9'User Edit'#12'ClientHeight'#3
+#241#0#11'ClientWidth'#3#144#1#8'Position'#7#16'poMainFormCenter'#0#6'TPanel'
+#6'Panel1'#6'Height'#2'2'#3'Top'#3#191#0#5'Width'#3#144#1#5'Align'#7#8'alBot'
+'tom'#12'ClientHeight'#2'2'#11'ClientWidth'#3#144#1#8'TabOrder'#2#0#0#7'TBut'
+'ton'#5'btnOk'#4'Left'#3#224#0#6'Height'#2'#'#3'Top'#2#6#5'Width'#2'K'#25'Bo'
+'rderSpacing.InnerBorder'#2#4#7'Caption'#6#2'OK'#7'Default'#9#11'ModalResult'
+#2#1#8'TabOrder'#2#0#0#0#7'TButton'#7'Button2'#4'Left'#3'8'#1#6'Height'#2'#'
+#3'Top'#2#6#5'Width'#2'K'#25'BorderSpacing.InnerBorder'#2#4#6'Cancel'#9#7'Ca'
+'ption'#6#6'Cancel'#11'ModalResult'#2#2#8'TabOrder'#2#1#0#0#0#6'TPanel'#6'Pa'
+'nel2'#6'Height'#3#191#0#5'Width'#3#144#1#5'Align'#7#8'alClient'#12'ClientHe'
+'ight'#3#191#0#11'ClientWidth'#3#144#1#8'TabOrder'#2#1#0#6'TLabel'#6'Label1'
+#4'Left'#2#16#6'Height'#2#18#3'Top'#2#18#5'Width'#2'$'#7'Caption'#6#4'Name'#5
+'Color'#7#6'clNone'#11'ParentColor'#8#0#0#6'TLabel'#6'Label2'#4'Left'#2#16#6
+'Height'#2#18#3'Top'#2'5'#5'Width'#2'"'#7'Caption'#6#6'e-Mail'#5'Color'#7#6
+'clNone'#11'ParentColor'#8#0#0#6'TLabel'#6'Label3'#4'Left'#2#16#6'Height'#2
+#18#3'Top'#2'X'#5'Width'#2':'#7'Caption'#6#8'Category'#5'Color'#7#6'clNone'
+#11'ParentColor'#8#0#0#6'TLabel'#6'Label4'#4'Left'#2#17#6'Height'#2#18#3'Top'
+#2'x'#5'Width'#2'H'#7'Caption'#6#11'Preferences'#5'Color'#7#6'clNone'#11'Par'
+'entColor'#8#0#0#7'TTIEdit'#7'edtName'#4'Left'#2'P'#6'Height'#2#23#3'Top'#2
+#16#5'Width'#3'0'#1#19'Link.TIPropertyName'#6#8'UserName'#8'TabOrder'#2#0#0#0
+#7'TTIEdit'#8'edteMail'#4'Left'#2'P'#6'Height'#2#23#3'Top'#2'5'#5'Width'#3'0'
+#1#19'Link.TIPropertyName'#6#5'eMail'#8'TabOrder'#2#1#0#0#11'TTIComboBox'#11
+'edtCategory'#4'Left'#2'P'#6'Height'#2#24#3'Top'#2'X'#5'Width'#3#160#0#19'Li'
+'nk.TIPropertyName'#6#8'Category'#9'MaxLength'#2#0#5'Style'#7#14'csDropDownL'
+'ist'#8'TabOrder'#2#2#0#0#7'TTIEdit'#14'edtPreferences'#4'Left'#2#17#6'Heigh'
+'t'#2#23#3'Top'#3#146#0#5'Width'#3'p'#1#19'Link.TIPropertyName'#6#11'Prefere'
+'nces'#8'TabOrder'#2#3#0#0#0#0
]);

View File

@ -0,0 +1,73 @@
unit user_edit_imp;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, ExtCtrls,
Buttons, StdCtrls, RTTICtrls, user_service_intf;
type
{ TfUserEdit }
TfUserEdit = class(TForm)
btnOk: TButton;
Button2: TButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Panel1: TPanel;
Panel2: TPanel;
edtCategory: TTIComboBox;
edtName: TTIEdit;
edteMail: TTIEdit;
edtPreferences: TTIEdit;
private
FInfos: TUser;
public
constructor Create(AOwner : TComponent);override;
destructor Destroy();override;
property Infos : TUser read FInfos;
function UpdateObject( AUser : TUser ) : Boolean;
end;
var
fUserEdit: TfUserEdit;
implementation
{ TfUserEdit }
constructor TfUserEdit.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FInfos := TUser.Create();
edtName.Link.TIObject := FInfos;
edteMail.Link.TIObject := FInfos;
edtPreferences.Link.TIObject := FInfos;
edtCategory.Link.TIObject := FInfos;
end;
destructor TfUserEdit.Destroy();
begin
FreeAndNil(FInfos);
inherited Destroy();
end;
function TfUserEdit.UpdateObject(AUser: TUser): Boolean;
begin
Infos.Assign(AUser);
Result := ( ShowModal() = mrOK );
if Result then begin
AUser.Assign(Infos);
end;
end;
initialization
{$I user_edit_imp.lrs}
end.

View File

@ -0,0 +1,216 @@
{
This unit has been produced by ws_helper.
Input unit name : "user_service_intf".
This unit name : "user_service_intf".
Date : "02/05/2007 20:07".
}
unit user_service_intf;
{$mode objfpc}{$H+}
interface
uses SysUtils, Classes, TypInfo, base_service_intf, service_intf;
const
sNAME_SPACE = 'urn:UserService';
sUNIT_NAME = 'user_service_intf';
type
TUser = class;
TUserArray = class;
TUserCategory = (
Normal
,Admin
);
TUser = class(TBaseComplexRemotable)
private
FCategory : TUserCategory;
FUserName : string;
FeMail : string;
FPreferences : string;
published
property Category : TUserCategory read FCategory write FCategory;
property UserName : string read FUserName write FUserName;
property eMail : string read FeMail write FeMail;
property Preferences : string read FPreferences write FPreferences;
end;
TUserArray = class(TBaseObjectArrayRemotable)
private
function GetItem(AIndex: Integer): TUser;
public
class function GetItemClass():TBaseRemotableClass;override;
property Item[AIndex:Integer] : TUser Read GetItem;Default;
end;
UserService = interface(IInvokable)
['{CA6F6192-C3DE-4D9C-B3DF-E616376A0DC9}']
function GetList():TUserArray;
procedure Add(
Const AUser : TUser
);
procedure Update(
Const AUser : TUser
);
function Find(
Const AName : string
):TUser;
function Delete(
Const AName : string
):boolean;
end;
procedure Register_user_service_intf_ServiceMetadata();
Implementation
uses metadata_repository;
{ TUserArray }
function TUserArray.GetItem(AIndex: Integer): TUser;
begin
Result := Inherited GetItem(AIndex) As TUser;
end;
class function TUserArray.GetItemClass(): TBaseRemotableClass;
begin
Result:= TUser;
end;
procedure Register_user_service_intf_ServiceMetadata();
var
mm : IModuleMetadataMngr;
begin
mm := GetModuleMetadataMngr();
mm.SetRepositoryNameSpace(sUNIT_NAME, sNAME_SPACE);
mm.SetServiceCustomData(
sUNIT_NAME,
'UserService',
'TRANSPORT_Address',
'http://127.0.0.1:8000/services/UserService'
);
mm.SetServiceCustomData(
sUNIT_NAME,
'UserService',
'FORMAT_Style',
'rpc'
);
mm.SetOperationCustomData(
sUNIT_NAME,
'UserService',
'GetList',
'TRANSPORT_soapAction',
'urn:UserService/UserServiceGetList'
);
mm.SetOperationCustomData(
sUNIT_NAME,
'UserService',
'GetList',
'FORMAT_Input_EncodingStyle',
'literal'
);
mm.SetOperationCustomData(
sUNIT_NAME,
'UserService',
'GetList',
'FORMAT_OutputEncodingStyle',
'literal'
);
mm.SetOperationCustomData(
sUNIT_NAME,
'UserService',
'Add',
'TRANSPORT_soapAction',
'urn:UserService/UserServiceAdd'
);
mm.SetOperationCustomData(
sUNIT_NAME,
'UserService',
'Add',
'FORMAT_Input_EncodingStyle',
'literal'
);
mm.SetOperationCustomData(
sUNIT_NAME,
'UserService',
'Add',
'FORMAT_OutputEncodingStyle',
'literal'
);
mm.SetOperationCustomData(
sUNIT_NAME,
'UserService',
'Update',
'TRANSPORT_soapAction',
'urn:UserService/UserServiceUpdate'
);
mm.SetOperationCustomData(
sUNIT_NAME,
'UserService',
'Update',
'FORMAT_Input_EncodingStyle',
'literal'
);
mm.SetOperationCustomData(
sUNIT_NAME,
'UserService',
'Update',
'FORMAT_OutputEncodingStyle',
'literal'
);
mm.SetOperationCustomData(
sUNIT_NAME,
'UserService',
'Find',
'TRANSPORT_soapAction',
'urn:UserService/UserServiceFind'
);
mm.SetOperationCustomData(
sUNIT_NAME,
'UserService',
'Find',
'FORMAT_Input_EncodingStyle',
'literal'
);
mm.SetOperationCustomData(
sUNIT_NAME,
'UserService',
'Find',
'FORMAT_OutputEncodingStyle',
'literal'
);
mm.SetOperationCustomData(
sUNIT_NAME,
'UserService',
'Delete',
'TRANSPORT_soapAction',
'urn:UserService/UserServiceDelete'
);
mm.SetOperationCustomData(
sUNIT_NAME,
'UserService',
'Delete',
'FORMAT_Input_EncodingStyle',
'literal'
);
mm.SetOperationCustomData(
sUNIT_NAME,
'UserService',
'Delete',
'FORMAT_OutputEncodingStyle',
'literal'
);
end;
initialization
GetTypeRegistry().Register(sNAME_SPACE,TypeInfo(TUserCategory),'TUserCategory');
GetTypeRegistry().Register(sNAME_SPACE,TypeInfo(TUser),'TUser');
GetTypeRegistry().Register(sNAME_SPACE,TypeInfo(TUserArray),'TUserArray');
GetTypeRegistry().ItemByTypeInfo[TypeInfo(TUserArray)].RegisterExternalPropertyName(sARRAY_ITEM,'item');
End.

View File

@ -0,0 +1,129 @@
<?xml version="1.0"?>
<definitions name="user_service_intf" targetNamespace="urn:UserService" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="urn:UserService" xmlns="http://schemas.xmlsoap.org/wsdl/">
<types>
<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:UserService">
<xsd:simpleType name="TUserCategory">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="Normal"/>
<xsd:enumeration value="Admin"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:element name="TUser">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Category" type="tns:TUserCategory" minOccurs="1" maxOccurs="1"/>
<xsd:element name="Name" type="xsd:string" minOccurs="1" maxOccurs="1"/>
<xsd:element name="eMail" type="xsd:string" minOccurs="1" maxOccurs="1"/>
<xsd:element name="Preferences" type="xsd:string" minOccurs="1" maxOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="TUserArray">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="item" type="tns:TUser" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
</types>
<message name="GetList"/>
<message name="GetListResponse">
<part name="result" type="tns:TUserArray"/>
</message>
<message name="Add">
<part name="AUser" type="tns:TUser"/>
</message>
<message name="AddResponse"/>
<message name="Update">
<part name="AUser" type="tns:TUser"/>
</message>
<message name="UpdateResponse"/>
<message name="Find">
<part name="AName" type="xsd:string"/>
</message>
<message name="FindResponse">
<part name="result" type="tns:TUser"/>
</message>
<message name="Delete">
<part name="AName" type="xsd:string"/>
</message>
<message name="DeleteResponse">
<part name="result" type="xsd:boolean"/>
</message>
<portType name="UserService">
<operation name="GetList">
<input message="tns:GetList"/>
<output message="tns:GetListResponse"/>
</operation>
<operation name="Add">
<input message="tns:Add"/>
<output message="tns:AddResponse"/>
</operation>
<operation name="Update">
<input message="tns:Update"/>
<output message="tns:UpdateResponse"/>
</operation>
<operation name="Find">
<input message="tns:Find"/>
<output message="tns:FindResponse"/>
</operation>
<operation name="Delete">
<input message="tns:Delete"/>
<output message="tns:DeleteResponse"/>
</operation>
</portType>
<binding name="UserServiceBinding" type="tns:UserService">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="GetList">
<soap:operation soapAction="urn:UserService/UserServiceGetList"/>
<input>
<soap:body use="literal" namespace="urn:UserService"/>
</input>
<output>
<soap:body use="literal" namespace="urn:UserService"/>
</output>
</operation>
<operation name="Add">
<soap:operation soapAction="urn:UserService/UserServiceAdd"/>
<input>
<soap:body use="literal" namespace="urn:UserService"/>
</input>
<output>
<soap:body use="literal" namespace="urn:UserService"/>
</output>
</operation>
<operation name="Update">
<soap:operation soapAction="urn:UserService/UserServiceUpdate"/>
<input>
<soap:body use="literal" namespace="urn:UserService"/>
</input>
<output>
<soap:body use="literal" namespace="urn:UserService"/>
</output>
</operation>
<operation name="Find">
<soap:operation soapAction="urn:UserService/UserServiceFind"/>
<input>
<soap:body use="literal" namespace="urn:UserService"/>
</input>
<output>
<soap:body use="literal" namespace="urn:UserService"/>
</output>
</operation>
<operation name="Delete">
<soap:operation soapAction="urn:UserService/UserServiceDelete"/>
<input>
<soap:body use="literal" namespace="urn:UserService"/>
</input>
<output>
<soap:body use="literal" namespace="urn:UserService"/>
</output>
</operation>
</binding>
<service name="UserService">
<port name="UserServicePort" binding="tns:UserServiceBinding">
<soap:address location="http://127.0.0.1:8000/services/UserService"/>
</port>
</service>
</definitions>

View File

@ -0,0 +1,75 @@
unit user_service_intf;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, base_service_intf;
type
TUserCategory = ( Normal, Admin );
{ TUser }
TUser = class(TBaseComplexRemotable)
private
FCategory: TUserCategory;
FeMail: string;
FName: string;
FPreferences: string;
published
property Category : TUserCategory read FCategory write FCategory;
property Name : string read FName write FName;
property eMail : string read FeMail write FeMail;
property Preferences : string read FPreferences write FPreferences;
end;
{ TUserArray }
TUserArray = class(TBaseObjectArrayRemotable)
private
function GetUser(AIndex: Integer): TUser;
public
class function GetItemClass():TBaseRemotableClass;override;
Property Item[AIndex:Integer] : TUser Read GetUser;Default;
End;
UserService = interface(IInvokable)
['{101F2CA7-19FC-4A73-AA98-F13FCDA75EE1}']
function GetList():TUserArray;
procedure Add(AUser : TUser);
function Find(const AName : string):TUser;
function Delete(const AName : string):Boolean;
end;
procedure Register_user_service_intf_NameSpace();
implementation
uses metadata_repository;
procedure Register_user_service_intf_NameSpace();
begin
GetModuleMetadataMngr().SetRepositoryNameSpace('user_service_intf','urn:UserService');
end;
{ TUserArray }
function TUserArray.GetUser(AIndex: Integer): TUser;
begin
Result := GetItem(AIndex) as TUser;
end;
class function TUserArray.GetItemClass(): TBaseRemotableClass;
begin
Result := TUser;
end;
initialization
GetTypeRegistry().Register('urn:UserService',TypeInfo(TUserCategory),'TUserCategory');
GetTypeRegistry().Register('urn:UserService',TypeInfo(TUser),'TUser');
GetTypeRegistry().Register('urn:UserService',TypeInfo(TUserArray),'TUserArray');
end.

View File

@ -0,0 +1,227 @@
{
This unit has been produced by ws_helper.
Input unit name : "user_service_intf".
This unit name : "user_service_intf_binder".
Date : "02/05/2007 20:07".
}
unit user_service_intf_binder;
{$mode objfpc}{$H+}
interface
uses SysUtils, Classes, base_service_intf, server_service_intf, user_service_intf;
type
TUserService_ServiceBinder=class(TBaseServiceBinder)
Protected
procedure GetListHandler(AFormatter:IFormatterResponse);
procedure AddHandler(AFormatter:IFormatterResponse);
procedure UpdateHandler(AFormatter:IFormatterResponse);
procedure FindHandler(AFormatter:IFormatterResponse);
procedure DeleteHandler(AFormatter:IFormatterResponse);
Public
constructor Create();
End;
TUserService_ServiceBinderFactory = class(TInterfacedObject,IItemFactory)
protected
function CreateInstance():IInterface;
End;
procedure Server_service_RegisterUserServiceService();
Implementation
uses TypInfo, wst_resources_imp,metadata_repository;
{ TUserService_ServiceBinder implementation }
procedure TUserService_ServiceBinder.GetListHandler(AFormatter:IFormatterResponse);
Var
cllCntrl : ICallControl;
tmpObj : UserService;
callCtx : ICallContext;
strPrmName : string;
procName,trgName : string;
returnVal : TUserArray;
Begin
callCtx := GetCallContext();
If ( PTypeInfo(TypeInfo(TUserArray))^.Kind in [tkClass,tkInterface] ) Then
Pointer(returnVal) := Nil;
tmpObj := Self.GetFactory().CreateInstance() as UserService;
if Supports(tmpObj,ICallControl,cllCntrl) then
cllCntrl.SetCallContext(GetCallContext());
returnVal := tmpObj.GetList();
If ( PTypeInfo(TypeInfo(TUserArray))^.Kind = tkClass ) And Assigned(Pointer(returnVal)) Then
callCtx.AddObjectToFree(TObject(returnVal));
procName := AFormatter.GetCallProcedureName();
trgName := AFormatter.GetCallTarget();
AFormatter.Clear();
AFormatter.BeginCallResponse(procName,trgName);
AFormatter.Put('result',TypeInfo(TUserArray),returnVal);
AFormatter.EndCallResponse();
callCtx := Nil;
End;
procedure TUserService_ServiceBinder.AddHandler(AFormatter:IFormatterResponse);
Var
cllCntrl : ICallControl;
tmpObj : UserService;
callCtx : ICallContext;
strPrmName : string;
procName,trgName : string;
AUser : TUser;
Begin
callCtx := GetCallContext();
TObject(AUser) := Nil;
strPrmName := 'AUser'; AFormatter.Get(TypeInfo(TUser),strPrmName,AUser);
If Assigned(Pointer(AUser)) Then
callCtx.AddObjectToFree(TObject(AUser));
tmpObj := Self.GetFactory().CreateInstance() as UserService;
if Supports(tmpObj,ICallControl,cllCntrl) then
cllCntrl.SetCallContext(GetCallContext());
tmpObj.Add(AUser);
procName := AFormatter.GetCallProcedureName();
trgName := AFormatter.GetCallTarget();
AFormatter.Clear();
AFormatter.BeginCallResponse(procName,trgName);
AFormatter.EndCallResponse();
callCtx := Nil;
End;
procedure TUserService_ServiceBinder.UpdateHandler(AFormatter:IFormatterResponse);
Var
cllCntrl : ICallControl;
tmpObj : UserService;
callCtx : ICallContext;
strPrmName : string;
procName,trgName : string;
AUser : TUser;
Begin
callCtx := GetCallContext();
TObject(AUser) := Nil;
strPrmName := 'AUser'; AFormatter.Get(TypeInfo(TUser),strPrmName,AUser);
If Assigned(Pointer(AUser)) Then
callCtx.AddObjectToFree(TObject(AUser));
tmpObj := Self.GetFactory().CreateInstance() as UserService;
if Supports(tmpObj,ICallControl,cllCntrl) then
cllCntrl.SetCallContext(GetCallContext());
tmpObj.Update(AUser);
procName := AFormatter.GetCallProcedureName();
trgName := AFormatter.GetCallTarget();
AFormatter.Clear();
AFormatter.BeginCallResponse(procName,trgName);
AFormatter.EndCallResponse();
callCtx := Nil;
End;
procedure TUserService_ServiceBinder.FindHandler(AFormatter:IFormatterResponse);
Var
cllCntrl : ICallControl;
tmpObj : UserService;
callCtx : ICallContext;
strPrmName : string;
procName,trgName : string;
AName : string;
returnVal : TUser;
Begin
callCtx := GetCallContext();
TObject(returnVal) := Nil;
strPrmName := 'AName'; AFormatter.Get(TypeInfo(string),strPrmName,AName);
tmpObj := Self.GetFactory().CreateInstance() as UserService;
if Supports(tmpObj,ICallControl,cllCntrl) then
cllCntrl.SetCallContext(GetCallContext());
returnVal := tmpObj.Find(AName);
If Assigned(TObject(returnVal)) Then
callCtx.AddObjectToFree(TObject(returnVal));
procName := AFormatter.GetCallProcedureName();
trgName := AFormatter.GetCallTarget();
AFormatter.Clear();
AFormatter.BeginCallResponse(procName,trgName);
AFormatter.Put('result',TypeInfo(TUser),returnVal);
AFormatter.EndCallResponse();
callCtx := Nil;
End;
procedure TUserService_ServiceBinder.DeleteHandler(AFormatter:IFormatterResponse);
Var
cllCntrl : ICallControl;
tmpObj : UserService;
callCtx : ICallContext;
strPrmName : string;
procName,trgName : string;
AName : string;
returnVal : boolean;
Begin
callCtx := GetCallContext();
strPrmName := 'AName'; AFormatter.Get(TypeInfo(string),strPrmName,AName);
tmpObj := Self.GetFactory().CreateInstance() as UserService;
if Supports(tmpObj,ICallControl,cllCntrl) then
cllCntrl.SetCallContext(GetCallContext());
returnVal := tmpObj.Delete(AName);
procName := AFormatter.GetCallProcedureName();
trgName := AFormatter.GetCallTarget();
AFormatter.Clear();
AFormatter.BeginCallResponse(procName,trgName);
AFormatter.Put('result',TypeInfo(boolean),returnVal);
AFormatter.EndCallResponse();
callCtx := Nil;
End;
constructor TUserService_ServiceBinder.Create();
Begin
Inherited Create(GetServiceImplementationRegistry().FindFactory('UserService'));
RegisterVerbHandler('GetList',@GetListHandler);
RegisterVerbHandler('Add',@AddHandler);
RegisterVerbHandler('Update',@UpdateHandler);
RegisterVerbHandler('Find',@FindHandler);
RegisterVerbHandler('Delete',@DeleteHandler);
End;
{ TUserService_ServiceBinderFactory }
function TUserService_ServiceBinderFactory.CreateInstance():IInterface;
Begin
Result := TUserService_ServiceBinder.Create() as IInterface;
End;
procedure Server_service_RegisterUserServiceService();
Begin
GetServerServiceRegistry().Register('UserService',TUserService_ServiceBinderFactory.Create() as IItemFactory);
End;
initialization
{$IF DECLARED(Register_user_service_intf_NameSpace)}
Register_user_service_intf_NameSpace();
{$ENDIF}
{$i user_service_intf.wst}
End.

View File

@ -0,0 +1,202 @@
{
This unit has been produced by ws_helper.
Input unit name : "user_service_intf".
This unit name : "user_service_intf_imp".
Date : "30/04/2007 00:07".
}
Unit user_service_intf_imp;
{$mode objfpc}{$H+}
Interface
Uses SysUtils, Classes,
base_service_intf, server_service_intf, server_service_imputils,
user_service_intf, cursor_intf;
Type
{ TUserService_ServiceImp }
TUserService_ServiceImp=class(TBaseServiceImplementation,UserService)
Protected
function GetList():TUserArray;
procedure Add(
Const AUser : TUser
);
procedure Update(
Const AUser : TUser
);
function Find(
Const AName : string
):TUser;
function Delete(
Const AName : string
):boolean;
End;
const sDATA_FILE_NAME = 'sample.data';
procedure RegisterUserServiceImplementationFactory();
procedure SaveDataToFile(const AFileName : string);
Implementation
uses Contnrs, std_cursors, rtti_filters, imp_helper;
var
FUserList : TObjectList = nil;
FUserCursor : IObjectCursor = nil;
procedure FillArrayFromCursor(ACursor: IObjectCursor;ARes: TUserArray);
var
i, c : Integer;
begin
ACursor.Reset();
c := 0;
while ACursor.MoveNext() do begin
Inc(c);
end;
ARes.SetLength(c);
i := 0;
ACursor.Reset();
while ACursor.MoveNext() do begin
ARes[i].Assign(ACursor.GetCurrent() as TUser);
Inc(i);
end;
end;
{ TUserService_ServiceImp implementation }
function TUserService_ServiceImp.GetList():TUserArray;
var
locCrs : IObjectCursor;
srcUsr, locUsr : TUser;
Begin
Result := TUserArray.Create();
try
FillArrayFromCursor(FUserCursor.Clone() as IObjectCursor,Result);
except
FreeAndNil(Result);
raise;
end;
SaveDataToFile(sDATA_FILE_NAME);
End;
procedure TUserService_ServiceImp.Add(Const AUser : TUser);
var
locObj : TUser;
Begin
locObj := Find(AUser.UserName);
if ( locObj <> nil ) then
raise Exception.CreateFmt('Duplicated user : "%s"',[AUser.UserName]);
locObj := TUser.Create();
locObj.Assign(AUser);
FUserList.Add(locObj);
End;
procedure TUserService_ServiceImp.Update(const AUser: TUser);
var
locCrs : IObjectCursor;
Begin
locCrs := FUserCursor.Clone() as IObjectCursor;
locCrs.Reset();
locCrs := CreateCursorOn(locCrs,ParseFilter(Format('%s=%s',['UserName',QuotedStr(AUser.UserName)]),TUser));
if locCrs.MoveNext() then begin
(locCrs.GetCurrent() as TUser).Assign(AUser);
end;
end;
function TUserService_ServiceImp.Find(Const AName : string):TUser;
var
locCrs : IObjectCursor;
Begin
Result := nil;
locCrs := FUserCursor.Clone() as IObjectCursor;
locCrs.Reset();
locCrs := CreateCursorOn(locCrs,ParseFilter(Format('%s=%s',['UserName',QuotedStr(AName)]),TUser));
if locCrs.MoveNext() then begin
Result := TUser.Create();
Result.Assign(locCrs.GetCurrent() as TUser);
end;
End;
function TUserService_ServiceImp.Delete(Const AName : string):boolean;
var
locCrs : IObjectCursor;
Begin
Result := False;
locCrs := FUserCursor.Clone() as IObjectCursor;
locCrs.Reset();
locCrs := CreateCursorOn(locCrs,ParseFilter(Format('%s=%s',['UserName',QuotedStr(AName)]),TUser));
if locCrs.MoveNext() then begin
FUserList.Delete(FUserList.IndexOf(locCrs.GetCurrent() as TUser));
Result := True;
end;
End;
procedure RegisterUserServiceImplementationFactory();
Begin
GetServiceImplementationRegistry().Register('UserService',TImplementationFactory.Create(TUserService_ServiceImp) as IServiceImplementationFactory);
End;
procedure FillSampleData();
var
locUser : TUser;
begin
locUser := TUser.Create();
locUser.UserName := 'Lazarus FreePascal';
locUser.eMail := 'Lazarus@FreePascal.wst';
FUserList.Add(locUser);
locUser := TUser.Create();
locUser.UserName := 'Inoussa OUEDRAOGO';
locUser.eMail := 'sample@example.wst';
FUserList.Add(locUser);
end;
procedure FillDataFromFile(const AFileName : string);
var
objArray : TUserArray;
i : PtrInt;
obj : TUser;
begin
objArray := TUserArray.Create();
try
LoadObjectFromFile(objArray,AFileName);
FUserList.Clear();
for i := 0 to Pred(objArray.Length) do begin
obj := TUser.Create();
FUserList.Add(obj);
obj.Assign(objArray[i]);
end;
finally
FreeAndNil(objArray);
end;
end;
procedure SaveDataToFile(const AFileName : string);
var
objArray : TUserArray;
begin
objArray := TUserArray.Create();
try
FUserCursor.Reset();
FillArrayFromCursor(FUserCursor,objArray);
SaveObjectToFile(objArray,AFileName);
finally
FreeAndNil(objArray);
end;
end;
initialization
FUserList := TObjectList.Create(True);
FUserCursor := TObjectListCursor.Create(FUserList);
if FileExists(sDATA_FILE_NAME) then
FillDataFromFile(sDATA_FILE_NAME)
else
FillSampleData();
finalization
if Assigned(FUserCursor) then
SaveDataToFile(sDATA_FILE_NAME);
FUserCursor := nil;
FreeAndNil(FUserList);
end.

View File

@ -0,0 +1,174 @@
{
This unit has been produced by ws_helper.
Input unit name : "user_service_intf".
This unit name : "user_service_intf_proxy".
Date : "02/05/2007 20:07".
}
Unit user_service_intf_proxy;
{$mode objfpc}{$H+}
Interface
Uses SysUtils, Classes, TypInfo, base_service_intf, service_intf, user_service_intf;
Type
TUserService_Proxy=class(TBaseProxy,UserService)
Protected
class function GetServiceType() : PTypeInfo;override;
function GetList():TUserArray;
procedure Add(
Const AUser : TUser
);
procedure Update(
Const AUser : TUser
);
function Find(
Const AName : string
):TUser;
function Delete(
Const AName : string
):boolean;
End;
Function wst_CreateInstance_UserService(const AFormat : string = 'SOAP:'; const ATransport : string = 'HTTP:'):UserService;
Implementation
uses wst_resources_imp, metadata_repository;
Function wst_CreateInstance_UserService(const AFormat : string; const ATransport : string):UserService;
Begin
Result := TUserService_Proxy.Create('UserService',AFormat+GetServiceDefaultFormatProperties(TypeInfo(UserService)),ATransport + 'address=' + GetServiceDefaultAddress(TypeInfo(UserService)));
End;
{ TUserService_Proxy implementation }
class function TUserService_Proxy.GetServiceType() : PTypeInfo;
begin
result := TypeInfo(UserService);
end;
function TUserService_Proxy.GetList():TUserArray;
Var
locSerializer : IFormatterClient;
strPrmName : string;
Begin
locSerializer := GetSerializer();
Try
locSerializer.BeginCall('GetList', GetTarget(),(Self as ICallContext));
locSerializer.EndCall();
MakeCall();
locSerializer.BeginCallRead((Self as ICallContext));
TObject(Result) := Nil;
strPrmName := 'result';
locSerializer.Get(TypeInfo(TUserArray), strPrmName, Result);
Finally
locSerializer.Clear();
End;
End;
procedure TUserService_Proxy.Add(
Const AUser : TUser
);
Var
locSerializer : IFormatterClient;
strPrmName : string;
Begin
locSerializer := GetSerializer();
Try
locSerializer.BeginCall('Add', GetTarget(),(Self as ICallContext));
locSerializer.Put('AUser', TypeInfo(TUser), AUser);
locSerializer.EndCall();
MakeCall();
locSerializer.BeginCallRead((Self as ICallContext));
Finally
locSerializer.Clear();
End;
End;
procedure TUserService_Proxy.Update(
Const AUser : TUser
);
Var
locSerializer : IFormatterClient;
strPrmName : string;
Begin
locSerializer := GetSerializer();
Try
locSerializer.BeginCall('Update', GetTarget(),(Self as ICallContext));
locSerializer.Put('AUser', TypeInfo(TUser), AUser);
locSerializer.EndCall();
MakeCall();
locSerializer.BeginCallRead((Self as ICallContext));
Finally
locSerializer.Clear();
End;
End;
function TUserService_Proxy.Find(
Const AName : string
):TUser;
Var
locSerializer : IFormatterClient;
strPrmName : string;
Begin
locSerializer := GetSerializer();
Try
locSerializer.BeginCall('Find', GetTarget(),(Self as ICallContext));
locSerializer.Put('AName', TypeInfo(string), AName);
locSerializer.EndCall();
MakeCall();
locSerializer.BeginCallRead((Self as ICallContext));
TObject(Result) := Nil;
strPrmName := 'result';
locSerializer.Get(TypeInfo(TUser), strPrmName, Result);
Finally
locSerializer.Clear();
End;
End;
function TUserService_Proxy.Delete(
Const AName : string
):boolean;
Var
locSerializer : IFormatterClient;
strPrmName : string;
Begin
locSerializer := GetSerializer();
Try
locSerializer.BeginCall('Delete', GetTarget(),(Self as ICallContext));
locSerializer.Put('AName', TypeInfo(string), AName);
locSerializer.EndCall();
MakeCall();
locSerializer.BeginCallRead((Self as ICallContext));
strPrmName := 'result';
locSerializer.Get(TypeInfo(boolean), strPrmName, Result);
Finally
locSerializer.Clear();
End;
End;
initialization
{$i user_service_intf.wst}
{$IF DECLARED(Register_user_service_intf_ServiceMetadata)}
Register_user_service_intf_ServiceMetadata();
{$ENDIF}
End.

View File

@ -12,7 +12,7 @@
}
unit server_binary_formatter;
{$mode objfpc}{$H+}
{$INCLUDE wst.inc}
interface

View File

@ -13,7 +13,7 @@
unit server_service_intf;
{$mode objfpc}{$H+}
{$INCLUDE wst.inc}
interface

View File

@ -12,7 +12,7 @@
}
unit server_service_soap;
{$mode objfpc}{$H+}
{$INCLUDE wst.inc}
interface

View File

@ -14,7 +14,7 @@
{ Base service interface }
unit service_intf;
{$mode objfpc}{$H+}
{$INCLUDE wst.inc}
interface
@ -109,13 +109,13 @@ Type
constructor Create(
Const ATarget : String; // the target service
Const AProtocol : IServiceProtocol
);virtual;
);overload;virtual;
(* A User friendly constructor *)
constructor Create(
Const ATarget : String;
Const AProtocolData : string;
Const ATransportData : string
);virtual;
);overload;virtual;
destructor Destroy();override;
End;
@ -141,7 +141,7 @@ Type
):Boolean;
procedure Register(
const ATransportName : string;
const AFactory : IItemFactory
AFactory : IItemFactory
);
End;
@ -168,8 +168,8 @@ begin
sd := mm.GetServiceMetadata(GetTypeData(GetServiceType())^.IntfUnit,GetServiceType()^.Name);
try
Assert(Assigned(sd));
opd := sd^.Operations;
for i := 0 to Pred(sd^.OperationsCount) do begin
opd := @(sd^.Operations[i]);
strFormatBuffer := '';
strTransportBuffer := '';
pd := opd^.Properties;
@ -194,6 +194,7 @@ begin
Delete(strTransportBuffer,Length(strTransportBuffer),1);
FOperationsProperties.Values[opd^.Name + '_' + sTRANSPORT] := strTransportBuffer;
end;
Inc(opd);
end;
finally
mm.ClearServiceMetadata(sd);

View File

@ -12,7 +12,7 @@
}
unit synapse_http_protocol;
{$mode objfpc}{$H+}
{$INCLUDE wst.inc}
//{$DEFINE WST_DBG}
interface

View File

@ -0,0 +1,148 @@
{
This file is part of the Web Service Toolkit
Copyright (c) 2006 by Inoussa OUEDRAOGO
This file is provide under modified LGPL licence
( the files COPYING.modifiedLGPL and COPYING.LGPL).
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
}
unit synapse_tcp_protocol;
{$INCLUDE wst.inc}
interface
uses
Classes, SysUtils,
service_intf, imp_utils, base_service_intf,
blcksock;
Const
sTRANSPORT_NAME = 'TCP';
Type
ETCPException = class(EServiceException)
End;
{$M+}
{ TTCPTransport }
TTCPTransport = class(TSimpleFactoryItem,ITransport)
Private
FPropMngr : IPropertyManager;
FConnection : TTCPBlockSocket;
FContentType : string;
FTarget: string;
FAddress : string;
FPort : string;
FDefaultTimeOut: Integer;
public
constructor Create();override;
destructor Destroy();override;
function GetPropertyManager():IPropertyManager;
procedure SendAndReceive(ARequest,AResponse:TStream);
Published
property Target : string Read FTarget Write FTarget;
property ContentType : string Read FContentType Write FContentType;
property Address : string Read FAddress Write FAddress;
property Port : string Read FPort Write FPort;
property DefaultTimeOut : Integer read FDefaultTimeOut write FDefaultTimeOut;
End;
{$M+}
procedure SYNAPSE_RegisterTCP_Transport();
implementation
uses binary_streamer, Math;
{ TTCPTransport }
constructor TTCPTransport.Create();
begin
FPropMngr := TPublishedPropertyManager.Create(Self);
FConnection := TTCPBlockSocket.Create();
FConnection.RaiseExcept := True;
FDefaultTimeOut := 90000;
end;
destructor TTCPTransport.Destroy();
begin
FreeAndNil(FConnection);
FPropMngr := Nil;
inherited Destroy();
end;
function TTCPTransport.GetPropertyManager(): IPropertyManager;
begin
Result := FPropMngr;
end;
procedure TTCPTransport.SendAndReceive(ARequest, AResponse: TStream);
Var
wrtr : IDataStore;
buffStream : TMemoryStream;
strBuff : string;
bufferLen : LongInt;
i, j, c : PtrInt;
{$IFDEF WST_DBG}
s : string;
{$ENDIF WST_DBG}
begin
buffStream := TMemoryStream.Create();
Try
wrtr := CreateBinaryWriter(buffStream);
wrtr.WriteInt32S(0);
wrtr.WriteStr(Target);
wrtr.WriteStr(ContentType);
SetLength(strBuff,ARequest.Size);
ARequest.Position := 0;
ARequest.Read(strBuff[1],Length(strBuff));
wrtr.WriteStr(strBuff);
buffStream.Position := 0;
wrtr.WriteInt32S(buffStream.Size-4);
if ( FConnection.Socket = NOT(0) ) then
FConnection.Connect(Address,Port);
FConnection.SendBuffer(buffStream.Memory,buffStream.Size);
bufferLen := 0;
FConnection.RecvBufferEx(@bufferLen,SizeOf(bufferLen),DefaultTimeOut);
FConnection.ExceptCheck();
bufferLen := Reverse_32(bufferLen);
AResponse.Size := bufferLen;
if ( bufferLen > 0 ) then begin
c := 0;
i := 1024;
if ( i > bufferLen ) then
i := bufferLen;
SetLength(strBuff,i);
repeat
j := FConnection.RecvBufferEx(@(strBuff[1]),i,DefaultTimeOut);
FConnection.ExceptCheck();
AResponse.Write(strBuff[1],j);
Inc(c,j);
i := Min(1024,(bufferLen-c));
until ( i =0 ) or ( j <= 0 );
end;
AResponse.Position := 0;
{$IFDEF WST_DBG}
i := AResponse.Position;
SetLength(s,AResponse.Size);
AResponse.Read(s[1],AResponse.Size);
WriteLn(s);
{$ENDIF WST_DBG}
Finally
buffStream.Free();
End;
end;
procedure SYNAPSE_RegisterTCP_Transport();
begin
GetTransportRegistry().Register(sTRANSPORT_NAME,TSimpleItemFactory.Create(TTCPTransport) as IItemFactory);
end;
end.

View File

@ -0,0 +1,257 @@
{
This file is part of the Web Service Toolkit
Copyright (c) 2006 by Inoussa OUEDRAOGO
This file is provide under modified LGPL licence
( the files COPYING.modifiedLGPL and COPYING.LGPL).
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
}
unit synapse_tcp_server;
{$INCLUDE wst.inc}
interface
uses
Classes, SysUtils, blcksock, synsock;
const
sSERVER_PORT = '1234';
type
ILogger = interface
['{CA357B9A-604F-4603-96FA-65D445837E80}']
procedure Log(const AMsg : string);overload;
procedure Log(const AMsg : string;const AArgs : array of const);overload;
end;
{ TClientHandlerThread }
TClientHandlerThread = class(TThread)
private
FDefaultTimeOut: Integer;
FSocketObject : TTCPBlockSocket;
FSocketHandle : TSocket;
FInputStream : TMemoryStream;
FOutputStream : TMemoryStream;
private
procedure ClearBuffers();
function ReadInputBuffer():Integer;
procedure SendOutputBuffer();
public
constructor Create (ASocketHandle : TSocket);
destructor Destroy();override;
procedure Execute(); override;
property DefaultTimeOut : Integer read FDefaultTimeOut write FDefaultTimeOut;
end;
{ TServerListnerThread }
TServerListnerThread = class(TThread)
private
FDefaultTimeOut: Integer;
FSocketObject : TTCPBlockSocket;
public
constructor Create();
destructor Destroy(); override;
procedure Execute(); override;
property DefaultTimeOut : Integer read FDefaultTimeOut write FDefaultTimeOut;
end;
{ TConsoleLogger }
TConsoleLogger = class(TInterfacedObject,IInterface,ILogger)
protected
procedure Log(const AMsg : string);overload;
procedure Log(const AMsg : string;const AArgs : array of const);overload;
end;
function Logger():ILogger ;
function SetLogger(ALogger : ILogger):ILogger ;
implementation
uses binary_streamer, server_service_intf, server_service_imputils;
var FLoggerInst : ILogger = nil;
function SetLogger(ALogger : ILogger):ILogger ;
begin
Result := FLoggerInst;
FLoggerInst := ALogger;
end;
function Logger():ILogger ;
begin
Result := FLoggerInst;
end;
{ TConsoleLogger }
procedure TConsoleLogger.Log(const AMsg: string);
begin
WriteLn(AMsg);
end;
procedure TConsoleLogger.Log(const AMsg: string; const AArgs: array of const);
begin
WriteLn(Format(AMsg,AArgs));
end;
{ TClientHandlerThread }
procedure TClientHandlerThread.ClearBuffers();
begin
FInputStream.Size := 0;
FOutputStream.Size := 0;
end;
function TClientHandlerThread.ReadInputBuffer(): Integer;
var
strBuff : string;
bufferLen : LongInt;
i, j, c : PtrInt;
begin
FInputStream.Size := 0;
Result := 0;
bufferLen := 0;
FSocketObject.RecvBufferEx(@bufferLen,SizeOf(bufferLen),DefaultTimeOut);
FSocketObject.ExceptCheck();
bufferLen := Reverse_32(bufferLen);
FInputStream.Size := bufferLen;
if ( bufferLen > 0 ) then begin
c := 0;
i := 1024;
if ( i > bufferLen ) then
i := bufferLen;
SetLength(strBuff,i);
repeat
j := FSocketObject.RecvBufferEx(@(strBuff[1]),i,DefaultTimeOut);
FSocketObject.ExceptCheck();
FInputStream.Write(strBuff[1],j);
Inc(c,j);
if ( ( bufferLen - c ) > 1024 ) then
i := 1024
else
i := bufferLen - c;
until ( i = 0 ) or ( j <= 0 );
end;
FInputStream.Position := 0;
Result := FInputStream.Size;
end;
procedure TClientHandlerThread.SendOutputBuffer();
begin
FSocketObject.SendBuffer(FOutputStream.Memory,FOutputStream.Size);
end;
constructor TClientHandlerThread.Create(ASocketHandle: TSocket);
begin
FSocketHandle := ASocketHandle;
FreeOnTerminate := True;
FDefaultTimeOut := 90000;
inherited Create(False);
end;
destructor TClientHandlerThread.Destroy();
begin
FreeAndNil(FOutputStream);
FreeAndNil(FInputStream);
inherited Destroy();
end;
procedure TClientHandlerThread.Execute();
var
wrtr : IDataStore;
rdr : IDataStoreReader;
buff, trgt,ctntyp : string;
rqst : IRequestBuffer;
i : PtrUInt;
begin
FInputStream := TMemoryStream.Create();
FOutputStream := TMemoryStream.Create();
FSocketObject := TTCPBlockSocket.Create();
try
FSocketObject.RaiseExcept := True;
try
FSocketObject.Socket := FSocketHandle;
FSocketObject.GetSins();
while not Terminated do begin
FOutputStream.Size := 0;
if ( ReadInputBuffer() >= SizeOf(LongInt) ) then begin
rdr := CreateBinaryReader(FInputStream);
trgt := rdr.ReadStr();
ctntyp := rdr.ReadStr();
buff := rdr.ReadStr();
rdr := nil;
FInputStream.Size := 0;
FInputStream.Write(buff[1],Length(buff));
FInputStream.Position := 0;
rqst := TRequestBuffer.Create(trgt,ctntyp,FInputStream,FOutputStream);
HandleServiceRequest(rqst);
i := FOutputStream.Size;
SetLength(buff,i);
FOutputStream.Position := 0;
FOutputStream.Read(buff[1],i);
FOutputStream.Size := 0;
wrtr := CreateBinaryWriter(FOutputStream);
wrtr.WriteStr(buff);
SendOutputBuffer();
ClearBuffers();
end;
end;
except
on e : Exception do begin
Logger().Log('Error : ThreadID = %d; Message = %s',[Self.ThreadID,e.Message]);
end;
end;
finally
FreeAndNil(FSocketObject);
end;
end;
{ TServerListnerThread }
constructor TServerListnerThread.Create();
begin
FSocketObject := TTCPBlockSocket.Create();
FreeOnTerminate := True;
FDefaultTimeOut := 1000;
inherited Create(false);
end;
destructor TServerListnerThread.Destroy();
begin
FreeAndNil(FSocketObject);
inherited Destroy();
end;
procedure TServerListnerThread.Execute();
var
ClientSock : TSocket;
begin
try
FSocketObject.RaiseExcept := True;
FSocketObject.CreateSocket();
FSocketObject.SetLinger(True,10);
FSocketObject.Bind('0.0.0.0',sSERVER_PORT);
FSocketObject.Listen();
while not Terminated do begin
if FSocketObject.CanRead(DefaultTimeOut) then begin
ClientSock := FSocketObject.Accept();
TClientHandlerThread.Create(ClientSock);
end;
end;
except
on e : Exception do begin
Logger().Log('Listner Thread Error : ThreadID = %d; Message = %s',[Self.ThreadID,e.Message]);
Logger().Log('Listner stoped.');
end;
end;
end;
end.

View File

@ -1,6 +1,13 @@
unit calculator;
{$mode objfpc}{$H+}
{$IFDEF FPC}
{$mode objfpc}{$H+}
{$DEFINE HAS_QWORD}
{$DEFINE USE_INLINE}
{$ELSE}
{$UNDEF HAS_QWORD}
{$UNDEF USE_INLINE}
{$ENDIF}
interface
uses SysUtils,

View File

@ -59,7 +59,7 @@ begin
try
if not Assigned(FObj) then
FObj := TCalculator_Proxy.Create(
'Calculator', // Target
'ICalculator', // Target
edtFormat.Text,//'SOAP',//'binary', // Protocol Data
edtAddress.Text
//'http:Address=http://127.0.0.1:8000/services/ICalculator'
@ -126,7 +126,7 @@ end;
procedure Tfmain.FormCreate(Sender: TObject);
begin
FObj := Nil;
//ICS_RegisterTCP_Transport();
ICS_RegisterTCP_Transport();
ICS_RegisterHTTP_Transport();
LIB_Register_Transport();
//SYNAPSE_RegisterHTTP_Transport();

View File

@ -7,7 +7,7 @@
<MainUnit Value="0"/>
<IconPath Value="./"/>
<TargetFileExt Value=".exe"/>
<ActiveEditorIndexAtStart Value="3"/>
<ActiveEditorIndexAtStart Value="0"/>
</General>
<PublishOptions>
<Version Value="2"/>
@ -41,8 +41,8 @@
<IsPartOfProject Value="True"/>
<ResourceFilename Value="main_unit.lrs"/>
<UnitName Value="main_unit"/>
<CursorPos X="40" Y="42"/>
<TopLine Value="25"/>
<CursorPos X="3" Y="129"/>
<TopLine Value="109"/>
<EditorIndex Value="0"/>
<UsageCount Value="82"/>
<Loaded Value="True"/>
@ -60,8 +60,8 @@
<IsPartOfProject Value="True"/>
<UnitName Value="calculator_proxy"/>
<CursorPos X="20" Y="39"/>
<TopLine Value="25"/>
<EditorIndex Value="4"/>
<TopLine Value="1"/>
<EditorIndex Value="3"/>
<UsageCount Value="82"/>
<Loaded Value="True"/>
</Unit3>
@ -318,78 +318,16 @@
<Unit40>
<Filename Value="..\..\..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\xml\dom.pp"/>
<UnitName Value="DOM"/>
<CursorPos X="32" Y="210"/>
<CursorPos X="40" Y="373"/>
<TopLine Value="356"/>
<EditorIndex Value="3"/>
<UsageCount Value="11"/>
<Loaded Value="True"/>
</Unit40>
</Units>
<JumpHistory Count="16" HistoryIndex="15">
<JumpHistory Count="1" HistoryIndex="0">
<Position1>
<Filename Value="main_unit.pas"/>
<Caret Line="42" Column="40" TopLine="25"/>
</Position1>
<Position2>
<Filename Value="..\..\..\soap_formatter.pas"/>
<Caret Line="20" Column="33" TopLine="4"/>
</Position2>
<Position3>
<Filename Value="..\..\..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\xml\dom.pp"/>
<Caret Line="1" Column="1" TopLine="1"/>
</Position3>
<Position4>
<Filename Value="..\..\..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\xml\dom.pp"/>
<Caret Line="63" Column="20" TopLine="49"/>
</Position4>
<Position5>
<Filename Value="..\..\..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\xml\dom.pp"/>
<Caret Line="78" Column="5" TopLine="64"/>
</Position5>
<Position6>
<Filename Value="..\..\..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\xml\dom.pp"/>
<Caret Line="84" Column="51" TopLine="70"/>
</Position6>
<Position7>
<Filename Value="..\..\..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\xml\dom.pp"/>
<Caret Line="88" Column="98" TopLine="74"/>
</Position7>
<Position8>
<Filename Value="..\..\..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\xml\dom.pp"/>
<Caret Line="106" Column="44" TopLine="92"/>
</Position8>
<Position9>
<Filename Value="..\..\..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\xml\dom.pp"/>
<Caret Line="112" Column="28" TopLine="98"/>
</Position9>
<Position10>
<Filename Value="..\..\..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\xml\dom.pp"/>
<Caret Line="117" Column="9" TopLine="103"/>
</Position10>
<Position11>
<Filename Value="..\..\..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\xml\dom.pp"/>
<Caret Line="179" Column="28" TopLine="151"/>
</Position11>
<Position12>
<Filename Value="..\..\..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\xml\dom.pp"/>
<Caret Line="193" Column="9" TopLine="177"/>
</Position12>
<Position13>
<Filename Value="..\..\..\soap_formatter.pas"/>
<Caret Line="21" Column="53" TopLine="4"/>
</Position13>
<Position14>
<Filename Value="..\..\..\soap_formatter.pas"/>
<Caret Line="125" Column="24" TopLine="115"/>
</Position14>
<Position15>
<Filename Value="..\..\..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\xml\dom.pp"/>
<Caret Line="1266" Column="20" TopLine="1264"/>
</Position15>
<Position16>
<Filename Value="..\..\..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\xml\dom.pp"/>
<Caret Line="975" Column="24" TopLine="962"/>
</Position16>
</JumpHistory>
</ProjectOptions>
<CompilerOptions>
@ -422,7 +360,7 @@
</Other>
</CompilerOptions>
<Debugging>
<BreakPoints Count="6">
<BreakPoints Count="5">
<Item1>
<Source Value="..\..\..\..\home\inoussa\Projets\Laz\tests\soap\test_soap.pas"/>
<Line Value="15"/>
@ -443,10 +381,6 @@
<Source Value="..\..\..\..\basic_binder.pas"/>
<Line Value="62"/>
</Item5>
<Item6>
<Source Value="main_unit.pas"/>
<Line Value="54"/>
</Item6>
</BreakPoints>
<Watches Count="1">
<Item1>

View File

@ -0,0 +1,43 @@
-$A8
-$B-
-$C+
-$D+
-$E-
-$F-
-$G+
-$H+
-$I+
-$J-
-$K-
-$L+
-$M-
-$N+
-$O+
-$P+
-$Q-
-$R-
-$S-
-$T-
-$U-
-$V+
-$W-
-$X+
-$YD
-$Z1
-cg
-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
-H+
-W+
-M
-$M16384,1048576
-K$00400000
-N"obj"
-LE"c:\program files\borland\delphi7\Projects\Bpl"
-LN"c:\program files\borland\delphi7\Projects\Bpl"
-U"C:\Programmes\lazarus\wst;C:\lazarusClean\others_package\ics\latest_distr\Delphi\Vc32;C:\Programmes\lazarus\wst\tests\calculator;C:\lazarusClean\others_package\synapse"
-O"C:\Programmes\lazarus\wst;C:\lazarusClean\others_package\ics\latest_distr\Delphi\Vc32;C:\Programmes\lazarus\wst\tests\calculator;C:\lazarusClean\others_package\synapse"
-I"C:\Programmes\lazarus\wst;C:\lazarusClean\others_package\ics\latest_distr\Delphi\Vc32;C:\Programmes\lazarus\wst\tests\calculator;C:\lazarusClean\others_package\synapse"
-R"C:\Programmes\lazarus\wst;C:\lazarusClean\others_package\ics\latest_distr\Delphi\Vc32;C:\Programmes\lazarus\wst\tests\calculator;C:\lazarusClean\others_package\synapse"
-w-UNSAFE_TYPE
-w-UNSAFE_CODE
-w-UNSAFE_CAST

View File

@ -0,0 +1,157 @@
[FileVersion]
Version=7.0
[Compiler]
A=8
B=0
C=1
D=1
E=0
F=0
G=1
H=1
I=1
J=0
K=0
L=1
M=0
N=1
O=1
P=1
Q=0
R=0
S=0
T=0
U=0
V=1
W=0
X=1
Y=1
Z=1
ShowHints=1
ShowWarnings=1
UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
NamespacePrefix=
SymbolDeprecated=1
SymbolLibrary=1
SymbolPlatform=1
UnitLibrary=1
UnitPlatform=1
UnitDeprecated=1
HResultCompat=1
HidingMember=1
HiddenVirtual=1
Garbage=1
BoundsError=1
ZeroNilCompat=1
StringConstTruncated=1
ForLoopVarVarPar=1
TypedConstVarPar=1
AsgToTypedConst=1
CaseLabelRange=1
ForVariable=1
ConstructingAbstract=1
ComparisonFalse=1
ComparisonTrue=1
ComparingSignedUnsigned=1
CombiningSignedUnsigned=1
UnsupportedConstruct=1
FileOpen=1
FileOpenUnitSrc=1
BadGlobalSymbol=1
DuplicateConstructorDestructor=1
InvalidDirective=1
PackageNoLink=1
PackageThreadVar=1
ImplicitImport=1
HPPEMITIgnored=1
NoRetVal=1
UseBeforeDef=1
ForLoopVarUndef=1
UnitNameMismatch=1
NoCFGFileFound=1
MessageDirective=1
ImplicitVariants=1
UnicodeToLocale=1
LocaleToUnicode=1
ImagebaseMultiple=1
SuspiciousTypecast=1
PrivatePropAccessor=1
UnsafeType=0
UnsafeCode=0
UnsafeCast=0
[Linker]
MapFile=0
OutputObjs=0
ConsoleApp=1
DebugInfo=0
RemoteSymbols=0
MinStackSize=16384
MaxStackSize=1048576
ImageBase=4194304
ExeDescription=
[Directories]
OutputDir=
UnitOutputDir=obj
PackageDLLOutputDir=
PackageDCPOutputDir=
SearchPath=C:\Programmes\lazarus\wst;C:\lazarusClean\others_package\ics\latest_distr\Delphi\Vc32;C:\Programmes\lazarus\wst\tests\calculator;C:\lazarusClean\others_package\synapse
Packages=vcl;rtl;vclx;indy;inet;xmlrtl;vclie;inetdbbde;inetdbxpress;dbrtl;dsnap;dsnapcon;vcldb;soaprtl;VclSmp;dbexpress;dbxcds;inetdb;bdertl;vcldbx;webdsnap;websnap;adortl;ibxpress;teeui;teedb;tee;dss;visualclx;visualdbclx;vclactnband;vclshlctrls;IntrawebDB_50_70;Intraweb_50_70;Rave50CLX;Rave50VCL;dclOfficeXP;FIBDBMidas7;Jcl;JclVcl;JvCoreD7R;JvSystemD7R;JvStdCtrlsD7R;JvAppFrmD7R;JvBandsD7R;JvDBD7R;JvDlgsD7R;JvBDED7R;JvCmpD7R;JvCryptD7R;JvCtrlsD7R;JvCustomD7R;JvDockingD7R;JvDotNetCtrlsD7R;JvEDID7R;JvGlobusD7R;JvHMID7R;JvInterpreterD7R;JvJansD7R;JvManagedThreadsD7R;JvMMD7R;JvNetD7R;JvPageCompsD7R;JvPluginD7R;JvPrintPreviewD7R;JvRuntimeDesignD7R;JvTimeFrameworkD7R;JvUIBD7R;JvValidatorsD7R;JvWizardD7R;JvXPCtrlsD7R;dxForumLibD7;cxLibraryVCLD7;cxPageControlVCLD7;dxBarD7;dxComnD7;dxBarDBNavD7;dxBarExtItemsD7;dxBarExtDBItemsD7;dxsbD7;dxmdsD7;dxdbtrD7;dxtrmdD7;dxorgcD7;dxdborD7;dxEdtrD7;EQTLD7;ECQDBCD7;EQDBTLD7;EQGridD7;dxGrEdD7;dxExELD7;dxELibD7;cxEditorsVCLD7;cxGridVCLD7;dxThemeD7;cxDataD7;cxGridUtilsVCLD7;dxPSCoreD7;dxPsPrVwAdvD7;dxPSLnksD7;dxPSTeeChartD7;dxPSDBTeeChartD7;dxPSdxDBTVLnkD7;dxPSdxOCLnkD7;dxPSdxDBOCLnkD7;dxPScxGridLnkD7;dxPSTLLnkD7;qrpt
Conditionals=
DebugSourceDirs=
UsePackages=0
[Parameters]
RunParams=
HostApplication=
Launcher=
UseLauncher=0
DebugCWD=
[Language]
ActiveLang=
ProjectLang=
RootDir=C:\Program Files\Borland\Delphi7\Bin\
[Version Info]
IncludeVerInfo=0
AutoIncBuild=0
MajorVer=1
MinorVer=0
Release=0
Build=0
Debug=0
PreRelease=0
Special=0
Private=0
DLL=0
Locale=1036
CodePage=1252
[Version Info Keys]
CompanyName=
FileDescription=
FileVersion=1.0.0.0
InternalName=
LegalCopyright=
LegalTrademarks=
OriginalFilename=
ProductName=
ProductVersion=1.0.0.0
Comments=
[Excluded Packages]
C:\Program Files\Developer Express Inc\ExpressPrinting System\Delphi 7\Lib\dxPSdxDBTLLnkD7.bpl=ExpressPrinting System ReportLink for ExpressQuantumDBTreeList by Developer Express Inc.
C:\Program Files\Developer Express Inc\ExpressPrinting System\Delphi 7\Lib\dxPSdxDBGrLnkD7.bpl=ExpressPrinting System ReportLink for ExpressQuantumGrid by Developer Express Inc.
C:\Program Files\Developer Express Inc\ExpressPrinting System\Delphi 7\Lib\dxPSdxInsLnkD7.bpl=ExpressPrinting System ReportLink for ExpressInspector by Developer Express Inc.
C:\Program Files\Developer Express Inc\ExpressPrinting System\Delphi 7\Lib\dxPSdxOILnkD7.bpl=ExpressPrinting System ReportLink for ExpressRTTIInspector by Developer Express Inc.
C:\Program Files\Developer Express Inc\ExpressPrinting System\Delphi 7\Lib\dxPSdxMVLnkD7.bpl=ExpressPrinting System ReportLink for ExpressMasterView by Developer Express Inc.
C:\Program Files\Developer Express Inc\ExpressPrinting System\Delphi 7\Lib\dxPSdxFCLnkD7.bpl=ExpressPrinting System ReportLinks for ExpressFlowChart by Developer Express Inc.
C:\Program Files\Developer Express Inc\ExpressPrinting System\Delphi 7\Lib\dxPScxSSLnkD7.bpl=ExpressPrinting System ReportLink for ExpressSpreadSheet by Developer Express Inc.
[HistoryLists\hlUnitAliases]
Count=1
Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
[HistoryLists\hlSearchPath]
Count=5
Item0=C:\Programmes\lazarus\wst;C:\lazarusClean\others_package\ics\latest_distr\Delphi\Vc32;C:\Programmes\lazarus\wst\tests\calculator;C:\lazarusClean\others_package\synapse
Item1=C:\Programmes\lazarus\wst;C:\lazarusClean\others_package\ics\latest_distr\Delphi\Vc32;C:\Programmes\lazarus\wst\tests\calculator
Item2=C:\Programmes\lazarus\wst;C:\lazarusClean\others_package\ics\latest_distr\Delphi\Vc32
Item3=C:\Programmes\lazarus\wst
Item4=..\
[HistoryLists\hlUnitOutputDirectory]
Count=1
Item0=obj

View File

@ -0,0 +1,71 @@
program test_binary;
{$APPTYPE CONSOLE}
uses
SysUtils,
Classes,
base_service_intf,
service_intf,
base_binary_formatter,
binary_formatter,
//ics_tcp_protocol,
calculator,
calculator_proxy,
TypInfo,
synapse_http_protocol,
synapse_tcp_protocol;
Var
calcObj : ICalculator;
i, j, k : Integer;
rk : TBinaryArgsResult;
vA : TBinaryArgsResultArray;
msgProt, s : string;
begin
msgProt := 'binary';
Writeln('USED Msg protocol = ',msgProt);
//ICS_RegisterTCP_Transport();
SYNAPSE_RegisterTCP_Transport();
rk := nil;
Try
Try
calcObj := TCalculator_Proxy.Create(
'ICalculator', // Target
msgProt,//'SOAP',//'binary', // Protocol Data
'TCP:Address=127.0.0.1;Port=1234;target=ICalculator' // Transport Data
);
WriteLn('Calculator test.');
while True do begin
Write('Enter A = '); ReadLn(i);
Write('Enter B = '); ReadLn(j);
k := calcObj.DivInt(i,j);
Write(' A / B = '); WriteLn(k);
rk := calcObj.AddInt(i,j);
WriteLn(Format(' ( %d %s %d ) = %d',[rk.Arg_A, rk.Arg_OP, rk.Arg_B, rk.Arg_R]));
WriteLn('----------------------------------------------');
vA := calcObj.DoAllOperations(i,j);
Try
For i := 0 To Pred(vA.Length) Do
WriteLn(Format(' ( %d %s %d ) = %d; OP=%s',[vA[i].Arg_A, vA[i].Arg_OP, vA[i].Arg_B, vA[i].Arg_R,GetEnumName(TypeInfo(TCalc_Op),Ord(vA[i].Arg_OpEnum))]));
Finally
vA.Free();
End;
Write('Stop now Y/N: ');
Readln(s);
s := UpperCase(Trim(s));
if ( Length(s) > 0 ) and ( s[1] = 'Y' ) then
Break;
end;
Except
On E : Exception Do Begin
WriteLn('Oups:');
WriteLn(E.Message);
End;
End;
Finally
rk.Free();
End;
ReadLn;
end.

View File

@ -64,7 +64,9 @@ uses base_service_intf,
server_service_soap, server_binary_formatter,
metadata_repository, metadata_wsdl, DOM, XMLWrite,
calculator, calculator_binder, calculator_imp,
metadata_service, metadata_service_binder, metadata_service_imp;
metadata_service, metadata_service_binder, metadata_service_imp,
user_service_intf, user_service_intf_binder, user_service_intf_imp;
const
sSEPARATOR = '/';
@ -275,6 +277,9 @@ begin
FHTTPServerObject.ServerSoftware := 'Web Service Toolkit Sample WebServer';
FHTTPServerObject.Active := True;
FHTTPServerObject.OnCommandGet := @Handler_CommandGet;
Server_service_RegisterUserServiceService();
RegisterUserServiceImplementationFactory();
end;
destructor TwstWebApplication.Destroy();
@ -298,4 +303,7 @@ initialization
Server_service_RegisterWSTMetadataServiceService();
RegisterWSTMetadataServiceImplementationFactory();
end.

View File

@ -12,7 +12,7 @@
<MainUnit Value="0"/>
<IconPath Value="./"/>
<TargetFileExt Value=".exe"/>
<ActiveEditorIndexAtStart Value="3"/>
<ActiveEditorIndexAtStart Value="13"/>
</General>
<PublishOptions>
<Version Value="2"/>
@ -31,22 +31,24 @@
<PackageName Value="indylaz"/>
</Item1>
</RequiredPackages>
<Units Count="73">
<Units Count="83">
<Unit0>
<Filename Value="wst_http_server.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="wst_http_server"/>
<CursorPos X="30" Y="29"/>
<TopLine Value="13"/>
<CursorPos X="1" Y="40"/>
<TopLine Value="18"/>
<EditorIndex Value="13"/>
<UsageCount Value="202"/>
<Loaded Value="True"/>
</Unit0>
<Unit1>
<Filename Value="app_object.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="app_object"/>
<CursorPos X="1" Y="238"/>
<TopLine Value="224"/>
<EditorIndex Value="2"/>
<CursorPos X="43" Y="69"/>
<TopLine Value="50"/>
<EditorIndex Value="0"/>
<UsageCount Value="202"/>
<Loaded Value="True"/>
</Unit1>
@ -55,107 +57,107 @@
<UnitName Value="IdSocketHandle"/>
<CursorPos X="9" Y="126"/>
<TopLine Value="118"/>
<UsageCount Value="7"/>
<UsageCount Value="6"/>
</Unit2>
<Unit3>
<Filename Value="D:\Lazarus\others_package\indy\indy-10.2.0.1\fpc\System\IdComponent.pas"/>
<UnitName Value="IdComponent"/>
<CursorPos X="27" Y="64"/>
<TopLine Value="50"/>
<UsageCount Value="7"/>
<UsageCount Value="6"/>
</Unit3>
<Unit4>
<Filename Value="D:\Lazarus\others_package\indy\indy-10.2.0.1\fpc\System\IdCompilerDefines.inc"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<UsageCount Value="7"/>
<UsageCount Value="6"/>
</Unit4>
<Unit5>
<Filename Value="D:\Lazarus\others_package\indy\indy-10.2.0.1\fpc\Core\IdContext.pas"/>
<UnitName Value="IdContext"/>
<CursorPos X="3" Y="81"/>
<TopLine Value="70"/>
<UsageCount Value="5"/>
<UsageCount Value="4"/>
</Unit5>
<Unit6>
<Filename Value="D:\Lazarus\others_package\indy\indy-10.2.0.1\fpc\Protocols\IdCustomHTTPServer.pas"/>
<UnitName Value="IdCustomHTTPServer"/>
<CursorPos X="16" Y="167"/>
<TopLine Value="148"/>
<UsageCount Value="1"/>
<UsageCount Value="10"/>
</Unit6>
<Unit7>
<Filename Value="D:\Lazarus\others_package\indy\indy-10.2.0.1\fpc\Protocols\IdHTTPHeaderInfo.pas"/>
<UnitName Value="IdHTTPHeaderInfo"/>
<CursorPos X="25" Y="127"/>
<TopLine Value="99"/>
<UsageCount Value="1"/>
<UsageCount Value="10"/>
</Unit7>
<Unit8>
<Filename Value="D:\Lazarus\others_package\indy\indy-10.2.0.1\fpc\System\IdGlobal.pas"/>
<UnitName Value="IdGlobal"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<UsageCount Value="7"/>
<UsageCount Value="6"/>
</Unit8>
<Unit9>
<Filename Value="D:\Lazarus\others_package\indy\indy-10.2.0.1\fpc\System\IdBaseComponent.pas"/>
<UnitName Value="IdBaseComponent"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="69"/>
<UsageCount Value="7"/>
<UsageCount Value="6"/>
</Unit9>
<Unit10>
<Filename Value="D:\Lazarus\fpcsrc\rtl\win32\classes.pp"/>
<UnitName Value="Classes"/>
<CursorPos X="14" Y="35"/>
<TopLine Value="19"/>
<UsageCount Value="5"/>
<UsageCount Value="4"/>
</Unit10>
<Unit11>
<Filename Value="D:\Lazarus\fpcsrc\rtl\objpas\classes\classesh.inc"/>
<CursorPos X="14" Y="566"/>
<TopLine Value="554"/>
<UsageCount Value="5"/>
<UsageCount Value="4"/>
</Unit11>
<Unit12>
<Filename Value="D:\Lazarus\fpcsrc\rtl\objpas\classes\streams.inc"/>
<CursorPos X="7" Y="143"/>
<TopLine Value="118"/>
<UsageCount Value="5"/>
<UsageCount Value="4"/>
</Unit12>
<Unit13>
<Filename Value="D:\Lazarus\others_package\indy\indy-10.2.0.1\fpc\Protocols\IdResourceStringsProtocols.pas"/>
<UnitName Value="IdResourceStringsProtocols"/>
<CursorPos X="3" Y="900"/>
<TopLine Value="889"/>
<UsageCount Value="5"/>
<UsageCount Value="4"/>
</Unit13>
<Unit14>
<Filename Value="D:\Lazarus\others_package\indy\indy-10.2.0.1\fpc\Protocols\IdURI.pas"/>
<UnitName Value="IdURI"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="37"/>
<UsageCount Value="5"/>
<UsageCount Value="4"/>
</Unit14>
<Unit15>
<Filename Value="D:\Lazarus\fpcsrc\rtl\inc\wstringh.inc"/>
<CursorPos X="11" Y="30"/>
<TopLine Value="19"/>
<UsageCount Value="5"/>
<UsageCount Value="4"/>
</Unit15>
<Unit16>
<Filename Value="D:\Lazarus\fpcsrc\rtl\inc\wstrings.inc"/>
<CursorPos X="3" Y="938"/>
<TopLine Value="934"/>
<UsageCount Value="5"/>
<UsageCount Value="4"/>
</Unit16>
<Unit17>
<Filename Value="..\..\server_service_intf.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="server_service_intf"/>
<CursorPos X="56" Y="332"/>
<TopLine Value="319"/>
<CursorPos X="1" Y="511"/>
<TopLine Value="500"/>
<UsageCount Value="200"/>
<Bookmarks Count="2">
<Item0 X="28" Y="60" ID="0"/>
@ -166,12 +168,14 @@
<Filename Value="..\..\base_service_intf.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="base_service_intf"/>
<CursorPos X="75" Y="817"/>
<TopLine Value="811"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="82"/>
<EditorIndex Value="8"/>
<UsageCount Value="201"/>
<Bookmarks Count="1">
<Item0 X="52" Y="707" ID="1"/>
</Bookmarks>
<Loaded Value="True"/>
</Unit18>
<Unit19>
<Filename Value="..\..\server_service_imputils.pas"/>
@ -193,63 +197,67 @@
<Filename Value="..\..\server_service_soap.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="server_service_soap"/>
<CursorPos X="3" Y="160"/>
<TopLine Value="113"/>
<CursorPos X="14" Y="22"/>
<TopLine Value="13"/>
<EditorIndex Value="9"/>
<UsageCount Value="200"/>
<Loaded Value="True"/>
</Unit21>
<Unit22>
<Filename Value="..\tcp_server\calculator\calculator.pas"/>
<UnitName Value="calculator"/>
<CursorPos X="5" Y="84"/>
<TopLine Value="65"/>
<UsageCount Value="165"/>
<UsageCount Value="164"/>
</Unit22>
<Unit23>
<Filename Value="..\tcp_server\calculator\srv\calculator_imp.pas"/>
<UnitName Value="calculator_imp"/>
<CursorPos X="24" Y="18"/>
<TopLine Value="14"/>
<UsageCount Value="126"/>
<UsageCount Value="125"/>
</Unit23>
<Unit24>
<Filename Value="..\tcp_server\calculator\srv\calculator_binder.pas"/>
<UnitName Value="calculator_binder"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<UsageCount Value="165"/>
<UsageCount Value="164"/>
</Unit24>
<Unit25>
<Filename Value="..\..\base_binary_formatter.pas"/>
<UnitName Value="base_binary_formatter"/>
<CursorPos X="1" Y="925"/>
<TopLine Value="913"/>
<UsageCount Value="13"/>
<UsageCount Value="12"/>
</Unit25>
<Unit26>
<Filename Value="D:\Lazarus\lcl\lresources.pp"/>
<UnitName Value="LResources"/>
<CursorPos X="25" Y="272"/>
<TopLine Value="258"/>
<UsageCount Value="5"/>
<UsageCount Value="4"/>
</Unit26>
<Unit27>
<Filename Value="..\..\metadata_wsdl.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="metadata_wsdl"/>
<CursorPos X="39" Y="549"/>
<TopLine Value="537"/>
<CursorPos X="30" Y="410"/>
<TopLine Value="396"/>
<EditorIndex Value="2"/>
<UsageCount Value="201"/>
<Bookmarks Count="1">
<Item0 X="23" Y="440" ID="3"/>
<Item0 X="23" Y="458" ID="3"/>
</Bookmarks>
<Loaded Value="True"/>
</Unit27>
<Unit28>
<Filename Value="..\..\metadata_repository.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="metadata_repository"/>
<CursorPos X="1" Y="309"/>
<TopLine Value="247"/>
<EditorIndex Value="3"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="91"/>
<EditorIndex Value="1"/>
<UsageCount Value="201"/>
<Loaded Value="True"/>
</Unit28>
@ -258,179 +266,183 @@
<UnitName Value="DOM"/>
<CursorPos X="15" Y="475"/>
<TopLine Value="472"/>
<UsageCount Value="7"/>
<UsageCount Value="6"/>
</Unit29>
<Unit30>
<Filename Value="D:\Lazarus\fpcsrc\fcl\xml\xmlwrite.pp"/>
<UnitName Value="XMLWrite"/>
<CursorPos X="15" Y="74"/>
<TopLine Value="50"/>
<UsageCount Value="6"/>
<UsageCount Value="5"/>
</Unit30>
<Unit31>
<Filename Value="D:\Lazarus\fpcsrc\rtl\objpas\typinfo.pp"/>
<UnitName Value="typinfo"/>
<CursorPos X="7" Y="73"/>
<TopLine Value="96"/>
<UsageCount Value="12"/>
<UsageCount Value="11"/>
</Unit31>
<Unit32>
<Filename Value="..\..\base_soap_formatter.pas"/>
<UnitName Value="base_soap_formatter"/>
<CursorPos X="1" Y="249"/>
<TopLine Value="235"/>
<CursorPos X="21" Y="121"/>
<TopLine Value="109"/>
<EditorIndex Value="10"/>
<UsageCount Value="59"/>
<Loaded Value="True"/>
</Unit32>
<Unit33>
<Filename Value="D:\Lazarus\fpcsrc\rtl\inc\objpash.inc"/>
<CursorPos X="40" Y="165"/>
<TopLine Value="279"/>
<UsageCount Value="5"/>
<UsageCount Value="4"/>
</Unit33>
<Unit34>
<Filename Value="D:\Lazarus\fpcsrc\rtl\inc\objpas.inc"/>
<CursorPos X="11" Y="351"/>
<TopLine Value="345"/>
<UsageCount Value="3"/>
<UsageCount Value="2"/>
</Unit34>
<Unit35>
<Filename Value="D:\Lazarus\others_package\indy\indy-10.2.0.1\fpc\Protocols\IdHTTPServer.pas"/>
<UnitName Value="IdHTTPServer"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<UsageCount Value="9"/>
<UsageCount Value="8"/>
</Unit35>
<Unit36>
<Filename Value="D:\lazarusClean\lcl\lresources.pp"/>
<UnitName Value="LResources"/>
<CursorPos X="3" Y="934"/>
<TopLine Value="931"/>
<UsageCount Value="5"/>
<UsageCount Value="4"/>
</Unit36>
<Unit37>
<Filename Value="D:\Lazarus\others_package\indy\indy-10.2.0.1\fpc\System\IdSysVCL.pas"/>
<UnitName Value="IdSysVCL"/>
<CursorPos X="1" Y="176"/>
<TopLine Value="165"/>
<UsageCount Value="2"/>
<UsageCount Value="1"/>
</Unit37>
<Unit38>
<Filename Value="D:\Lazarus\others_package\indy\indy-10.2.0.1\fpc\System\IdStackBSDBase.pas"/>
<UnitName Value="IdStackBSDBase"/>
<CursorPos X="35" Y="456"/>
<TopLine Value="446"/>
<UsageCount Value="2"/>
<UsageCount Value="1"/>
</Unit38>
<Unit39>
<Filename Value="..\tcp_server\calculator\srv\calculator.lrs"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<UsageCount Value="1"/>
<UsageCount Value="10"/>
</Unit39>
<Unit40>
<Filename Value="D:\lazarusClean\fpcsrc\fcl\xml\xmlwrite.pp"/>
<UnitName Value="XMLWrite"/>
<CursorPos X="11" Y="28"/>
<TopLine Value="16"/>
<UsageCount Value="9"/>
<UsageCount Value="8"/>
</Unit40>
<Unit41>
<Filename Value="D:\lazarusClean\fpcsrc\rtl\objpas\classes\classesh.inc"/>
<CursorPos X="52" Y="298"/>
<TopLine Value="278"/>
<UsageCount Value="6"/>
<UsageCount Value="5"/>
</Unit41>
<Unit42>
<Filename Value="D:\lazarusClean\fpcsrc\rtl\objpas\classes\stringl.inc"/>
<CursorPos X="19" Y="636"/>
<TopLine Value="634"/>
<UsageCount Value="10"/>
<UsageCount Value="9"/>
</Unit42>
<Unit43>
<Filename Value="D:\lazarusClean\fpcsrc\rtl\objpas\sysutils\sysstrh.inc"/>
<CursorPos X="10" Y="80"/>
<TopLine Value="69"/>
<UsageCount Value="10"/>
<UsageCount Value="9"/>
</Unit43>
<Unit44>
<Filename Value="D:\lazarusClean\fpcsrc\rtl\objpas\sysutils\sysstr.inc"/>
<CursorPos X="37" Y="453"/>
<TopLine Value="451"/>
<UsageCount Value="10"/>
<UsageCount Value="9"/>
</Unit44>
<Unit45>
<Filename Value="D:\lazarusClean\fpcsrc\rtl\objpas\classes\lists.inc"/>
<CursorPos X="3" Y="370"/>
<TopLine Value="368"/>
<UsageCount Value="10"/>
<UsageCount Value="9"/>
</Unit45>
<Unit46>
<Filename Value="D:\lazarusClean\fpcsrc\rtl\objpas\objpas.pp"/>
<UnitName Value="objpas"/>
<CursorPos X="8" Y="26"/>
<TopLine Value="14"/>
<UsageCount Value="10"/>
<UsageCount Value="9"/>
</Unit46>
<Unit47>
<Filename Value="D:\lazarusClean\fpcsrc\rtl\objpas\typinfo.pp"/>
<UnitName Value="typinfo"/>
<CursorPos X="3" Y="741"/>
<TopLine Value="705"/>
<UsageCount Value="6"/>
<UsageCount Value="5"/>
</Unit47>
<Unit48>
<Filename Value="D:\lazarusClean\fpcsrc\rtl\inc\wstringh.inc"/>
<CursorPos X="5" Y="67"/>
<TopLine Value="42"/>
<UsageCount Value="10"/>
<UsageCount Value="9"/>
</Unit48>
<Unit49>
<Filename Value="D:\lazarusClean\fpcsrc\rtl\inc\wstrings.inc"/>
<CursorPos X="3" Y="825"/>
<TopLine Value="820"/>
<UsageCount Value="10"/>
<UsageCount Value="9"/>
</Unit49>
<Unit50>
<Filename Value="D:\lazarusClean\fpcsrc\rtl\win32\classes.pp"/>
<UnitName Value="Classes"/>
<CursorPos X="38" Y="2"/>
<TopLine Value="1"/>
<UsageCount Value="3"/>
<UsageCount Value="2"/>
</Unit50>
<Unit51>
<Filename Value="D:\lazarusClean\fpcsrc\rtl\objpas\classes\writer.inc"/>
<CursorPos X="3" Y="585"/>
<TopLine Value="579"/>
<UsageCount Value="1"/>
<UsageCount Value="10"/>
</Unit51>
<Unit52>
<Filename Value="D:\lazarusClean\fpcsrc\rtl\objpas\classes\compon.inc"/>
<CursorPos X="25" Y="367"/>
<TopLine Value="364"/>
<UsageCount Value="1"/>
<UsageCount Value="10"/>
</Unit52>
<Unit53>
<Filename Value="D:\lazarusClean\fpcsrc\fcl\xml\dom.pp"/>
<UnitName Value="DOM"/>
<CursorPos X="15" Y="269"/>
<TopLine Value="258"/>
<UsageCount Value="2"/>
<UsageCount Value="1"/>
</Unit53>
<Unit54>
<Filename Value="..\..\metadata_service.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="metadata_service"/>
<CursorPos X="25" Y="147"/>
<TopLine Value="145"/>
<UsageCount Value="187"/>
<CursorPos X="81" Y="121"/>
<TopLine Value="212"/>
<UsageCount Value="197"/>
</Unit54>
<Unit55>
<Filename Value="..\..\metadata_service_imp.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="metadata_service_imp"/>
<CursorPos X="63" Y="107"/>
<TopLine Value="86"/>
<UsageCount Value="186"/>
<CursorPos X="13" Y="8"/>
<TopLine Value="1"/>
<EditorIndex Value="3"/>
<UsageCount Value="196"/>
<Loaded Value="True"/>
</Unit55>
<Unit56>
<Filename Value="..\..\metadata_service_binder.pas"/>
@ -438,98 +450,98 @@
<UnitName Value="metadata_service_binder"/>
<CursorPos X="1" Y="53"/>
<TopLine Value="46"/>
<EditorIndex Value="1"/>
<UsageCount Value="186"/>
<Loaded Value="True"/>
<UsageCount Value="196"/>
</Unit56>
<Unit57>
<Filename Value="..\..\metadata_service.lrs"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<UsageCount Value="4"/>
<UsageCount Value="3"/>
</Unit57>
<Unit58>
<Filename Value="D:\lazarusClean\fpcsrc\rtl\objpas\classes\persist.inc"/>
<CursorPos X="3" Y="37"/>
<TopLine Value="117"/>
<UsageCount Value="6"/>
<UsageCount Value="5"/>
</Unit58>
<Unit59>
<Filename Value="D:\lazarusClean\fpcsrc\rtl\objpas\rtlconsts.pp"/>
<UnitName Value="RtlConsts"/>
<CursorPos X="7" Y="1"/>
<TopLine Value="1"/>
<UsageCount Value="6"/>
<UsageCount Value="5"/>
</Unit59>
<Unit60>
<Filename Value="D:\lazarusClean\fpcsrc\rtl\objpas\rtlconst.inc"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<UsageCount Value="6"/>
<UsageCount Value="5"/>
</Unit60>
<Unit61>
<Filename Value="..\calculator\srv\calculator_imp.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="calculator_imp"/>
<CursorPos X="40" Y="135"/>
<TopLine Value="111"/>
<EditorIndex Value="0"/>
<UsageCount Value="123"/>
<Loaded Value="True"/>
<CursorPos X="74" Y="12"/>
<TopLine Value="115"/>
<UsageCount Value="133"/>
</Unit61>
<Unit62>
<Filename Value="..\calculator\srv\calculator_binder.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="calculator_binder"/>
<CursorPos X="13" Y="31"/>
<TopLine Value="17"/>
<UsageCount Value="123"/>
<CursorPos X="16" Y="205"/>
<TopLine Value="165"/>
<EditorIndex Value="12"/>
<UsageCount Value="133"/>
<Loaded Value="True"/>
</Unit62>
<Unit63>
<Filename Value="..\calculator\calculator.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="calculator"/>
<CursorPos X="31" Y="98"/>
<TopLine Value="51"/>
<UsageCount Value="123"/>
<CursorPos X="44" Y="19"/>
<TopLine Value="79"/>
<EditorIndex Value="11"/>
<UsageCount Value="133"/>
<Loaded Value="True"/>
</Unit63>
<Unit64>
<Filename Value="D:\lazarusClean\fpcsrc\rtl\inc\heaph.inc"/>
<CursorPos X="10" Y="96"/>
<TopLine Value="83"/>
<UsageCount Value="10"/>
<UsageCount Value="9"/>
</Unit64>
<Unit65>
<Filename Value="..\..\imp_utils.pas"/>
<UnitName Value="imp_utils"/>
<CursorPos X="1" Y="55"/>
<TopLine Value="43"/>
<UsageCount Value="10"/>
<UsageCount Value="9"/>
</Unit65>
<Unit66>
<Filename Value="D:\Lazarus\fpcsrc\rtl\objpas\sysutils\intfh.inc"/>
<CursorPos X="10" Y="27"/>
<TopLine Value="9"/>
<UsageCount Value="4"/>
<UsageCount Value="3"/>
</Unit66>
<Unit67>
<Filename Value="D:\Lazarus\fpcsrc\rtl\win\sysutils.pp"/>
<UnitName Value="sysutils"/>
<CursorPos X="8" Y="33"/>
<TopLine Value="34"/>
<UsageCount Value="5"/>
<UsageCount Value="4"/>
</Unit67>
<Unit68>
<Filename Value="D:\Lazarus\fpcsrc\rtl\objpas\sysutils\sysutilh.inc"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="214"/>
<UsageCount Value="5"/>
<UsageCount Value="4"/>
</Unit68>
<Unit69>
<Filename Value="D:\Lazarus\fpcsrc\rtl\objpas\classes\stringl.inc"/>
<CursorPos X="3" Y="1063"/>
<TopLine Value="1060"/>
<UsageCount Value="5"/>
<UsageCount Value="4"/>
</Unit69>
<Unit70>
<Filename Value="..\calculator\srv\logger_extension.pas"/>
@ -537,80 +549,118 @@
<UnitName Value="logger_extension"/>
<CursorPos X="32" Y="11"/>
<TopLine Value="1"/>
<UsageCount Value="36"/>
<UsageCount Value="46"/>
</Unit70>
<Unit71>
<Filename Value="..\..\soap_formatter.pas"/>
<UnitName Value="soap_formatter"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<UsageCount Value="13"/>
<UsageCount Value="12"/>
</Unit71>
<Unit72>
<Filename Value="..\..\service_intf.pas"/>
<UnitName Value="service_intf"/>
<CursorPos X="58" Y="47"/>
<TopLine Value="34"/>
<UsageCount Value="13"/>
<UsageCount Value="12"/>
</Unit72>
<Unit73>
<Filename Value="user_service_intf_binder.pas"/>
<UnitName Value="user_service_intf_binder"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<EditorIndex Value="7"/>
<UsageCount Value="15"/>
<Loaded Value="True"/>
</Unit73>
<Unit74>
<Filename Value="user_service_intf_imp.pas"/>
<UnitName Value="user_service_intf_imp"/>
<CursorPos X="3" Y="56"/>
<TopLine Value="54"/>
<EditorIndex Value="6"/>
<UsageCount Value="15"/>
<Loaded Value="True"/>
</Unit74>
<Unit75>
<Filename Value="user_service_intf.wst"/>
<CursorPos X="56" Y="4"/>
<TopLine Value="1"/>
<UsageCount Value="11"/>
<SyntaxHighlighter Value="None"/>
</Unit75>
<Unit76>
<Filename Value="user_service_intf.pas"/>
<UnitName Value="user_service_intf"/>
<CursorPos X="21" Y="43"/>
<TopLine Value="33"/>
<EditorIndex Value="5"/>
<UsageCount Value="15"/>
<Loaded Value="True"/>
</Unit76>
<Unit77>
<Filename Value="..\calculator\srv\calculator.wst"/>
<CursorPos X="35" Y="6"/>
<TopLine Value="1"/>
<UsageCount Value="13"/>
<SyntaxHighlighter Value="None"/>
</Unit77>
<Unit78>
<Filename Value="..\..\wst_resources_imp.pas"/>
<UnitName Value="wst_resources_imp"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<EditorIndex Value="4"/>
<UsageCount Value="13"/>
<Loaded Value="True"/>
</Unit78>
<Unit79>
<Filename Value="..\..\wst.inc"/>
<CursorPos X="21" Y="6"/>
<TopLine Value="1"/>
<UsageCount Value="10"/>
</Unit79>
<Unit80>
<Filename Value="..\..\..\..\..\lazarus23_213\fpc\2.1.3\source\rtl\objpas\classes\classesh.inc"/>
<CursorPos X="14" Y="408"/>
<TopLine Value="396"/>
<UsageCount Value="10"/>
</Unit80>
<Unit81>
<Filename Value="..\..\..\..\..\lazarus23_213\fpc\2.1.3\source\rtl\objpas\sysutils\sysstrh.inc"/>
<CursorPos X="10" Y="77"/>
<TopLine Value="65"/>
<UsageCount Value="11"/>
</Unit81>
<Unit82>
<Filename Value="..\..\..\..\..\lazarus23_213\fpc\2.1.3\source\rtl\objpas\sysutils\sysstr.inc"/>
<CursorPos X="3" Y="185"/>
<TopLine Value="189"/>
<UsageCount Value="10"/>
</Unit82>
</Units>
<JumpHistory Count="14" HistoryIndex="13">
<JumpHistory Count="5" HistoryIndex="4">
<Position1>
<Filename Value="app_object.pas"/>
<Caret Line="238" Column="26" TopLine="224"/>
<Filename Value="..\..\metadata_wsdl.pas"/>
<Caret Line="369" Column="44" TopLine="358"/>
</Position1>
<Position2>
<Filename Value="app_object.pas"/>
<Caret Line="239" Column="1" TopLine="225"/>
<Filename Value="user_service_intf_imp.pas"/>
<Caret Line="70" Column="1" TopLine="29"/>
</Position2>
<Position3>
<Filename Value="app_object.pas"/>
<Caret Line="240" Column="1" TopLine="226"/>
<Filename Value="user_service_intf_imp.pas"/>
<Caret Line="23" Column="15" TopLine="12"/>
</Position3>
<Position4>
<Filename Value="app_object.pas"/>
<Caret Line="241" Column="1" TopLine="227"/>
<Filename Value="user_service_intf_imp.pas"/>
<Caret Line="21" Column="3" TopLine="17"/>
</Position4>
<Position5>
<Filename Value="app_object.pas"/>
<Caret Line="242" Column="1" TopLine="228"/>
<Filename Value="wst_http_server.pas"/>
<Caret Line="22" Column="24" TopLine="1"/>
</Position5>
<Position6>
<Filename Value="app_object.pas"/>
<Caret Line="243" Column="1" TopLine="229"/>
</Position6>
<Position7>
<Filename Value="app_object.pas"/>
<Caret Line="245" Column="1" TopLine="240"/>
</Position7>
<Position8>
<Filename Value="app_object.pas"/>
<Caret Line="246" Column="1" TopLine="232"/>
</Position8>
<Position9>
<Filename Value="app_object.pas"/>
<Caret Line="247" Column="36" TopLine="243"/>
</Position9>
<Position10>
<Filename Value="app_object.pas"/>
<Caret Line="1" Column="1" TopLine="1"/>
</Position10>
<Position11>
<Filename Value="app_object.pas"/>
<Caret Line="71" Column="20" TopLine="57"/>
</Position11>
<Position12>
<Filename Value="app_object.pas"/>
<Caret Line="247" Column="1" TopLine="233"/>
</Position12>
<Position13>
<Filename Value="app_object.pas"/>
<Caret Line="248" Column="1" TopLine="234"/>
</Position13>
<Position14>
<Filename Value="app_object.pas"/>
<Caret Line="238" Column="1" TopLine="224"/>
</Position14>
</JumpHistory>
</ProjectOptions>
<CompilerOptions>
@ -638,7 +688,7 @@
</Other>
</CompilerOptions>
<Debugging>
<BreakPoints Count="5">
<BreakPoints Count="4">
<Item1>
<Source Value="..\..\metadata_wsdl.pas"/>
<Line Value="459"/>
@ -652,13 +702,9 @@
<Line Value="431"/>
</Item3>
<Item4>
<Source Value="..\..\metadata_wsdl.pas"/>
<Line Value="181"/>
</Item4>
<Item5>
<Source Value="..\..\server_service_intf.pas"/>
<Line Value="630"/>
</Item5>
</Item4>
</BreakPoints>
<Exceptions Count="2">
<Item1>

View File

@ -7,7 +7,7 @@
<MainUnit Value="0"/>
<IconPath Value="./"/>
<TargetFileExt Value=".exe"/>
<ActiveEditorIndexAtStart Value="3"/>
<ActiveEditorIndexAtStart Value="8"/>
</General>
<PublishOptions>
<Version Value="2"/>
@ -26,15 +26,15 @@
<PackageName Value="LCL"/>
</Item1>
</RequiredPackages>
<Units Count="41">
<Units Count="42">
<Unit0>
<Filename Value="tcp_gui_server.lpr"/>
<IsPartOfProject Value="True"/>
<UnitName Value="tcp_gui_server"/>
<CursorPos X="1" Y="16"/>
<TopLine Value="1"/>
<EditorIndex Value="9"/>
<UsageCount Value="131"/>
<EditorIndex Value="10"/>
<UsageCount Value="132"/>
<Loaded Value="True"/>
</Unit0>
<Unit1>
@ -46,17 +46,17 @@
<CursorPos X="51" Y="90"/>
<TopLine Value="73"/>
<EditorIndex Value="0"/>
<UsageCount Value="131"/>
<UsageCount Value="132"/>
<Loaded Value="True"/>
</Unit1>
<Unit2>
<Filename Value="server_unit.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="server_unit"/>
<CursorPos X="48" Y="14"/>
<TopLine Value="243"/>
<EditorIndex Value="5"/>
<UsageCount Value="131"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<EditorIndex Value="6"/>
<UsageCount Value="132"/>
<Loaded Value="True"/>
</Unit2>
<Unit3>
@ -233,19 +233,19 @@
<Unit28>
<Filename Value="..\..\server_service_intf.pas"/>
<UnitName Value="server_service_intf"/>
<CursorPos X="1" Y="202"/>
<TopLine Value="195"/>
<EditorIndex Value="6"/>
<UsageCount Value="46"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<EditorIndex Value="7"/>
<UsageCount Value="47"/>
<Loaded Value="True"/>
</Unit28>
<Unit29>
<Filename Value="..\..\base_service_intf.pas"/>
<UnitName Value="base_service_intf"/>
<CursorPos X="46" Y="224"/>
<TopLine Value="235"/>
<CursorPos X="13" Y="965"/>
<TopLine Value="963"/>
<EditorIndex Value="4"/>
<UsageCount Value="40"/>
<UsageCount Value="41"/>
<Loaded Value="True"/>
</Unit29>
<Unit30>
@ -293,10 +293,10 @@
<Filename Value="..\calculator\calculator.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="calculator"/>
<CursorPos X="1" Y="1"/>
<CursorPos X="9" Y="10"/>
<TopLine Value="1"/>
<EditorIndex Value="7"/>
<UsageCount Value="24"/>
<EditorIndex Value="8"/>
<UsageCount Value="25"/>
<Loaded Value="True"/>
</Unit35>
<Unit36>
@ -305,8 +305,8 @@
<UnitName Value="calculator_imp"/>
<CursorPos X="48" Y="117"/>
<TopLine Value="110"/>
<EditorIndex Value="8"/>
<UsageCount Value="24"/>
<EditorIndex Value="9"/>
<UsageCount Value="25"/>
<Loaded Value="True"/>
</Unit36>
<Unit37>
@ -315,7 +315,7 @@
<UnitName Value="calculator_binder"/>
<CursorPos X="80" Y="174"/>
<TopLine Value="170"/>
<UsageCount Value="24"/>
<UsageCount Value="25"/>
</Unit37>
<Unit38>
<Filename Value="..\..\metadata_service.pas"/>
@ -323,7 +323,7 @@
<CursorPos X="36" Y="89"/>
<TopLine Value="114"/>
<EditorIndex Value="3"/>
<UsageCount Value="12"/>
<UsageCount Value="13"/>
<Loaded Value="True"/>
</Unit38>
<Unit39>
@ -332,71 +332,52 @@
<CursorPos X="62" Y="17"/>
<TopLine Value="1"/>
<EditorIndex Value="2"/>
<UsageCount Value="12"/>
<UsageCount Value="13"/>
<Loaded Value="True"/>
</Unit39>
<Unit40>
<Filename Value="..\..\metadata_service_binder.pas"/>
<UnitName Value="metadata_service_binder"/>
<CursorPos X="61" Y="29"/>
<TopLine Value="19"/>
<TopLine Value="10"/>
<EditorIndex Value="1"/>
<UsageCount Value="12"/>
<UsageCount Value="13"/>
<Loaded Value="True"/>
</Unit40>
<Unit41>
<Filename Value="..\..\wst.inc"/>
<IsPartOfProject Value="True"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<EditorIndex Value="5"/>
<UsageCount Value="20"/>
<Loaded Value="True"/>
</Unit41>
</Units>
<JumpHistory Count="11" HistoryIndex="10">
<JumpHistory Count="4" HistoryIndex="3">
<Position1>
<Filename Value="umain.pas"/>
<Caret Line="42" Column="60" TopLine="37"/>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1952" Column="32" TopLine="1939"/>
</Position1>
<Position2>
<Filename Value="tcp_gui_server.lpr"/>
<Caret Line="3" Column="25" TopLine="1"/>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1954" Column="8" TopLine="1939"/>
</Position2>
<Position3>
<Filename Value="..\..\metadata_service.pas"/>
<Caret Line="252" Column="23" TopLine="227"/>
<Filename Value="..\calculator\calculator.pas"/>
<Caret Line="1" Column="1" TopLine="1"/>
</Position3>
<Position4>
<Filename Value="..\..\metadata_service.pas"/>
<Caret Line="159" Column="23" TopLine="134"/>
<Filename Value="..\calculator\calculator.pas"/>
<Caret Line="3" Column="2" TopLine="1"/>
</Position4>
<Position5>
<Filename Value="..\..\metadata_service.pas"/>
<Caret Line="252" Column="23" TopLine="227"/>
</Position5>
<Position6>
<Filename Value="umain.pas"/>
<Caret Line="43" Column="38" TopLine="43"/>
</Position6>
<Position7>
<Filename Value="tcp_gui_server.lpr"/>
<Caret Line="16" Column="1" TopLine="1"/>
</Position7>
<Position8>
<Filename Value="..\..\metadata_service_imp.pas"/>
<Caret Line="17" Column="62" TopLine="1"/>
</Position8>
<Position9>
<Filename Value="umain.pas"/>
<Caret Line="43" Column="53" TopLine="24"/>
</Position9>
<Position10>
<Filename Value="umain.pas"/>
<Caret Line="31" Column="15" TopLine="24"/>
</Position10>
<Position11>
<Filename Value="..\..\metadata_service.pas"/>
<Caret Line="89" Column="36" TopLine="80"/>
</Position11>
</JumpHistory>
</ProjectOptions>
<CompilerOptions>
<Version Value="5"/>
<PathDelim Value="\"/>
<SearchPaths>
<OtherUnitFiles Value="c:\LazarusClean\others_package\ics\latest_distr\Delphi\Vc32\;..\calculator\;..\calculator\srv\;..\..\"/>
<OtherUnitFiles Value="c:\LazarusClean\others_package\ics\latest_distr\Delphi\Vc32\;..\calculator\;..\calculator\srv\;..\..\;..\"/>
<UnitOutputDirectory Value="obj"/>
<SrcPath Value="$(LazarusDir)\lcl\;$(LazarusDir)\lcl\interfaces\$(LCLWidgetType)\"/>
</SearchPaths>

View File

@ -7,7 +7,7 @@
<MainUnit Value="0"/>
<IconPath Value="./"/>
<TargetFileExt Value=".exe"/>
<ActiveEditorIndexAtStart Value="0"/>
<ActiveEditorIndexAtStart Value="11"/>
</General>
<PublishOptions>
<Version Value="2"/>
@ -27,7 +27,7 @@
<PackageName Value="FPCUnitTestRunner"/>
</Item1>
</RequiredPackages>
<Units Count="38">
<Units Count="42">
<Unit0>
<Filename Value="wst_test_suite.lpr"/>
<IsPartOfProject Value="True"/>
@ -40,9 +40,9 @@
<Filename Value="testformatter_unit.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="testformatter_unit"/>
<CursorPos X="30" Y="1693"/>
<TopLine Value="1662"/>
<EditorIndex Value="8"/>
<CursorPos X="38" Y="1359"/>
<TopLine Value="1348"/>
<EditorIndex Value="11"/>
<UsageCount Value="200"/>
<Loaded Value="True"/>
</Unit1>
@ -50,9 +50,9 @@
<Filename Value="..\..\server_service_soap.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="server_service_soap"/>
<CursorPos X="34" Y="126"/>
<TopLine Value="109"/>
<EditorIndex Value="4"/>
<CursorPos X="38" Y="29"/>
<TopLine Value="18"/>
<EditorIndex Value="7"/>
<UsageCount Value="200"/>
<Loaded Value="True"/>
</Unit2>
@ -62,7 +62,7 @@
<UnitName Value="soap_formatter"/>
<CursorPos X="34" Y="145"/>
<TopLine Value="125"/>
<EditorIndex Value="5"/>
<EditorIndex Value="8"/>
<UsageCount Value="200"/>
<Loaded Value="True"/>
</Unit3>
@ -70,9 +70,9 @@
<Filename Value="..\..\base_binary_formatter.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="base_binary_formatter"/>
<CursorPos X="14" Y="279"/>
<TopLine Value="268"/>
<EditorIndex Value="2"/>
<CursorPos X="26" Y="1573"/>
<TopLine Value="1562"/>
<EditorIndex Value="4"/>
<UsageCount Value="200"/>
<Loaded Value="True"/>
</Unit4>
@ -81,7 +81,7 @@
<IsPartOfProject Value="True"/>
<UnitName Value="base_service_intf"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="28"/>
<TopLine Value="1"/>
<EditorIndex Value="0"/>
<UsageCount Value="200"/>
<Bookmarks Count="2">
@ -94,9 +94,9 @@
<Filename Value="..\..\base_soap_formatter.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="base_soap_formatter"/>
<CursorPos X="14" Y="87"/>
<TopLine Value="73"/>
<EditorIndex Value="3"/>
<CursorPos X="15" Y="441"/>
<TopLine Value="430"/>
<EditorIndex Value="6"/>
<UsageCount Value="200"/>
<Loaded Value="True"/>
</Unit6>
@ -104,9 +104,9 @@
<Filename Value="..\..\binary_formatter.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="binary_formatter"/>
<CursorPos X="22" Y="132"/>
<TopLine Value="118"/>
<EditorIndex Value="6"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<EditorIndex Value="9"/>
<UsageCount Value="200"/>
<Loaded Value="True"/>
</Unit7>
@ -124,7 +124,7 @@
<UnitName Value="server_binary_formatter"/>
<CursorPos X="22" Y="100"/>
<TopLine Value="86"/>
<EditorIndex Value="7"/>
<EditorIndex Value="10"/>
<UsageCount Value="200"/>
<Loaded Value="True"/>
</Unit9>
@ -141,7 +141,7 @@
<UnitName Value="typinfo"/>
<CursorPos X="15" Y="579"/>
<TopLine Value="565"/>
<UsageCount Value="5"/>
<UsageCount Value="4"/>
</Unit11>
<Unit12>
<Filename Value="testmetadata_unit.pas"/>
@ -175,9 +175,9 @@
<Filename Value="..\..\metadata_wsdl.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="metadata_wsdl"/>
<CursorPos X="3" Y="764"/>
<TopLine Value="775"/>
<EditorIndex Value="1"/>
<CursorPos X="71" Y="293"/>
<TopLine Value="280"/>
<EditorIndex Value="3"/>
<UsageCount Value="206"/>
<Loaded Value="True"/>
</Unit15>
@ -186,13 +186,13 @@
<UnitName Value="DOM"/>
<CursorPos X="15" Y="429"/>
<TopLine Value="413"/>
<UsageCount Value="4"/>
<UsageCount Value="3"/>
</Unit16>
<Unit17>
<Filename Value="D:\lazarusClean\fpc\2.0.4\source\rtl\objpas\sysutils\sysutilh.inc"/>
<CursorPos X="13" Y="235"/>
<TopLine Value="215"/>
<UsageCount Value="8"/>
<UsageCount Value="7"/>
</Unit17>
<Unit18>
<Filename Value="..\..\server_service_intf.pas"/>
@ -200,45 +200,45 @@
<UnitName Value="server_service_intf"/>
<CursorPos X="35" Y="379"/>
<TopLine Value="397"/>
<UsageCount Value="153"/>
<UsageCount Value="162"/>
</Unit18>
<Unit19>
<Filename Value="..\..\service_intf.pas"/>
<UnitName Value="service_intf"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="23"/>
<UsageCount Value="9"/>
<UsageCount Value="8"/>
</Unit19>
<Unit20>
<Filename Value="D:\lazarusClean\fpc\2.0.4\source\rtl\objpas\classes\classesh.inc"/>
<CursorPos X="3" Y="316"/>
<TopLine Value="304"/>
<UsageCount Value="8"/>
<UsageCount Value="7"/>
</Unit20>
<Unit21>
<Filename Value="D:\lazarusClean\fpc\2.0.4\source\rtl\objpas\classes\lists.inc"/>
<CursorPos X="3" Y="407"/>
<TopLine Value="404"/>
<UsageCount Value="8"/>
<UsageCount Value="7"/>
</Unit21>
<Unit22>
<Filename Value="D:\lazarusClean\fpc\2.0.4\source\fcl\inc\contnrs.pp"/>
<UnitName Value="contnrs"/>
<CursorPos X="3" Y="474"/>
<TopLine Value="471"/>
<UsageCount Value="8"/>
<UsageCount Value="7"/>
</Unit22>
<Unit23>
<Filename Value="D:\lazarusClean\fpc\2.0.4\source\rtl\inc\objpash.inc"/>
<CursorPos X="27" Y="121"/>
<TopLine Value="104"/>
<UsageCount Value="8"/>
<UsageCount Value="7"/>
</Unit23>
<Unit24>
<Filename Value="D:\lazarusClean\fpc\2.0.4\source\rtl\inc\objpas.inc"/>
<CursorPos X="9" Y="166"/>
<TopLine Value="142"/>
<UsageCount Value="8"/>
<UsageCount Value="7"/>
</Unit24>
<Unit25>
<Filename Value="D:\Lazarus\components\fpcunit\guitestrunner.pas"/>
@ -247,60 +247,60 @@
<UnitName Value="GuiTestRunner"/>
<CursorPos X="34" Y="32"/>
<TopLine Value="25"/>
<UsageCount Value="8"/>
<UsageCount Value="7"/>
</Unit25>
<Unit26>
<Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\fpcunit\fpcunit.pp"/>
<UnitName Value="fpcunit"/>
<CursorPos X="21" Y="94"/>
<TopLine Value="83"/>
<UsageCount Value="6"/>
<UsageCount Value="5"/>
</Unit26>
<Unit27>
<Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\fpcunit\DUnitCompatibleInterface.inc"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="4"/>
<UsageCount Value="10"/>
<UsageCount Value="9"/>
</Unit27>
<Unit28>
<Filename Value="..\..\imp_utils.pas"/>
<UnitName Value="imp_utils"/>
<CursorPos X="15" Y="36"/>
<TopLine Value="22"/>
<UsageCount Value="10"/>
<UsageCount Value="9"/>
</Unit28>
<Unit29>
<Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\xml\dom.pp"/>
<UnitName Value="DOM"/>
<CursorPos X="3" Y="51"/>
<TopLine Value="41"/>
<UsageCount Value="10"/>
<UsageCount Value="9"/>
</Unit29>
<Unit30>
<Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\objpas\typinfo.pp"/>
<UnitName Value="typinfo"/>
<CursorPos X="33" Y="192"/>
<TopLine Value="186"/>
<UsageCount Value="3"/>
<UsageCount Value="2"/>
</Unit30>
<Unit31>
<Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\xml\xmlread.pp"/>
<UnitName Value="XMLRead"/>
<CursorPos X="43" Y="13"/>
<TopLine Value="1"/>
<UsageCount Value="4"/>
<UsageCount Value="3"/>
</Unit31>
<Unit32>
<Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\objpas\sysutils\datih.inc"/>
<CursorPos X="10" Y="109"/>
<TopLine Value="107"/>
<UsageCount Value="5"/>
<UsageCount Value="4"/>
</Unit32>
<Unit33>
<Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\objpas\sysutils\dati.inc"/>
<CursorPos X="46" Y="130"/>
<TopLine Value="122"/>
<UsageCount Value="5"/>
<UsageCount Value="4"/>
</Unit33>
<Unit34>
<Filename Value="test_parserdef.pas"/>
@ -308,63 +308,62 @@
<UnitName Value="test_parserdef"/>
<CursorPos X="93" Y="76"/>
<TopLine Value="11"/>
<UsageCount Value="73"/>
<UsageCount Value="82"/>
</Unit34>
<Unit35>
<Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\fpcunit\testutils.pp"/>
<UnitName Value="testutils"/>
<CursorPos X="34" Y="25"/>
<TopLine Value="1"/>
<UsageCount Value="5"/>
<UsageCount Value="4"/>
</Unit35>
<Unit36>
<Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\fpcunit\testregistry.pp"/>
<UnitName Value="testregistry"/>
<CursorPos X="18" Y="17"/>
<TopLine Value="16"/>
<UsageCount Value="5"/>
<UsageCount Value="4"/>
</Unit36>
<Unit37>
<Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\inc\objpash.inc"/>
<CursorPos X="26" Y="134"/>
<TopLine Value="141"/>
<UsageCount Value="8"/>
<CursorPos X="8" Y="190"/>
<TopLine Value="133"/>
<EditorIndex Value="1"/>
<UsageCount Value="14"/>
<Loaded Value="True"/>
</Unit37>
<Unit38>
<Filename Value="..\..\wst.inc"/>
<CursorPos X="21" Y="7"/>
<TopLine Value="1"/>
<EditorIndex Value="2"/>
<UsageCount Value="14"/>
<Loaded Value="True"/>
</Unit38>
<Unit39>
<Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\objpas\objpas.pp"/>
<UnitName Value="objpas"/>
<CursorPos X="47" Y="64"/>
<TopLine Value="38"/>
<UsageCount Value="9"/>
</Unit39>
<Unit40>
<Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\inc\heaph.inc"/>
<CursorPos X="43" Y="100"/>
<TopLine Value="83"/>
<EditorIndex Value="5"/>
<UsageCount Value="12"/>
<Loaded Value="True"/>
</Unit40>
<Unit41>
<Filename Value="..\test_fpc\interface_problem\interface_problem.pas"/>
<UnitName Value="interface_problem"/>
<CursorPos X="1" Y="10"/>
<TopLine Value="1"/>
<UsageCount Value="20"/>
</Unit41>
</Units>
<JumpHistory Count="8" HistoryIndex="7">
<Position1>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="119" Column="3" TopLine="132"/>
</Position1>
<Position2>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="825" Column="90" TopLine="817"/>
</Position2>
<Position3>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="3944" Column="90" TopLine="3937"/>
</Position3>
<Position4>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1" Column="1" TopLine="1"/>
</Position4>
<Position5>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1125" Column="66" TopLine="1112"/>
</Position5>
<Position6>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="36" Column="9" TopLine="25"/>
</Position6>
<Position7>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1129" Column="37" TopLine="1115"/>
</Position7>
<Position8>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1127" Column="72" TopLine="1113"/>
</Position8>
</JumpHistory>
<JumpHistory Count="0" HistoryIndex="-1"/>
</ProjectOptions>
<CompilerOptions>
<Version Value="5"/>
@ -390,7 +389,8 @@
</Debugging>
</Linking>
<Other>
<CustomOptions Value="-Xi"/>
<CustomOptions Value="-Xi
"/>
<CompilerPath Value="$(CompPath)"/>
</Other>
</CompilerOptions>

View File

@ -12,7 +12,7 @@
<MainUnit Value="0"/>
<IconPath Value="./"/>
<TargetFileExt Value=""/>
<ActiveEditorIndexAtStart Value="3"/>
<ActiveEditorIndexAtStart Value="8"/>
</General>
<PublishOptions>
<Version Value="2"/>
@ -33,21 +33,23 @@
<PackageName Value="FCL"/>
</Item1>
</RequiredPackages>
<Units Count="33">
<Units Count="35">
<Unit0>
<Filename Value="ws_helper.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="ws_helper"/>
<CursorPos X="1" Y="122"/>
<TopLine Value="35"/>
<CursorPos X="23" Y="104"/>
<TopLine Value="86"/>
<EditorIndex Value="8"/>
<UsageCount Value="200"/>
<Loaded Value="True"/>
</Unit0>
<Unit1>
<Filename Value="ws_parser.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="ws_parser"/>
<CursorPos X="1" Y="437"/>
<TopLine Value="417"/>
<CursorPos X="15" Y="457"/>
<TopLine Value="445"/>
<EditorIndex Value="7"/>
<UsageCount Value="200"/>
<Loaded Value="True"/>
@ -71,8 +73,8 @@
<Filename Value="parserdefs.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="parserdefs"/>
<CursorPos X="14" Y="225"/>
<TopLine Value="204"/>
<CursorPos X="58" Y="452"/>
<TopLine Value="431"/>
<EditorIndex Value="5"/>
<UsageCount Value="200"/>
<Bookmarks Count="1">
@ -94,7 +96,7 @@
<Filename Value="ws_helper.lpi"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<UsageCount Value="6"/>
<UsageCount Value="5"/>
<SyntaxHighlighter Value="None"/>
</Unit5>
<Unit6>
@ -102,21 +104,21 @@
<UnitName Value="Classes"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<UsageCount Value="6"/>
<UsageCount Value="5"/>
</Unit6>
<Unit7>
<Filename Value="usr\share\fpcsrc\rtl\objpas\strutils.pp"/>
<UnitName Value="strutils"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<UsageCount Value="6"/>
<UsageCount Value="5"/>
</Unit7>
<Unit8>
<Filename Value="usr\share\fpcsrc\rtl\unix\sysutils.pp"/>
<UnitName Value="sysutils"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<UsageCount Value="6"/>
<UsageCount Value="5"/>
</Unit8>
<Unit9>
<Filename Value="source_utils.pas"/>
@ -131,19 +133,19 @@
<UnitName Value="strutils"/>
<CursorPos X="23" Y="246"/>
<TopLine Value="246"/>
<UsageCount Value="1"/>
<UsageCount Value="10"/>
</Unit10>
<Unit11>
<Filename Value="D:\lazarusClean\fpcsrc\rtl\objpas\sysutils\sysstrh.inc"/>
<CursorPos X="10" Y="74"/>
<TopLine Value="70"/>
<UsageCount Value="1"/>
<UsageCount Value="10"/>
</Unit11>
<Unit12>
<Filename Value="D:\lazarusClean\fpcsrc\rtl\objpas\sysutils\sysstr.inc"/>
<CursorPos X="3" Y="185"/>
<TopLine Value="180"/>
<UsageCount Value="1"/>
<UsageCount Value="10"/>
</Unit12>
<Unit13>
<Filename Value="command_line_parser.pas"/>
@ -182,7 +184,7 @@
<UnitName Value="Classes"/>
<CursorPos X="1" Y="47"/>
<TopLine Value="5"/>
<UsageCount Value="8"/>
<UsageCount Value="7"/>
</Unit17>
<Unit18>
<Filename Value="..\wsdl_to_pascal\wsdl2pas_imp.pas"/>
@ -198,16 +200,16 @@
<CursorPos X="1" Y="564"/>
<TopLine Value="543"/>
<EditorIndex Value="2"/>
<UsageCount Value="65"/>
<UsageCount Value="69"/>
<Loaded Value="True"/>
</Unit19>
<Unit20>
<Filename Value="..\wst_rtti_filter\dom_cursors.pas"/>
<UnitName Value="dom_cursors"/>
<CursorPos X="24" Y="71"/>
<TopLine Value="4"/>
<CursorPos X="60" Y="14"/>
<TopLine Value="1"/>
<EditorIndex Value="3"/>
<UsageCount Value="91"/>
<UsageCount Value="95"/>
<Loaded Value="True"/>
</Unit20>
<Unit21>
@ -216,28 +218,28 @@
<CursorPos X="1" Y="113"/>
<TopLine Value="97"/>
<EditorIndex Value="4"/>
<UsageCount Value="93"/>
<UsageCount Value="97"/>
<Loaded Value="True"/>
</Unit21>
<Unit22>
<Filename Value="..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\objpas\sysutils\sysstrh.inc"/>
<CursorPos X="10" Y="100"/>
<TopLine Value="86"/>
<UsageCount Value="22"/>
<UsageCount Value="21"/>
</Unit22>
<Unit23>
<Filename Value="..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\objpas\classes\classesh.inc"/>
<CursorPos X="14" Y="151"/>
<TopLine Value="137"/>
<UsageCount Value="1"/>
<UsageCount Value="10"/>
</Unit23>
<Unit24>
<Filename Value="wsdl2pas_imp.pas"/>
<UnitName Value="wsdl2pas_imp"/>
<CursorPos X="28" Y="639"/>
<TopLine Value="635"/>
<CursorPos X="49" Y="1189"/>
<TopLine Value="1180"/>
<EditorIndex Value="1"/>
<UsageCount Value="84"/>
<UsageCount Value="88"/>
<Bookmarks Count="2">
<Item0 X="21" Y="732" ID="3"/>
<Item1 X="50" Y="633" ID="5"/>
@ -249,175 +251,77 @@
<UnitName Value="getopts"/>
<CursorPos X="1" Y="231"/>
<TopLine Value="218"/>
<UsageCount Value="9"/>
<UsageCount Value="8"/>
</Unit25>
<Unit26>
<Filename Value="..\..\..\..\lazarus211\fpc\2.1.1\source\packages\fcl-xml\src\dom.pp"/>
<UnitName Value="DOM"/>
<CursorPos X="27" Y="41"/>
<TopLine Value="1"/>
<UsageCount Value="5"/>
<UsageCount Value="4"/>
</Unit26>
<Unit27>
<Filename Value="..\..\..\..\lazarus211\fpc\2.1.1\source\packages\fcl-base\src\inc\avl_tree.pp"/>
<UnitName Value="AVL_Tree"/>
<CursorPos X="54" Y="156"/>
<TopLine Value="332"/>
<UsageCount Value="1"/>
<UsageCount Value="10"/>
</Unit27>
<Unit28>
<Filename Value="..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\inc\contnrs.pp"/>
<UnitName Value="contnrs"/>
<CursorPos X="30" Y="685"/>
<TopLine Value="683"/>
<UsageCount Value="1"/>
<UsageCount Value="10"/>
</Unit28>
<Unit29>
<Filename Value="..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\objpas\classes\lists.inc"/>
<CursorPos X="3" Y="29"/>
<TopLine Value="27"/>
<UsageCount Value="1"/>
<UsageCount Value="10"/>
</Unit29>
<Unit30>
<Filename Value="..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\objpas\sysutils\sysstr.inc"/>
<CursorPos X="1" Y="689"/>
<TopLine Value="686"/>
<UsageCount Value="22"/>
<UsageCount Value="21"/>
</Unit30>
<Unit31>
<Filename Value="..\..\..\..\lazarus211\fpc\2.1.1\source\rtl\objpas\sysutils\syswideh.inc"/>
<CursorPos X="10" Y="30"/>
<TopLine Value="1"/>
<UsageCount Value="8"/>
<UsageCount Value="7"/>
</Unit31>
<Unit32>
<Filename Value="..\..\..\..\lazarus211\fpc\2.1.1\source\rtl\objpas\sysutils\syswide.inc"/>
<CursorPos X="5" Y="92"/>
<TopLine Value="90"/>
<UsageCount Value="8"/>
<UsageCount Value="7"/>
</Unit32>
<Unit33>
<Filename Value="..\..\..\..\lazarus23_213\others_package\indy\indy-10.2.0.1\lazarus\IdDsnCoreResourceStrings.pas"/>
<UnitName Value="IdDsnCoreResourceStrings"/>
<CursorPos X="9" Y="76"/>
<TopLine Value="64"/>
<UsageCount Value="10"/>
</Unit33>
<Unit34>
<Filename Value="..\..\..\..\lazarus23_213\others_package\indy\indy-10.2.0.1\fpc\System\IdGlobal.pas"/>
<UnitName Value="IdGlobal"/>
<CursorPos X="44" Y="989"/>
<TopLine Value="981"/>
<UsageCount Value="10"/>
</Unit34>
</Units>
<JumpHistory Count="30" HistoryIndex="29">
<JumpHistory Count="2" HistoryIndex="1">
<Position1>
<Filename Value="wsdl2pas_imp.pas"/>
<Caret Line="675" Column="69" TopLine="662"/>
<Filename Value="..\wst_rtti_filter\dom_cursors.pas"/>
<Caret Line="5" Column="19" TopLine="1"/>
</Position1>
<Position2>
<Filename Value="wsdl2pas_imp.pas"/>
<Caret Line="688" Column="50" TopLine="674"/>
</Position2>
<Position3>
<Filename Value="wsdl2pas_imp.pas"/>
<Caret Line="1" Column="1" TopLine="1"/>
</Position3>
<Position4>
<Filename Value="wsdl2pas_imp.pas"/>
<Caret Line="187" Column="54" TopLine="172"/>
</Position4>
<Position5>
<Filename Value="wsdl2pas_imp.pas"/>
<Caret Line="646" Column="36" TopLine="626"/>
</Position5>
<Position6>
<Filename Value="wsdl2pas_imp.pas"/>
<Caret Line="1" Column="1" TopLine="1"/>
</Position6>
<Position7>
<Filename Value="wsdl2pas_imp.pas"/>
<Caret Line="144" Column="55" TopLine="131"/>
</Position7>
<Position8>
<Filename Value="wsdl2pas_imp.pas"/>
<Caret Line="498" Column="26" TopLine="485"/>
</Position8>
<Position9>
<Filename Value="wsdl2pas_imp.pas"/>
<Caret Line="507" Column="69" TopLine="494"/>
</Position9>
<Position10>
<Filename Value="generator.pas"/>
<Caret Line="157" Column="15" TopLine="142"/>
</Position10>
<Position11>
<Filename Value="generator.pas"/>
<Caret Line="293" Column="23" TopLine="280"/>
</Position11>
<Position12>
<Filename Value="generator.pas"/>
<Caret Line="366" Column="23" TopLine="353"/>
</Position12>
<Position13>
<Filename Value="generator.pas"/>
<Caret Line="669" Column="25" TopLine="656"/>
</Position13>
<Position14>
<Filename Value="generator.pas"/>
<Caret Line="265" Column="22" TopLine="254"/>
</Position14>
<Position15>
<Filename Value="generator.pas"/>
<Caret Line="288" Column="30" TopLine="269"/>
</Position15>
<Position16>
<Filename Value="wsdl2pas_imp.pas"/>
<Caret Line="540" Column="26" TopLine="527"/>
</Position16>
<Position17>
<Filename Value="wsdl2pas_imp.pas"/>
<Caret Line="1" Column="1" TopLine="1"/>
</Position17>
<Position18>
<Filename Value="wsdl2pas_imp.pas"/>
<Caret Line="185" Column="58" TopLine="172"/>
</Position18>
<Position19>
<Filename Value="wsdl2pas_imp.pas"/>
<Caret Line="675" Column="69" TopLine="662"/>
</Position19>
<Position20>
<Filename Value="wsdl2pas_imp.pas"/>
<Caret Line="688" Column="50" TopLine="674"/>
</Position20>
<Position21>
<Filename Value="wsdl2pas_imp.pas"/>
<Caret Line="1" Column="1" TopLine="1"/>
</Position21>
<Position22>
<Filename Value="wsdl2pas_imp.pas"/>
<Caret Line="186" Column="67" TopLine="172"/>
</Position22>
<Position23>
<Filename Value="wsdl2pas_imp.pas"/>
<Caret Line="187" Column="67" TopLine="174"/>
</Position23>
<Position24>
<Filename Value="wsdl2pas_imp.pas"/>
<Caret Line="601" Column="41" TopLine="588"/>
</Position24>
<Position25>
<Filename Value="wsdl2pas_imp.pas"/>
<Caret Line="693" Column="35" TopLine="680"/>
</Position25>
<Position26>
<Filename Value="wsdl2pas_imp.pas"/>
<Caret Line="1" Column="1" TopLine="1"/>
</Position26>
<Position27>
<Filename Value="wsdl2pas_imp.pas"/>
<Caret Line="186" Column="22" TopLine="173"/>
</Position27>
<Position28>
<Filename Value="generator.pas"/>
<Caret Line="1" Column="1" TopLine="16"/>
</Position28>
<Position29>
<Filename Value="generator.pas"/>
<Caret Line="290" Column="59" TopLine="277"/>
</Position29>
<Position30>
<Filename Value="..\wst_rtti_filter\dom_cursors.pas"/>
<Caret Line="172" Column="1" TopLine="151"/>
</Position30>
<Caret Line="222" Column="75" TopLine="211"/>
</Position2>
</JumpHistory>
</ProjectOptions>
<CompilerOptions>

View File

@ -454,6 +454,7 @@ begin
FStream := AStream;
FTokenizer := TParser.Create(FStream);
FSymbolTable := ASymbolTable;
FSymbolTable.Add(CreateWstInterfaceSymbolTable());
FCurrentSymbol := Nil;
end;

11
wst/trunk/wst.inc Normal file
View File

@ -0,0 +1,11 @@
{$IFDEF FPC}
{$mode objfpc}{$H+}
{$DEFINE HAS_QWORD}
{$DEFINE USE_INLINE}
{$IF (FPC_VERSION = 2) and (FPC_RELEASE > 0)}
{$define FPC_211}
{$ENDIF}
{$ELSE}
{$UNDEF HAS_QWORD}
{$UNDEF USE_INLINE}
{$ENDIF}

8
wst/trunk/wst_delphi.inc Normal file
View File

@ -0,0 +1,8 @@
{$IFNDEF HAS_QWORD}
type
QWord = type Int64;
DWORD = LongWord;
PtrInt = Cardinal;
PByteArray = ^ByteArray;
ByteArray = array[0..$effffff] of Byte;
{$ENDIF}

View File

@ -1,6 +1,6 @@
unit wst_resources_imp;
{$mode objfpc}{$H+}
{$INCLUDE wst.inc}
interface
@ -17,8 +17,8 @@ type
Procedure Assign(Source : TPersistent); override;
Function HasResource(Const AName : String) : Boolean; virtual; abstract;
Function ResourceAsString(Const AName : String) : String; virtual; abstract;
Procedure AddResource(Const AName,AValue : String); virtual; Abstract;
Procedure AddResource(const Name: AnsiString; Values: array of string);
Procedure AddResource(Const AName,AValue : String); overload;virtual; Abstract;
Procedure AddResource(const Name: AnsiString; Values: array of string);overload;
Procedure GetResourceList(List : TStrings); virtual; abstract;
end;

View File

@ -0,0 +1,8 @@
function wst_GetMem(Size : PtrInt) : Pointer;{$IFDEF USE_INLINE}inline;{$ENDIF}
begin
{$IFDEF FPC}
Result := GetMem(Size);
{$ELSE}
GetMem(Result,Size);
{$ENDIF}
end;