* json-rpc examples, and compile it as well

git-svn-id: trunk@15361 -
This commit is contained in:
michael 2010-06-03 15:18:09 +00:00
parent 9797140bad
commit 3d414fe91b
14 changed files with 753 additions and 151 deletions

9
.gitattributes vendored
View File

@ -2164,6 +2164,15 @@ packages/fcl-res/xml/versiontypes.xml svneol=native#text/plain
packages/fcl-res/xml/winpeimagereader.xml svneol=native#text/plain
packages/fcl-web/Makefile svneol=native#text/plain
packages/fcl-web/Makefile.fpc svneol=native#text/plain
packages/fcl-web/examples/jsonrpc/demo1/demo.lpi svneol=native#text/plain
packages/fcl-web/examples/jsonrpc/demo1/demo.lpr svneol=native#text/plain
packages/fcl-web/examples/jsonrpc/demo1/echo.in svneol=native#text/plain
packages/fcl-web/examples/jsonrpc/demo1/echobatch.in svneol=native#text/plain
packages/fcl-web/examples/jsonrpc/demo1/extdirect.in svneol=native#text/plain
packages/fcl-web/examples/jsonrpc/demo1/notification.in svneol=native#text/plain
packages/fcl-web/examples/jsonrpc/demo1/wmdemo.lfm svneol=native#text/plain
packages/fcl-web/examples/jsonrpc/demo1/wmdemo.lrs svneol=native#text/plain
packages/fcl-web/examples/jsonrpc/demo1/wmdemo.pp svneol=native#text/plain
packages/fcl-web/examples/webdata/demo/createusers.lpi svneol=native#text/plain
packages/fcl-web/examples/webdata/demo/createusers.lpr svneol=native#text/plain
packages/fcl-web/examples/webdata/demo/extgrid-json.html svneol=native#text/plain

View File

