I agree with Raul, and uncomfortable to try your script. If your handler is 
non-trivial you should define it inside a locale/class and export it to 
z-locale.

result of any wd command is always a string, ever since wd was first introduced 
some decades ago.

13.02.2014, в 9:08, Pascal Jasmin <godspiral2...@yahoo.ca> написал(а):

> the z locale is apparently necessary for the websockets handlers (which is 
> how J communicates with websockets).
> 
> The documentation is here: 
> http://www.jsoftware.com/jwiki/Guides/JqtWebsocket, and there are also demos 
> with j8.
> 
> If the handlers have to be in z, I might as well put the tracking list for 
> sockets and connections there, as the handlers need to access the tracking 
> lists in order to dispatch to the right code, and there can only be one 
> handler in program.
> 
> 
> I rely on some favorite utility verbs, that I keep in z.  Nothing else is in 
> z though.
> 
> " you can call it yourself if you wish to do so (and you couldmaintain your 
> own queue of commands to feed it, if you want that"
> 
> I'm surprised to hear this.  I assume J/QT would also "double call" it, if I 
> did.  Would probably cause its own problems.  Its possible that you are 
> describing a technique I don't know of, in maintaining my "own queue of 
> commands"
> 
> 
> 
> 
> ----- Original Message -----
> From: Raul Miller <rauldmil...@gmail.com>
> To: Programming forum <programm...@jsoftware.com>
> Cc: 
> Sent: Wednesday, February 12, 2014 7:52:43 PM
> Subject: Re: [Jprogramming] Qt websockets and doevents
> 
> I am a little uncomfortable, reading ad-hoc code in the 'z' locale. Why not
> use some other locale?
> 
> Also, I am not clear what you are asking for, with the event handler, but
> clearly you can call it yourself if you wish to do so (and you could
> maintain your own queue of commands to feed it, if you want that).
> 
> Thanks,
> 
> -- 
> Raul
> 
> 
> 
> On Wed, Feb 12, 2014 at 7:23 PM, Pascal Jasmin <godspiral2...@yahoo.ca>wrote:
> 
>> A minor wierdness with websockets is that connect returns a string socket,
>> whereas the event handlers have integer sockets.
>> 
>> I was hoping that 6!:2 allowed for event handlers to process messages, but
>> it doesn't appear to.  Does such a command exist?  A bit like the old vb
>> windows 3.1 doevents()/yield()
>> 
>> Anyways, if you load the included code listing, and run
>> 
>> testws a:
>> 
>> you will note that it fails to unload/close client sockets (line wd 'ws
>> query 1' returns open clients)
>> 
>> if you run the lines inside testws individually in repl, it works. (closes
>> everything)
>> 
>> 
>> 
>> cocurrent 'z'
>> wssockets =: i.0 NB.
>> wsconnections =: i.0
>> 
>> deleteitem_z_ =:  {. , >:@[ }. ]
>> defaults1 =: ([`]@.(0=#@>@[))
>> defaults =: defaults1"0 0 f.
>> fixlenx =: 1 : (':';'((#y) {. x) u y')
>> iorinf =: iorinf =: (#@[ _:^:= i.)
>> inl_z_ =: (cocurrent@] ".@] [)"1 0
>> pD_z_ =:  1!:2&2
>> 
>> wscln_handler_z_=: 3 : 0
>> 'evt sk'=. y
>> if. evt = jws_onMessage do.
>> smoutput 'client: ' wss0_jrx_
>> elseif. evt = jws_onOpen do.
>> smoutput 'connected ', ": sk
>> 'onOpen 1' inl wsconnections {~ wssockets i. sk
>> elseif. evt = jws_onClose do.
>> smoutput 'disconnected ' , ": sk
>> 'onClose 1' inl wsconnections {~ wssockets i. sk
>> elseif. evt = jws_onError do.
>> smoutput wsc0_jrx_
>> end.
>> EMPTY
>> )
>> 
>> wssvr_handler_z_=: 3 : 0
>> 'evt sk'=. y
>> if. evt = jws_onMessage do.
>> smoutput 'server: ' wss0_jrx_
>> NB.  assert. _1 ~: r
>> elseif. evt = jws_onOpen do.
>> smoutput 'Serv connected ', ": sk
>> NB. pD datatype sk
>> 'onOpen 1' inl ((sk);'server') conew 'wsconnection'
>> NB. 'onOpen 1' inl wsconnections {~ wssockets i. sk
>> elseif. evt = jws_onClose do.
>> smoutput 'Serv disconnected ' , ": sk
>> 'onClose 1' inl wsconnections {~ wssockets i. sk
>> elseif. evt = jws_onError do.
>> smoutput 'error ', wss0_jrx_
>> end.
>> EMPTY
>> )
>> 
>> addsockconn =: 4 : 0
>> pD 'adds'
>> pD wssockets_z_ =: wssockets_z_ , x
>> pD wsconnections_z_ =: wsconnections_z_ , y
>> )
>> delsock=: 3 : 0
>> if. _ > i =. y iorinf~ wssockets do.
>> wssockets =: i deleteitem wssockets
>> wsconnections =: i deleteitem wsconnections
>> end.
>> )
>> delconn=: 3 : 0
>> if. _ > i =. y iorinf~ wsconnections_z_ do.
>> wssockets_z_ =: i deleteitem wssockets_z_
>> wsconnections_z_ =: i deleteitem wsconnections_z_
>> end.
>> 
>> )
>> coclass 'wsconnection'
>> connected =: 0
>> create =: 3 : 0
>> 'socket conntype commands auth' =: y defaults fixlenx
>> a:;'client';'testcommands';'authserver'
>> pD 18!:5 ''
>> socket (addsockconn ]]) 18!:5 ''
>> )
>> createServer =: 3 : 0
>> 
>> )
>> onOpen =: 3 : 'connected =: 1'
>> onClose =: 3 : 0
>> connected =: 0
>> delconn 18!:5 ''
>> )
>> close =: 3 : 'wd ''ws close '', ": socket'
>> 
>> NB. ( [conntype = 'client'];[commandslocale];[authlocale])
>> new_wsconnection_ 'localhost 3000' ('addr port') > wsconnectionObj
>> new =: 4 : 0 NB. called for client connection
>> s =. 0 ". wd 'ws connect ws://', y
>> (s ; x) conew >18!:5 ''
>> )
>> 
>> NB. =========================================================
>> wd 'ws listen 3000'
>> cocurrent 'base'
>> testws =: 3 : 0
>> a: new_wsconnection_ 'localhost 3000'
>> a: new_wsconnection_ 'localhost 3000'
>> 6!:3 (2)
>> 'close 1' inl  '''client'' -: conntype' (] #~ inl) wsconnections_z_ NB.
>> closes all clients (cascades cleanup)
>> 6!:3 (1)
>> pD  'q0';wd 'ws query 0'
>> pD  'q1';wd 'ws query 1'
>> )
>> ----------------------------------------------------------------------
>> For information about J forums see http://www.jsoftware.com/forums.htm
>> 
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
> 
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to