&global-define memcache-lib "/tmp/memc/libmemcached.so.6"
&global-define memcache-call CDECL
&global-define MEMCACHED_SUCCESS 0
procedure memcached_create external {&memcache-lib} persistent {&memcache-call}:
define input parameter h-memc as long no-undo.
define return parameter h-new as long no-undo.
end procedure.
procedure memcached_server_add external {&memcache-lib} persistent {&memcache-call}:
define input parameter h-memc as long no-undo.
define input parameter srvHost as character no-undo.
define input parameter srvPort as long no-undo.
define return parameter retVal as long no-undo.
end procedure.
procedure memcached_servers_reset external {&memcache-lib} persistent {&memcache-call}:
define input parameter h-memc as long no-undo.
end.
procedure memcached_free external {&memcache-lib} persistent {&memcache-call}:
define input parameter h-memc as long no-undo.
end.
procedure memcached_get external {&memcache-lib} persistent {&memcache-call}:
define input parameter h-memc as long no-undo.
define input parameter strKey as character no-undo.
define input parameter keyLen as long no-undo.
define input parameter valLen as memptr no-undo.
define input parameter flags as memptr no-undo.
define input parameter h-err as memptr no-undo.
define return parameter valStr as memptr no-undo.
end procedure.
procedure memcached_set external {&memcache-lib} persistent {&memcache-call}:
define input parameter h-memc as long no-undo.
define input parameter strKey as character no-undo.
define input parameter keyLen as long no-undo.
define input parameter strVal as character no-undo.
define input parameter valLen as long no-undo.
define input parameter fTime as long no-undo.
define input parameter fExp as long no-undo.
define return parameter retVal as long no-undo.
end procedure.
procedure memcached_get_key:
define input parameter h-memc as integer no-undo.
define input parameter strKey as character no-undo.
define output parameter strVal as character no-undo initial ?.
def var memLen as memptr no-undo.
def var memFlg as memptr no-undo.
def var memErr as memptr no-undo.
def var memVal as memptr no-undo.
set-size(memLen) = 4.
set-size(memFlg) = 4.
set-size(memErr) = 4.
set-size(memVal) = 0.
put-long(memLen, 1) = 0.
put-long(memFlg, 1) = 0.
put-long(memErr, 1) = 0.
run memcached_get(h-memc, strKey, length(strKey, 'raw'),
memLen, memFlg, memErr,
output memVal).
if get-long(memErr, 1) eq 0 and
get-long(memLen, 1) gt 0 then
strVal = get-string(memVal, 1, get-long(memLen, 1)).
set-size(memLen) = 0.
set-size(memFlg) = 0.
set-size(memErr) = 0.
set-size(memVal) = 0.
end procedure.
procedure memcached_set_key:
define input parameter h-memc as integer no-undo.
define input parameter strKey as character no-undo.
define input parameter strVal as character no-undo.
define input parameter expTime as integer no-undo.
define input parameter optFlag as integer no-undo.
define output parameter retVal as logical no-undo.
define variable retCode as integer no-undo.
run memcached_set (h-memc, strKey, length(strKey, 'raw'),
strVal, length(strVal, 'raw'), expTime, optFlag,
output retCode).
retVal = retCode eq {&MEMCACHED_SUCCESS}.
end procedure.
def var h-memc as integer no-undo.
def var retCode as integer no-undo.
def var retVal as logical no-undo.
def var keyVal as character no-undo.
run memcached_create (0, output h-memc).
message h-memc view-as alert-box.
run memcached_server_add(h-memc, "localhost", 11211, output retCode).
message 'retVal' skip retCode view-as alert-box.
run memcached_set_key (h-memc, "toto", "tuareg", 60, 0, output retVal).
message 'set' skip retVal view-as alert-box.
run memcached_get_key (h-memc, "toto", output keyVal).
message 'get' skip keyVal view-as alert-box.
run memcached_free( h-memc) no-error.
message 'end' view-as alert-box.