@ -1,10 +1,10 @@
#
# Don't edit, this file is generated by FPCMake Version 2.0.0 [2010/05/22]
# Don't edit, this file is generated by FPCMake Version 2.0.0 [2009/11/05]
#
default: all
MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-solaris x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded avr-embedded armeb-linux armeb-embedded mipsel-linux
MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded avr-embedded armeb-linux armeb-embedded
BSDs = freebsd netbsd openbsd darwin
UNIXs = linux $(BSDs) solaris qnx haiku
UNIXs = linux $(BSDs) solaris qnx
LIMIT83fs = go32v2 os2 emx watcom
OSNeedsComspecToRunBatch = go32v2 watcom
FORCE:
@ -59,11 +59,9 @@ endif
endif
ifdef COMSPEC
ifneq ($(findstring $(OS_SOURCE),$(OSNeedsComspecToRunBatch)),)
ifndef RUNBATCH
RUNBATCH=$(COMSPEC) /C
endif
endif
endif
ifdef inUnix
PATHSEP=/
else
@ -267,187 +265,178 @@ PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages $(FPCDIR)/packages/base $(F
override PACKAGE_NAME=fcl-web
override PACKAGE_VERSION=2.5.1
ifeq ($(FULL_TARGET),i386-linux)
override TARGET_DIRS+=src/base src/webdata
override TARGET_DIRS+=src/base src/webdata src/jsonrpc
endif
ifeq ($(FULL_TARGET),i386-go32v2)
override TARGET_DIRS+=src/base src/webdata
override TARGET_DIRS+=src/base src/webdata src/jsonrpc
endif
ifeq ($(FULL_TARGET),i386-win32)
override TARGET_DIRS+=src/base src/webdata
override TARGET_DIRS+=src/base src/webdata src/jsonrpc
endif
ifeq ($(FULL_TARGET),i386-os2)
override TARGET_DIRS+=src/base src/webdata
override TARGET_DIRS+=src/base src/webdata src/jsonrpc
endif
ifeq ($(FULL_TARGET),i386-freebsd)
override TARGET_DIRS+=src/base src/webdata
override TARGET_DIRS+=src/base src/webdata src/jsonrpc
endif
ifeq ($(FULL_TARGET),i386-beos)
override TARGET_DIRS+=src/base src/webdata
override TARGET_DIRS+=src/base src/webdata src/jsonrpc
endif
ifeq ($(FULL_TARGET),i386-haiku)
override TARGET_DIRS+=src/base src/webdata
override TARGET_DIRS+=src/base src/webdata src/jsonrpc
endif
ifeq ($(FULL_TARGET),i386-netbsd)
override TARGET_DIRS+=src/base src/webdata
override TARGET_DIRS+=src/base src/webdata src/jsonrpc
endif
ifeq ($(FULL_TARGET),i386-solaris)
override TARGET_DIRS+=src/base src/webdata
override TARGET_DIRS+=src/base src/webdata src/jsonrpc
endif
ifeq ($(FULL_TARGET),i386-qnx)
override TARGET_DIRS+=src/base src/webdata
override TARGET_DIRS+=src/base src/webdata src/jsonrpc
endif
ifeq ($(FULL_TARGET),i386-netware)
override TARGET_DIRS+=src/base src/webdata
override TARGET_DIRS+=src/base src/webdata src/jsonrpc
endif
ifeq ($(FULL_TARGET),i386-openbsd)
override TARGET_DIRS+=src/base src/webdata
override TARGET_DIRS+=src/base src/webdata src/jsonrpc
endif
ifeq ($(FULL_TARGET),i386-wdosx)
override TARGET_DIRS+=src/base src/webdata
override TARGET_DIRS+=src/base src/webdata src/jsonrpc
endif
ifeq ($(FULL_TARGET),i386-darwin)
override TARGET_DIRS+=src/base src/webdata
override TARGET_DIRS+=src/base src/webdata src/jsonrpc
endif
ifeq ($(FULL_TARGET),i386-emx)
override TARGET_DIRS+=src/base src/webdata
override TARGET_DIRS+=src/base src/webdata src/jsonrpc
endif
ifeq ($(FULL_TARGET),i386-watcom)
override TARGET_DIRS+=src/base src/webdata
override TARGET_DIRS+=src/base src/webdata src/jsonrpc
endif
ifeq ($(FULL_TARGET),i386-netwlibc)
override TARGET_DIRS+=src/base src/webdata
override TARGET_DIRS+=src/base src/webdata src/jsonrpc
endif
ifeq ($(FULL_TARGET),i386-wince)
override TARGET_DIRS+=src/base src/webdata
override TARGET_DIRS+=src/base src/webdata src/jsonrpc
endif
ifeq ($(FULL_TARGET),i386-embedded)
override TARGET_DIRS+=src/base src/webdata
override TARGET_DIRS+=src/base src/webdata src/jsonrpc
endif
ifeq ($(FULL_TARGET),i386-symbian)
override TARGET_DIRS+=src/base src/webdata
endif
ifeq ($(FULL_TARGET),i386-nativent)
override TARGET_DIRS+=src/base src/webdata
override TARGET_DIRS+=src/base src/webdata src/jsonrpc
endif
ifeq ($(FULL_TARGET),m68k-linux)
override TARGET_DIRS+=src/base src/webdata
override TARGET_DIRS+=src/base src/webdata src/jsonrpc
endif
ifeq ($(FULL_TARGET),m68k-freebsd)
override TARGET_DIRS+=src/base src/webdata
override TARGET_DIRS+=src/base src/webdata src/jsonrpc
endif
ifeq ($(FULL_TARGET),m68k-netbsd)
override TARGET_DIRS+=src/base src/webdata
override TARGET_DIRS+=src/base src/webdata src/jsonrpc
endif
ifeq ($(FULL_TARGET),m68k-amiga)
override TARGET_DIRS+=src/base src/webdata
override TARGET_DIRS+=src/base src/webdata src/jsonrpc
endif
ifeq ($(FULL_TARGET),m68k-atari)
override TARGET_DIRS+=src/base src/webdata
override TARGET_DIRS+=src/base src/webdata src/jsonrpc
endif
ifeq ($(FULL_TARGET),m68k-openbsd)
override TARGET_DIRS+=src/base src/webdata
override TARGET_DIRS+=src/base src/webdata src/jsonrpc
endif
ifeq ($(FULL_TARGET),m68k-palmos)
override TARGET_DIRS+=src/base src/webdata
override TARGET_DIRS+=src/base src/webdata src/jsonrpc
endif
ifeq ($(FULL_TARGET),m68k-embedded)
override TARGET_DIRS+=src/base src/webdata
override TARGET_DIRS+=src/base src/webdata src/jsonrpc
endif
ifeq ($(FULL_TARGET),powerpc-linux)
override TARGET_DIRS+=src/base src/webdata
override TARGET_DIRS+=src/base src/webdata src/jsonrpc
endif
ifeq ($(FULL_TARGET),powerpc-netbsd)
override TARGET_DIRS+=src/base src/webdata
override TARGET_DIRS+=src/base src/webdata src/jsonrpc
endif
ifeq ($(FULL_TARGET),powerpc-amiga)
override TARGET_DIRS+=src/base src/webdata
override TARGET_DIRS+=src/base src/webdata src/jsonrpc
endif
ifeq ($(FULL_TARGET),powerpc-macos)
override TARGET_DIRS+=src/base src/webdata
override TARGET_DIRS+=src/base src/webdata src/jsonrpc
endif
ifeq ($(FULL_TARGET),powerpc-darwin)
override TARGET_DIRS+=src/base src/webdata
override TARGET_DIRS+=src/base src/webdata src/jsonrpc
endif
ifeq ($(FULL_TARGET),powerpc-morphos)
override TARGET_DIRS+=src/base src/webdata
override TARGET_DIRS+=src/base src/webdata src/jsonrpc
endif
ifeq ($(FULL_TARGET),powerpc-embedded)
override TARGET_DIRS+=src/base src/webdata
override TARGET_DIRS+=src/base src/webdata src/jsonrpc
endif
ifeq ($(FULL_TARGET),sparc-linux)
override TARGET_DIRS+=src/base src/webdata
override TARGET_DIRS+=src/base src/webdata src/jsonrpc
endif
ifeq ($(FULL_TARGET),sparc-netbsd)
override TARGET_DIRS+=src/base src/webdata
override TARGET_DIRS+=src/base src/webdata src/jsonrpc
endif
ifeq ($(FULL_TARGET),sparc-solaris)
override TARGET_DIRS+=src/base src/webdata
override TARGET_DIRS+=src/base src/webdata src/jsonrpc
endif
ifeq ($(FULL_TARGET),sparc-embedded)
override TARGET_DIRS+=src/base src/webdata
override TARGET_DIRS+=src/base src/webdata src/jsonrpc
endif
ifeq ($(FULL_TARGET),x86_64-linux)
override TARGET_DIRS+=src/base src/webdata
override TARGET_DIRS+=src/base src/webdata src/jsonrpc
endif
ifeq ($(FULL_TARGET),x86_64-freebsd)
override TARGET_DIRS+=src/base src/webdata
endif
ifeq ($(FULL_TARGET),x86_64-solaris)
override TARGET_DIRS+=src/base src/webdata
override TARGET_DIRS+=src/base src/webdata src/jsonrpc
endif
ifeq ($(FULL_TARGET),x86_64-darwin)
override TARGET_DIRS+=src/base src/webdata
override TARGET_DIRS+=src/base src/webdata src/jsonrpc
endif
ifeq ($(FULL_TARGET),x86_64-win64)
override TARGET_DIRS+=src/base src/webdata
override TARGET_DIRS+=src/base src/webdata src/jsonrpc
endif
ifeq ($(FULL_TARGET),x86_64-embedded)
override TARGET_DIRS+=src/base src/webdata
override TARGET_DIRS+=src/base src/webdata src/jsonrpc
endif
ifeq ($(FULL_TARGET),arm-linux)
override TARGET_DIRS+=src/base src/webdata
override TARGET_DIRS+=src/base src/webdata src/jsonrpc
endif
ifeq ($(FULL_TARGET),arm-palmos)
override TARGET_DIRS+=src/base src/webdata
override TARGET_DIRS+=src/base src/webdata src/jsonrpc
endif
ifeq ($(FULL_TARGET),arm-darwin)
override TARGET_DIRS+=src/base src/webdata
override TARGET_DIRS+=src/base src/webdata src/jsonrpc
endif
ifeq ($(FULL_TARGET),arm-wince)
override TARGET_DIRS+=src/base src/webdata
override TARGET_DIRS+=src/base src/webdata src/jsonrpc
endif
ifeq ($(FULL_TARGET),arm-gba)
override TARGET_DIRS+=src/base src/webdata
override TARGET_DIRS+=src/base src/webdata src/jsonrpc
endif
ifeq ($(FULL_TARGET),arm-nds)
override TARGET_DIRS+=src/base src/webdata
override TARGET_DIRS+=src/base src/webdata src/jsonrpc
endif
ifeq ($(FULL_TARGET),arm-embedded)
override TARGET_DIRS+=src/base src/webdata
override TARGET_DIRS+=src/base src/webdata src/jsonrpc
endif
ifeq ($(FULL_TARGET),arm-symbian)
override TARGET_DIRS+=src/base src/webdata
override TARGET_DIRS+=src/base src/webdata src/jsonrpc
endif
ifeq ($(FULL_TARGET),powerpc64-linux)
override TARGET_DIRS+=src/base src/webdata
override TARGET_DIRS+=src/base src/webdata src/jsonrpc
endif
ifeq ($(FULL_TARGET),powerpc64-darwin)
override TARGET_DIRS+=src/base src/webdata
override TARGET_DIRS+=src/base src/webdata src/jsonrpc
endif
ifeq ($(FULL_TARGET),powerpc64-embedded)
override TARGET_DIRS+=src/base src/webdata
override TARGET_DIRS+=src/base src/webdata src/jsonrpc
endif
ifeq ($(FULL_TARGET),avr-embedded)
override TARGET_DIRS+=src/base src/webdata
override TARGET_DIRS+=src/base src/webdata src/jsonrpc
endif
ifeq ($(FULL_TARGET),armeb-linux)
override TARGET_DIRS+=src/base src/webdata
override TARGET_DIRS+=src/base src/webdata src/jsonrpc
endif
ifeq ($(FULL_TARGET),armeb-embedded)
override TARGET_DIRS+=src/base src/webdata
endif
ifeq ($(FULL_TARGET),mipsel-linux)
override TARGET_DIRS+=src/base src/webdata
override TARGET_DIRS+=src/base src/webdata src/jsonrpc
endif
override INSTALL_FPCPACKAGE=y
ifeq ($(FULL_TARGET),i386-linux)
@ -510,9 +499,6 @@ endif
ifeq ($(FULL_TARGET),i386-symbian)
override COMPILER_OPTIONS+=-S2h
endif
ifeq ($(FULL_TARGET),i386-nativent)
override COMPILER_OPTIONS+=-S2h
endif
ifeq ($(FULL_TARGET),m68k-linux)
override COMPILER_OPTIONS+=-S2h
endif
@ -576,9 +562,6 @@ endif
ifeq ($(FULL_TARGET),x86_64-freebsd)
override COMPILER_OPTIONS+=-S2h
endif
ifeq ($(FULL_TARGET),x86_64-solaris)
override COMPILER_OPTIONS+=-S2h
endif
ifeq ($(FULL_TARGET),x86_64-darwin)
override COMPILER_OPTIONS+=-S2h
endif
@ -630,9 +613,6 @@ endif
ifeq ($(FULL_TARGET),armeb-embedded)
override COMPILER_OPTIONS+=-S2h
endif
ifeq ($(FULL_TARGET),mipsel-linux)
override COMPILER_OPTIONS+=-S2h
endif
ifdef REQUIRE_UNITSDIR
override UNITSDIR+=$(REQUIRE_UNITSDIR)
endif
@ -1006,10 +986,6 @@ ifeq ($(OS_TARGET),symbian)
SHAREDLIBEXT=.dll
SHORTSUFFIX=symbian
endif
ifeq ($(OS_TARGET),NativeNT)
SHAREDLIBEXT=.dll
SHORTSUFFIX=nativent
endif
else
ifeq ($(OS_TARGET),go32v1)
PPUEXT=.pp1
@ -1738,18 +1714,6 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
REQUIRE_PACKAGES_HTTPD22=1
REQUIRE_PACKAGES_FASTCGI=1
endif
ifeq ($(FULL_TARGET),i386-nativent)
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_FCL-DB=1
REQUIRE_PACKAGES_FCL-JSON=1
REQUIRE_PACKAGES_FCL-PASSRC=1
REQUIRE_PACKAGES_FCL-ASYNC=1
REQUIRE_PACKAGES_FCL-NET=1
REQUIRE_PACKAGES_FCL-PROCESS=1
REQUIRE_PACKAGES_HTTPD22=1
REQUIRE_PACKAGES_FASTCGI=1
endif
ifeq ($(FULL_TARGET),m68k-linux)
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_ICONVENC=1
@ -2087,19 +2051,6 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
REQUIRE_PACKAGES_HTTPD22=1
REQUIRE_PACKAGES_FASTCGI=1
endif
ifeq ($(FULL_TARGET),x86_64-solaris)
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_FCL-DB=1
REQUIRE_PACKAGES_FCL-JSON=1
REQUIRE_PACKAGES_FCL-PASSRC=1
REQUIRE_PACKAGES_FCL-ASYNC=1
REQUIRE_PACKAGES_FCL-NET=1
REQUIRE_PACKAGES_SQLITE=1
REQUIRE_PACKAGES_FCL-PROCESS=1
REQUIRE_PACKAGES_HTTPD22=1
REQUIRE_PACKAGES_FASTCGI=1
endif
ifeq ($(FULL_TARGET),x86_64-darwin)
REQUIRE_PACKAGES_UNIVINT=1
REQUIRE_PACKAGES_FCL-BASE=1
@ -2362,26 +2313,6 @@ REQUIRE_PACKAGES_FCL-PROCESS=1
REQUIRE_PACKAGES_HTTPD22=1
REQUIRE_PACKAGES_FASTCGI=1
endif
ifeq ($(FULL_TARGET),mipsel-linux)
REQUIRE_PACKAGES_FCL-BASE=1
REQUIRE_PACKAGES_ICONVENC=1
REQUIRE_PACKAGES_FCL-XML=1
REQUIRE_PACKAGES_FCL-DB=1
REQUIRE_PACKAGES_FCL-JSON=1
REQUIRE_PACKAGES_FCL-PASSRC=1
REQUIRE_PACKAGES_FCL-ASYNC=1
REQUIRE_PACKAGES_FCL-NET=1
REQUIRE_PACKAGES_IBASE=1
REQUIRE_PACKAGES_POSTGRES=1
REQUIRE_PACKAGES_MYSQL=1
REQUIRE_PACKAGES_ODBC=1
REQUIRE_PACKAGES_ORACLE=1
REQUIRE_PACKAGES_SQLITE=1
REQUIRE_PACKAGES_PXLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
REQUIRE_PACKAGES_HTTPD22=1
REQUIRE_PACKAGES_FASTCGI=1
endif
ifdef REQUIRE_PACKAGES_FCL-BASE
PACKAGEDIR_FCL-BASE:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /fcl-base/Makefile.fpc,$(PACKAGESDIR))))))
ifneq ($(PACKAGEDIR_FCL-BASE),)
@ -3154,7 +3085,7 @@ ZIPCMD_CDPACK:=cd $(subst /,$(ZIPPATHSEP),$(PACKDIR))
ZIPCMD_CDBASE:=cd $(subst /,$(ZIPPATHSEP),$(BASEDIR))
ifdef USETAR
ZIPDESTFILE:=$(DIST_DESTDIR)/$(FULLZIPNAME)$(TAREXT)
ZIPCMD_ZIP:=$(TARPROG) c$(TAROPT)f $(ZIPDESTFILE) *
ZIPCMD_ZIP:=$(TARPROG) cf$(TAROPT) $(ZIPDESTFILE) *
else
ZIPDESTFILE:=$(DIST_DESTDIR)/$(FULLZIPNAME)$(ZIPEXT)
ZIPCMD_ZIP:=$(subst /,$(ZIPPATHSEP),$(ZIPPROG)) -Dr $(ZIPOPT) $(ZIPDESTFILE) *
@ -3199,9 +3130,6 @@ fpc_zipdistinstall:
ifdef EXEFILES
override CLEANEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(CLEANEXEFILES))
endif
ifdef CLEAN_PROGRAMS
override CLEANEXEFILES+=$(addprefix $(TARGETDIRPREFIX),$(addsuffix $(EXEEXT), $(CLEAN_PROGRAMS)))
endif
ifdef CLEAN_UNITS
override CLEANPPUFILES+=$(addsuffix $(PPUEXT),$(CLEAN_UNITS))
endif
@ -3248,9 +3176,6 @@ endif
ifdef CLEANRSTFILES
-$(DEL) $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANRSTFILES))
endif
endif
ifdef CLEAN_FILES
-$(DEL) $(CLEAN_FILES)
endif
-$(DELTREE) units
-$(DEL) *$(OEXT) *$(PPUEXT) *$(RSTEXT) *$(ASMEXT) *$(STATICLIBEXT) *$(SHAREDLIBEXT) *$(PPLEXT)
@ -3377,246 +3302,292 @@ fpc_makefiles: fpc_makefile fpc_makefile_dirs
ifeq ($(FULL_TARGET),i386-linux)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
TARGET_DIRS_SRC/JSONRPC=1
endif
ifeq ($(FULL_TARGET),i386-go32v2)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
TARGET_DIRS_SRC/JSONRPC=1
endif
ifeq ($(FULL_TARGET),i386-win32)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
TARGET_DIRS_SRC/JSONRPC=1
endif
ifeq ($(FULL_TARGET),i386-os2)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
TARGET_DIRS_SRC/JSONRPC=1
endif
ifeq ($(FULL_TARGET),i386-freebsd)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
TARGET_DIRS_SRC/JSONRPC=1
endif
ifeq ($(FULL_TARGET),i386-beos)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
TARGET_DIRS_SRC/JSONRPC=1
endif
ifeq ($(FULL_TARGET),i386-haiku)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
TARGET_DIRS_SRC/JSONRPC=1
endif
ifeq ($(FULL_TARGET),i386-netbsd)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
TARGET_DIRS_SRC/JSONRPC=1
endif
ifeq ($(FULL_TARGET),i386-solaris)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
TARGET_DIRS_SRC/JSONRPC=1
endif
ifeq ($(FULL_TARGET),i386-qnx)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
TARGET_DIRS_SRC/JSONRPC=1
endif
ifeq ($(FULL_TARGET),i386-netware)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
TARGET_DIRS_SRC/JSONRPC=1
endif
ifeq ($(FULL_TARGET),i386-openbsd)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
TARGET_DIRS_SRC/JSONRPC=1
endif
ifeq ($(FULL_TARGET),i386-wdosx)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
TARGET_DIRS_SRC/JSONRPC=1
endif
ifeq ($(FULL_TARGET),i386-darwin)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
TARGET_DIRS_SRC/JSONRPC=1
endif
ifeq ($(FULL_TARGET),i386-emx)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
TARGET_DIRS_SRC/JSONRPC=1
endif
ifeq ($(FULL_TARGET),i386-watcom)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
TARGET_DIRS_SRC/JSONRPC=1
endif
ifeq ($(FULL_TARGET),i386-netwlibc)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
TARGET_DIRS_SRC/JSONRPC=1
endif
ifeq ($(FULL_TARGET),i386-wince)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
TARGET_DIRS_SRC/JSONRPC=1
endif
ifeq ($(FULL_TARGET),i386-embedded)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
TARGET_DIRS_SRC/JSONRPC=1
endif
ifeq ($(FULL_TARGET),i386-symbian)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
endif
ifeq ($(FULL_TARGET),i386-nativent)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
TARGET_DIRS_SRC/JSONRPC=1
endif
ifeq ($(FULL_TARGET),m68k-linux)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
TARGET_DIRS_SRC/JSONRPC=1
endif
ifeq ($(FULL_TARGET),m68k-freebsd)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
TARGET_DIRS_SRC/JSONRPC=1
endif
ifeq ($(FULL_TARGET),m68k-netbsd)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
TARGET_DIRS_SRC/JSONRPC=1
endif
ifeq ($(FULL_TARGET),m68k-amiga)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
TARGET_DIRS_SRC/JSONRPC=1
endif
ifeq ($(FULL_TARGET),m68k-atari)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
TARGET_DIRS_SRC/JSONRPC=1
endif
ifeq ($(FULL_TARGET),m68k-openbsd)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
TARGET_DIRS_SRC/JSONRPC=1
endif
ifeq ($(FULL_TARGET),m68k-palmos)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
TARGET_DIRS_SRC/JSONRPC=1
endif
ifeq ($(FULL_TARGET),m68k-embedded)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
TARGET_DIRS_SRC/JSONRPC=1
endif
ifeq ($(FULL_TARGET),powerpc-linux)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
TARGET_DIRS_SRC/JSONRPC=1
endif
ifeq ($(FULL_TARGET),powerpc-netbsd)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
TARGET_DIRS_SRC/JSONRPC=1
endif
ifeq ($(FULL_TARGET),powerpc-amiga)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
TARGET_DIRS_SRC/JSONRPC=1
endif
ifeq ($(FULL_TARGET),powerpc-macos)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
TARGET_DIRS_SRC/JSONRPC=1
endif
ifeq ($(FULL_TARGET),powerpc-darwin)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
TARGET_DIRS_SRC/JSONRPC=1
endif
ifeq ($(FULL_TARGET),powerpc-morphos)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
TARGET_DIRS_SRC/JSONRPC=1
endif
ifeq ($(FULL_TARGET),powerpc-embedded)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
TARGET_DIRS_SRC/JSONRPC=1
endif
ifeq ($(FULL_TARGET),sparc-linux)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
TARGET_DIRS_SRC/JSONRPC=1
endif
ifeq ($(FULL_TARGET),sparc-netbsd)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
TARGET_DIRS_SRC/JSONRPC=1
endif
ifeq ($(FULL_TARGET),sparc-solaris)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
TARGET_DIRS_SRC/JSONRPC=1
endif
ifeq ($(FULL_TARGET),sparc-embedded)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
TARGET_DIRS_SRC/JSONRPC=1
endif
ifeq ($(FULL_TARGET),x86_64-linux)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
TARGET_DIRS_SRC/JSONRPC=1
endif
ifeq ($(FULL_TARGET),x86_64-freebsd)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
endif
ifeq ($(FULL_TARGET),x86_64-solaris)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
TARGET_DIRS_SRC/JSONRPC=1
endif
ifeq ($(FULL_TARGET),x86_64-darwin)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
TARGET_DIRS_SRC/JSONRPC=1
endif
ifeq ($(FULL_TARGET),x86_64-win64)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
TARGET_DIRS_SRC/JSONRPC=1
endif
ifeq ($(FULL_TARGET),x86_64-embedded)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
TARGET_DIRS_SRC/JSONRPC=1
endif
ifeq ($(FULL_TARGET),arm-linux)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
TARGET_DIRS_SRC/JSONRPC=1
endif
ifeq ($(FULL_TARGET),arm-palmos)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
TARGET_DIRS_SRC/JSONRPC=1
endif
ifeq ($(FULL_TARGET),arm-darwin)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
TARGET_DIRS_SRC/JSONRPC=1
endif
ifeq ($(FULL_TARGET),arm-wince)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
TARGET_DIRS_SRC/JSONRPC=1
endif
ifeq ($(FULL_TARGET),arm-gba)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
TARGET_DIRS_SRC/JSONRPC=1
endif
ifeq ($(FULL_TARGET),arm-nds)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
TARGET_DIRS_SRC/JSONRPC=1
endif
ifeq ($(FULL_TARGET),arm-embedded)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
TARGET_DIRS_SRC/JSONRPC=1
endif
ifeq ($(FULL_TARGET),arm-symbian)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
TARGET_DIRS_SRC/JSONRPC=1
endif
ifeq ($(FULL_TARGET),powerpc64-linux)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
TARGET_DIRS_SRC/JSONRPC=1
endif
ifeq ($(FULL_TARGET),powerpc64-darwin)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
TARGET_DIRS_SRC/JSONRPC=1
endif
ifeq ($(FULL_TARGET),powerpc64-embedded)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
TARGET_DIRS_SRC/JSONRPC=1
endif
ifeq ($(FULL_TARGET),avr-embedded)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
TARGET_DIRS_SRC/JSONRPC=1
endif
ifeq ($(FULL_TARGET),armeb-linux)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
TARGET_DIRS_SRC/JSONRPC=1
endif
ifeq ($(FULL_TARGET),armeb-embedded)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
endif
ifeq ($(FULL_TARGET),mipsel-linux)
TARGET_DIRS_SRC/BASE=1
TARGET_DIRS_SRC/WEBDATA=1
TARGET_DIRS_SRC/JSONRPC=1
endif
ifdef TARGET_DIRS_SRC/BASE
src/base_all:
@ -3708,6 +3679,51 @@ src/webdata:
$(MAKE) -C src/webdata all
.PHONY: src/webdata_all src/webdata_debug src/webdata_smart src/webdata_release src/webdata_units src/webdata_examples src/webdata_shared src/webdata_install src/webdata_sourceinstall src/webdata_exampleinstall src/webdata_distinstall src/webdata_zipinstall src/webdata_zipsourceinstall src/webdata_zipexampleinstall src/webdata_zipdistinstall src/webdata_clean src/webdata_distclean src/webdata_cleanall src/webdata_info src/webdata_makefiles src/webdata
endif
ifdef TARGET_DIRS_SRC/JSONRPC
src/jsonrpc_all:
$(MAKE) -C src/jsonrpc all
src/jsonrpc_debug:
$(MAKE) -C src/jsonrpc debug
src/jsonrpc_smart:
$(MAKE) -C src/jsonrpc smart
src/jsonrpc_release:
$(MAKE) -C src/jsonrpc release
src/jsonrpc_units:
$(MAKE) -C src/jsonrpc units
src/jsonrpc_examples:
$(MAKE) -C src/jsonrpc examples
src/jsonrpc_shared:
$(MAKE) -C src/jsonrpc shared
src/jsonrpc_install:
$(MAKE) -C src/jsonrpc install
src/jsonrpc_sourceinstall:
$(MAKE) -C src/jsonrpc sourceinstall
src/jsonrpc_exampleinstall:
$(MAKE) -C src/jsonrpc exampleinstall
src/jsonrpc_distinstall:
$(MAKE) -C src/jsonrpc distinstall
src/jsonrpc_zipinstall:
$(MAKE) -C src/jsonrpc zipinstall
src/jsonrpc_zipsourceinstall:
$(MAKE) -C src/jsonrpc zipsourceinstall
src/jsonrpc_zipexampleinstall:
$(MAKE) -C src/jsonrpc zipexampleinstall
src/jsonrpc_zipdistinstall:
$(MAKE) -C src/jsonrpc zipdistinstall
src/jsonrpc_clean:
$(MAKE) -C src/jsonrpc clean
src/jsonrpc_distclean:
$(MAKE) -C src/jsonrpc distclean
src/jsonrpc_cleanall:
$(MAKE) -C src/jsonrpc cleanall
src/jsonrpc_info:
$(MAKE) -C src/jsonrpc info
src/jsonrpc_makefiles:
$(MAKE) -C src/jsonrpc makefiles
src/jsonrpc:
$(MAKE) -C src/jsonrpc all
.PHONY: src/jsonrpc_all src/jsonrpc_debug src/jsonrpc_smart src/jsonrpc_release src/jsonrpc_units src/jsonrpc_examples src/jsonrpc_shared src/jsonrpc_install src/jsonrpc_sourceinstall src/jsonrpc_exampleinstall src/jsonrpc_distinstall src/jsonrpc_zipinstall src/jsonrpc_zipsourceinstall src/jsonrpc_zipexampleinstall src/jsonrpc_zipdistinstall src/jsonrpc_clean src/jsonrpc_distclean src/jsonrpc_cleanall src/jsonrpc_info src/jsonrpc_makefiles src/jsonrpc
endif
all: $(addsuffix _all,$(TARGET_DIRS))
debug: $(addsuffix _debug,$(TARGET_DIRS))
smart: $(addsuffix _smart,$(TARGET_DIRS))

