'2010/02/09'에 해당되는 글 1

  1. 2010/02/09 LUA 를 이용한 RPC

LUA 를 이용한 RPC

전산 2010/02/09 10:16
코드 :
-- 함수 호출 핸들러
function CALL_HANDLER( tbl, ... )
  print( "function : " .. tbl.FUNC_NAME )
  a = {...}
  print( "args : " )
  for i = 1, #a do
    print( a[i] )
  end
end


-- tbl 에 호출러를 바인딩
function Bind( tbl )

  mt = {}
  mt.__index = function( tbl, key )

    -- 리턴할 함수 호출을 위한 임시객체
    local tmp = {}
    tmp.FUNC_NAME = key

    -- 핸들러 바인딩
    local inst = {}
    inst.__call = CALL_HANDLER
    setmetatable( tmp, inst )

    return tmp
  end

  setmetatable( tbl, mt )
end

obj = {}
Bind( obj )

obj.aa( "a", 3, 5 )

실행결과 :
$ lua-5.1 call.lua
function : aa
args :
a
3
5

CALL_HANDLER 에 장난을 쳐주면 RPC 로 동작할 수 있다. 확장시키면 리모트의 객체 참조 및 대입등도 가능한데 한번 해서 프로젝트에 적용해 보려다가 갑자기 이게 뭐하는 짓인가 싶어서 관둠.

메타프로그래밍이란건 일단 재밌는데다가 근사해 보이기도 하지만.. 사실은 제한적이고도 쓸데 없는, 사악한 것이 될 가능성이 큰 관계로 너무 빠져들지 않는게 좋다.
2010/02/09 10:16 2010/02/09 10:16