Module: VRDdeRequestServer

Includes:
VRDdeServer
Defined in:
lib/vr/vrdde.rb

Overview

by yukimi_sake

Constant Summary collapse

EXECUTEMETHOD =
"dderequest"
GMEM_DDESHARE =
0x2000

Constants included from DDElParam

DDElParam::FreeDDElParam, DDElParam::PackDDElParam, DDElParam::ReuseDDElParam, DDElParam::UnpackDDElParam

Constants included from VRDdeConversation

VRDdeConversation::WM_DDE_ACK, VRDdeConversation::WM_DDE_ADVISE, VRDdeConversation::WM_DDE_DATA, VRDdeConversation::WM_DDE_EXECUTE, VRDdeConversation::WM_DDE_INITIATE, VRDdeConversation::WM_DDE_POKE, VRDdeConversation::WM_DDE_REQUEST, VRDdeConversation::WM_DDE_TERMINATE, VRDdeConversation::WM_DDE_UNADVISE

Constants included from VRMessageHandler

VRMessageHandler::PREHANDLERSTR

Instance Method Summary collapse

Methods included from VRDdeServer

#addDDEAppTopic, #ddeserverinit, #delDDEAppTopic, #self__ddeInitiate, #self__ddeTerminate, #self_ddeinitiate, #self_ddeterminate

Methods included from DDElParam

#freeDDElParam, #packDDElParam, #reuseDDElParam, #unpackDDElParam

Methods included from VRDdeConversation

#sendDDEAck

Methods included from VRMessageHandler

#acceptEvents, #addHandler, #addNoRelayMessages, #controlmsg_dispatching, #deleteHandler, #msghandlerinit, #selfmsg_dispatching

Instance Method Details

#dderequestserverinitObject



234
235
236
237
# File 'lib/vr/vrdde.rb', line 234

def dderequestserverinit
  addEvent WM_DDE_REQUEST
  addHandler WM_DDE_REQUEST,"_dderequestinternal",MSGTYPE::ARGINTINT,nil
end

#self__dderequestinternal(shwnd, lparam) ⇒ Object



244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
# File 'lib/vr/vrdde.rb', line 244

def self__dderequestinternal(shwnd,lparam)
 cl=@_vr_clients[shwnd]
  raise "unknown dde client (not initiated)" unless cl
  cformat,aitem = unpackDDElParam(WM_DDE_REQUEST,lparam)
  raise "not supported this format" unless cformat == 1
  item = GAtom::GetName(aitem)
  ret=nil
  ret=selfmsg_dispatching(EXECUTEMETHOD,item,*cl)
  if ret.is_a?(DDEAckFlags) then
    freeDDElParam(WM_DDE_REQEST,lparam)
    sendDDEAck shwnd,aitem,(ret.retcode || 0),ret.ack,ret.busy
  else
    sendDDEData shwnd,lparam,ret
  end
end

#self_dderequest(item, shwnd, app, topic) ⇒ Object



259
# File 'lib/vr/vrdde.rb', line 259

def self_dderequest(item,shwnd,app,topic) end

#sendDDEData(shwnd, lp, data) ⇒ Object



226
227
228
229
230
231
232
# File 'lib/vr/vrdde.rb', line 226

def sendDDEData(shwnd,lp,data)
  raise "Data must be a String" unless data.is_a? String
  dDEDATA=[0xb000,ClipboardFormat::CF_TEXT,data+"\0"].pack("Ssa*")
  hData=GMEM::AllocStr(GMEM_DDESHARE,dDEDATA)
  lParam=reuseDDElParam lp,WM_DDE_REQUEST,WM_DDE_DATA,hData,HIWORD(lp)
  SMSG::PostMessage.call shwnd, WM_DDE_DATA, self.hWnd, lParam
end

#vrinitObject



239
240
241
242
# File 'lib/vr/vrdde.rb', line 239

def vrinit
  super
  dderequestserverinit
end