View File

@ -7,7 +7,7 @@ name=fcl-web
version=2.5.1
[target]
dirs=src/base src/webdata
dirs=src/base src/webdata src/jsonrpc
[require]
packages=fcl-base fcl-xml fcl-db fcl-json fcl-net

View File

@ -0,0 +1,93 @@
<?xml version="1.0"?>
<CONFIG>
<ProjectOptions>
<Version Value="7"/>
<General>
<Flags>
<MainUnitHasCreateFormStatements Value="False"/>
<Runnable Value="False"/>
</Flags>
<SessionStorage Value="InProjectDir"/>
<MainUnit Value="0"/>
<TargetFileExt Value=""/>
<Title Value="FPC JSON-RPC demo "/>
<ResourceType Value="res"/>
<UseXPManifest Value="True"/>
<Icon Value="0"/>
</General>
<VersionInfo>
<Language Value=""/>
<CharSet Value=""/>
<StringTable Comments="" CompanyName="" FileDescription="" FileVersion="" InternalName="" LegalCopyright="" LegalTrademarks="" OriginalFilename="" ProductName="" ProductVersion=""/>
</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="3">
<Item1>
<PackageName Value="WebLaz"/>
</Item1>
<Item2>
<PackageName Value="LCL"/>
</Item2>
<Item3>
<PackageName Value="FCL"/>
</Item3>
</RequiredPackages>
<Units Count="2">
<Unit0>
<Filename Value="demo.lpr"/>
<IsPartOfProject Value="True"/>
<UnitName Value="demo"/>
</Unit0>
<Unit1>
<Filename Value="wmdemo.pp"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="FPWebModule1"/>
<ResourceBaseClass Value="DataModule"/>
<UnitName Value="wmdemo"/>
</Unit1>
</Units>
</ProjectOptions>
<CompilerOptions>
<Version Value="8"/>
<SearchPaths>
<IncludeFiles Value="$(ProjOutDir)/"/>
</SearchPaths>
<Parsing>
<SyntaxOptions>
<UseAnsiStrings Value="True"/>
</SyntaxOptions>
</Parsing>
<Linking>
<Debugging>
<UseHeaptrc Value="True"/>
</Debugging>
</Linking>
<Other>
<CompilerPath Value="$(CompPath)"/>
</Other>
</CompilerOptions>
<Debugging>
<Exceptions Count="3">
<Item1>
<Name Value="EAbort"/>
</Item1>
<Item2>
<Name Value="ECodetoolError"/>
</Item2>
<Item3>
<Name Value="EFOpenError"/>
</Item3>
</Exceptions>
</Debugging>
</CONFIG>

View File

@ -0,0 +1,16 @@
program demo;
{$mode objfpc}{$H+}
uses
fpCGI, wmdemo;
// {$R *.res}
begin
Application.Title:='FPC JSON-RPC demo';
Application.Initialize;
Application.Run;
end.

View File

@ -0,0 +1 @@
{ "method": "echo", "params": ["Hello JSON-RPC"], "id": 1 }

View File

@ -0,0 +1,4 @@
[
{ "method": "echo", "params": ["Hello JSON-RPC 1"], "id": 1 },
{ "method": "echo", "params": ["Hello JSON-RPC 2"], "id": 2 }
]

View File

@ -0,0 +1,4 @@
[
{ "action": "test", "method": "echo", "data": ["Hello JSON-RPC 1"], "tid": 1 },
{ "action": "test", "method": "echo", "data": ["Hello JSON-RPC 2"], "tid": 2 }
]

View File

@ -0,0 +1 @@
{ "method": "echo", "params": ["Hello JSON-RPC"], "id": null }

View File

@ -0,0 +1,46 @@
object FPWebModule1: TFPWebModule1
OnCreate = DataModuleCreate
OldCreateOrder = False
Actions = <
item
Name = 'Manual'
Default = True
OnRequest = TFPWebActions0Request
end
item
Name = 'Dispatch'
Default = False
OnRequest = TFPWebActions1Request
end
item
Name = 'Registered'
Default = False
OnRequest = TFPWebActions2Request
end
item
Name = 'ExtDirect'
Default = False
OnRequest = TFPWebActions3Request
end
item
Name = 'Content'
Default = False
OnRequest = TFPWebActions4Request
end
item
Name = 'ExtDirectAPI'
Default = False
OnRequest = TFPWebActions5Request
end
item
Name = 'Module'
Default = False
OnRequest = TFPWebActions6Request
end>
ActionVar = 'Action'
CreateSession = False
Height = 260
HorizontalOffset = 578
VerticalOffset = 373
Width = 442
end

View File

@ -0,0 +1,15 @@
{ This is an automatically generated lazarus resource file }
LazarusResources.Add('TFPWebModule1','FORMDATA',[
'TPF0'#13'TFPWebModule1'#12'FPWebModule1'#8'OnCreate'#7#16'DataModuleCreate'
+#14'OldCreateOrder'#8#7'Actions'#14#1#4'Name'#6#6'Manual'#7'Default'#9#9'OnR'
+'equest'#7#21'TFPWebActions0Request'#0#1#4'Name'#6#8'Dispatch'#7'Default'#8#9
+'OnRequest'#7#21'TFPWebActions1Request'#0#1#4'Name'#6#10'Registered'#7'Defau'
+'lt'#8#9'OnRequest'#7#21'TFPWebActions2Request'#0#1#4'Name'#6#9'ExtDirect'#7
+'Default'#8#9'OnRequest'#7#21'TFPWebActions3Request'#0#1#4'Name'#6#7'Content'
+#7'Default'#8#9'OnRequest'#7#21'TFPWebActions4Request'#0#1#4'Name'#6#12'ExtD'
+'irectAPI'#7'Default'#8#9'OnRequest'#7#21'TFPWebActions5Request'#0#1#4'Name'
+#6#6'Module'#7'Default'#8#9'OnRequest'#7#21'TFPWebActions6Request'#0#0#9'Act'
+'ionVar'#6#6'Action'#13'CreateSession'#8#6'Height'#3#4#1#16'HorizontalOffset'
+#3'B'#2#14'VerticalOffset'#3'u'#1#5'Width'#3#186#1#0#0
]);

View File

@ -0,0 +1,383 @@
unit wmdemo;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, LResources, HTTPDefs, websession, fpHTTP, fpWeb;
type
{ TFPWebModule1 }
TFPWebModule1 = class(TFPWebModule)
procedure DataModuleCreate(Sender: TObject);
procedure TFPWebActions0Request(Sender: TObject; ARequest: TRequest;
AResponse: TResponse; var Handled: Boolean);
procedure TFPWebActions1Request(Sender: TObject; ARequest: TRequest;
AResponse: TResponse; var Handled: Boolean);
procedure TFPWebActions2Request(Sender: TObject; ARequest: TRequest;
AResponse: TResponse; var Handled: Boolean);
procedure TFPWebActions3Request(Sender: TObject; ARequest: TRequest;
AResponse: TResponse; var Handled: Boolean);
procedure TFPWebActions4Request(Sender: TObject; ARequest: TRequest;
AResponse: TResponse; var Handled: Boolean);
procedure TFPWebActions5Request(Sender: TObject; ARequest: TRequest;
AResponse: TResponse; var Handled: Boolean);
procedure TFPWebActions6Request(Sender: TObject; ARequest: TRequest;
AResponse: TResponse; var Handled: Boolean);
private
{ private declarations }
public
{ public declarations }
end;
var
FPWebModule1: TFPWebModule1;
implementation
Uses fpjson,jsonparser,fpjsonrpc,webjsonrpc, fpextdirect;
{ TFPWebModule1 }
procedure TFPWebModule1.DataModuleCreate(Sender: TObject);
begin
end;
procedure TFPWebModule1.TFPWebActions0Request(Sender: TObject;
ARequest: TRequest; AResponse: TResponse; var Handled: Boolean);
{
Demo 1. Manually do everything.
Only a single method call is supported.
}
Var
P : TJSONParser;
Req,Res : TJSONData;
Env,O : TJSONObject;
M : TJSONStringType;
E : TJSONRPCEcho;
I : Integer;
ID : TJSONData;
Err : TJSONData;
begin
Res:=Nil;
Err:=Nil;
ID:=Nil;
try
P:=TJSONParser.Create(ARequest.Content);
try
Req:=P.Parse;
try
If Not (Req is TJSONObject) then
JSONRPCError(SErrRequestMustBeObject);
O:=(Req as TJSONObject);
I:=O.IndexOfName('id');
If (I=-1) then
JSONRPCError(SErrNoIDProperty);
ID:=O.Items[i].Clone;
if O.IndexOfName('method')=-1 then
JSONRPCError(SErrNoMethodName);
M:=O.Strings['method'];
If (m<>'echo') then
JSONRPCError('Only echo method is supported');
E:=TJSONRPCEcho.Create(Self);
try
I:=O.IndexOfName('params');
Res:=E.Execute(O.Items[i],Nil);
finally
E.Free;
end;
finally
Req.Free;
end;
finally
P.Free;
end;
except
On E : Exception do
Err:=TJSONObject.Create(['message',E.Message,'name',E.ClassName,'code',-1]);
end;
If Assigned(ID) and (ID.JSONType<>jtNull) then
begin
Env:=TJSONObject.Create();
try
If not Assigned(Res) then
Res:=TJSONNull.Create;
Env.Add('result',Res);
If (Err=Nil) then
Err:=TJSONNull.Create;
Env.Add('error',Err);
Env.Add('id',ID);
AResponse.Content:=Env.AsJSON;
finally
Env.Free;
end;
end;
AResponse.SendContent;
Handled:=True;
end;
procedure TFPWebModule1.TFPWebActions1Request(Sender: TObject;
ARequest: TRequest; AResponse: TResponse; var Handled: Boolean);
{
Demo 2. Use a dispatcher to dispatch the requests.
The handler is located on the owner module
(it is created run-time, though)
}
Var
Echohandler:TJSONRPCEcho;
Disp : TJSONRPCDispatcher;
P : TJSONParser;
Req,res : TJSONData;
O : TJSONRPCDispatchOptions;
begin
Echohandler:=TJSONRPCEcho.Create(Self);
try
EchoHandler.Name:='echo';
Disp:=TJSONRPCDispatcher.Create(Self);
try
O:=Disp.Options;
Include(O,jdoRequireClass);
Disp.Options:=O;
P:= TJSONParser.Create(ARequest.Content);
try
Req:=P.Parse;
try
Res:=Nil;
Res:=Disp.Execute(Req,Nil);
try
If Assigned(Res) then
begin
AResponse.Content:=Res.AsJSON;
end;
AResponse.SendContent;
Handled:=True;
finally
FreeAndNil(Res);
end;
finally
Req.Free;
end;
finally
P.Free;
end;
finally
Disp.Free;
end;
finally
EchoHandler.Free;
end;
end;
procedure TFPWebModule1.TFPWebActions2Request(Sender: TObject;
ARequest: TRequest; AResponse: TResponse; var Handled: Boolean);
{
Demo 3. Use a dispatcher to dispatch the requests,
The handler is registered in the JSONFPCHandlerManager.
(it is created run-time, though)
}
Var
Disp : TJSONRPCDispatcher;
P : TJSONParser;
Req,res : TJSONData;
O : TJSONRPCDispatchOptions;
begin
JSONRpcHandlerManager.RegisterHandler('','echo',TJSONRPCEcho);
try
Disp:=TJSONRPCDispatcher.Create(Self);
try
O:=Disp.Options;
Include(O,jdoSearchRegistry);
Disp.Options:=O;
P:= TJSONParser.Create(ARequest.Content);
try
Req:=P.Parse;
try
Res:=Nil;
Res:=Disp.Execute(Req,Nil);
try
If Assigned(Res) then
begin
AResponse.Content:=Res.AsJSON;
end;
AResponse.SendContent;
Handled:=True;
finally
FreeAndNil(Res);
end;
finally
Req.Free;
end;
finally
P.Free;
end;
finally
Disp.Free;
end;
finally
JSONRpcHandlerManager.UnRegisterHandler('','echo');
end;
end;
procedure TFPWebModule1.TFPWebActions3Request(Sender: TObject;
ARequest: TRequest; AResponse: TResponse; var Handled: Boolean);
{
Demo 4. Ext.Direct dispatcher
The handler is registered in the JSONFPCHandlerManager.
(it is created run-time, though)
}
Var
Disp : TExtDirectDispatcher;
P : TJSONParser;
Req,res : TJSONData;
O : TJSONRPCDispatchOptions;
begin
JSONRpcHandlerManager.RegisterHandler('test','echo',TJSONRPCEcho);
try
Disp:=TExtDirectDispatcher.Create(Self);
try
O:=Disp.Options;
Include(O,jdoSearchRegistry);
Disp.Options:=O;
P:= TJSONParser.Create(ARequest.Content);
try
Req:=P.Parse;
try
Res:=Nil;
Res:=Disp.Execute(Req,Nil);
try
If Assigned(Res) then
begin
AResponse.Content:=Res.AsJSON;
end;
AResponse.ContentLength:=Length(AResponse.Content);
AResponse.SendContent;
Handled:=True;
finally
FreeAndNil(Res);
end;
finally
Req.Free;
end;
finally
P.Free;
end;
finally
Disp.Free;
end;
finally
JSONRpcHandlerManager.UnRegisterHandler('','echo');
end;
end;
procedure TFPWebModule1.TFPWebActions4Request(Sender: TObject;
ARequest: TRequest; AResponse: TResponse; var Handled: Boolean);
{
Demo 5. Using a TJSONRPCContentProducer.
The handler is registered in the JSONFPCHandlerManager.
(it is created run-time, though)
}
Var
Cont : TJSONRPCContentProducer;
disp : TJSONRPCDispatcher;
begin
JSONRpcHandlerManager.RegisterHandler('test','echo',TJSONRPCEcho);
try
Cont:=TJSONRPCContentProducer.Create(Self);
try
disp:=TJSONRPCDispatcher.Create(Cont);
Disp.Options:=Disp.OPtions+[jdoSearchRegistry];
Cont.Dispatcher:=Disp;
AResponse.ContentStream:=TMemoryStream.Create;
try
Cont.GetContent(ARequest,AResponse.ContentStream,Handled);
AResponse.ContentLength:=AResponse.ContentStream.Size;
If Handled then
AResponse.SendContent;
finally
AResponse.ContentStream.Free;
end;
finally
Cont.Free;
end;
finally
JSONRpcHandlerManager.UnRegisterHandler('','echo');
end;
end;
procedure TFPWebModule1.TFPWebActions5Request(Sender: TObject;
ARequest: TRequest; AResponse: TResponse; var Handled: Boolean);
{
Demo 6. creating an API response for Ext.Direct
The handler is registered in the JSONFPCHandlerManager.
(it is created run-time, though)
}
Var
D : TExtDirectDispatcher;
I : Integer;
begin
JSONRpcHandlerManager.RegisterHandler('test','echo',TJSONRPCEcho);
try
D:=TExtDirectDispatcher.Create(Self);
try
D.URL:=BaseURL+'ExtDirect';
D.Options:=D.Options+[jdoSearchRegistry];
AResponse.Content:=D.APIAsString;
AResponse.ContentLength:=Length(AResponse.Content);
finally
D.Free;
end;
finally
JSONRpcHandlerManager.UnRegisterHandler('','echo');
end;
end;
procedure TFPWebModule1.TFPWebActions6Request(Sender: TObject;
ARequest: TRequest; AResponse: TResponse; var Handled: Boolean);
{
Demo 6. Using a TJSONRPCModule instance to handle the request.
The handler is registered in the JSONFPCHandlerManager.
(it is created run-time, though)
}
Var
M : TJSONRPCModule;
begin
JSONRpcHandlerManager.RegisterHandler('test','echo',TJSONRPCEcho);
try
M:=TJSONRPCModule.CreateNew(Self,0);
try
M.HandleRequest(ARequest,AResponse);
Handled:=True;
finally
M.Free;
end;
finally
JSONRpcHandlerManager.UnRegisterHandler('','echo');
end;
end;
initialization
{$I wmdemo.lrs}
RegisterHTTPModule('echo', TFPWebModule1);
end.

View File

@ -35,6 +35,7 @@ begin
P.SourcePath.Add('src/base');
P.SourcePath.Add('src/webdata');
P.SourcePath.Add('src/jsonrpc');
T:=P.Targets.AddUnit('cgiapp.pp');
T.ResourceStrings:=true;
@ -152,13 +153,25 @@ begin
AddUnit('httpdefs');
AddUnit('fpextjs');
end;
T:=P.Targets.AddUnit('extjsjson.pp');
T:=P.Targets.AddUnit('extjsjson.pp');
With T.Dependencies do
begin
AddUnit('fpwebdata');
AddUnit('httpdefs');
AddUnit('fpextjs');
end;
T:=P.Targets.AddUnit('fpjsonrpc.pp');
T:=P.Targets.AddUnit('webjsonrpc.pp');
With T.Dependencies do
begin
AddUnit('fpjsonrpc');
end;
T:=P.Targets.AddUnit('fpextdirect.pp');
With T.Dependencies do
begin
AddUnit('fpjsonrpc');
AddUnit('webjsonrpc');
end;
{$ifndef ALLPACKAGES}
Run;
end;

View File

@ -258,6 +258,7 @@ begin
M:=TMemoryStream.Create;
DoGetContent(ARequest,M,Handled);
AResponse.ContentStream:=M;
AResponse.ContentLength:=M.Size;
end;
procedure THTTPContentProducer.DoGetContent(ARequest: TRequest; Content: TStream; Var Handled : Boolean);