fixlenx was included, but fixlenx_z_ =: 1 : (':';'((#y) {. x) u y')
There's an ease of testing several connections by placing them in one file, but you can load the same file in multiple instances, and comment out the listen line from the "client-only" or listen on different ports. ----- Original Message ----- From: Raul Miller <rauldmil...@gmail.com> To: Programming forum <programm...@jsoftware.com> Cc: Sent: Thursday, February 13, 2014 12:43:16 AM Subject: Re: [Jprogramming] Qt websockets and doevents I tried this, or I thought I did, but: a: new_wsconnection_ 'localhost 3000' |value error: fixlenx | 'socket conntype commands auth'=:y defaults fixlenx a:;'client';'testcommands';'authserver' Do you intend for the client and the server to be the same instance of J? If so, why would you want that? If not, which parts go where? Thanks, -- Raul On Wed, Feb 12, 2014 at 10:38 PM, Pascal Jasmin <godspiral2...@yahoo.ca>wrote: > The code with no nouns in z. The server and client handlers do nothing > with messages other than print to console, and so there should be no > concern about running it. The code is there to exercise opening and > closing sockets. > > There is both a client and server loop handler, but as mentioned, nothing > is done onMessage in each. > > There are only 2 lines of code that are run: > > a: new_wsconnection_ 'localhost 3000' > > > creates a new client, that will also create a new server. 1 socket and > locale numbers are placed in array for each. > > 'close 1' inl '''client'' -: conntype' (] #~ inl) wsconnections_ws_ > > > That line has been commented out, but it does: For connections of conntype > 'client' that are in the connectionslist, close them. > > > I've narrowed down the issue to 6!:3 does not allow the server handler to > process messages. > 6!:3 also happens to not be necessary to get client handler to process. > These happen in order after connect. > You can confirm this by noticing the order of "Serv connect" prints in > console. These occur after the query 1 and query 0 regardless of the > length of delay in 6!:3 line. > The server messages process after code stops. > > > cocurrent 'ws' > wssockets =: i.0 NB. > wsconnections =: i.0 > > wscln_handler_z_ =: wscln_handler =: 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_ws_ {~ wssockets_ws_ i. sk > elseif. evt = jws_onClose do. > smoutput 'disconnected ' , ": sk > 'onClose 1' inl wsconnections_ws_ {~ wssockets_ws_ i. sk > elseif. evt = jws_onError do. > smoutput wsc0_jrx_ > end. > EMPTY > ) > > wssvr_handler_z_ =: wssvr_handler =: 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_ws_ {~ wssockets_ws_ i. sk > elseif. evt = jws_onError do. > smoutput 'error ', wss0_jrx_ > end. > EMPTY > ) > > addsockconn =: 4 : 0 > pD 'adds' > pD wssockets_ws_ =: wssockets_ws_ , x > pD wsconnections_ws_ =: wsconnections_ws_ , y > ) > delsock=: 3 : 0 > if. _ > i =. y iorinf~ wssockets do. > wssockets_ws_ =: i deleteitem wssockets_ws_ > wsconnections_ws_ =: i deleteitem wsconnections_ws_ > end. > ) > delconn=: 3 : 0 > if. _ > i =. y iorinf~ wsconnections_ws_ do. > wssockets_ws_ =: i deleteitem wssockets_ws_ > wsconnections_ws_ =: i deleteitem wsconnections_ws_ > end. > > ) > coclass 'wsconnection' > connected =: 0 > create =: 3 : 0 > 'socket conntype commands auth' =: y defaults fixlenx > a:;'client';'testcommands';'authserver' > pD 18!:5 '' > socket (addsockconn_ws_ ]]) 18!:5 '' > ) > createServer =: 3 : 0 > > ) > onOpen =: 3 : 'connected =: 1' > onClose =: 3 : 0 > connected =: 0 > delconn_ws_ 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 (0.2) > NB. 'close 1' inl '''client'' -: conntype' (] #~ inl) wsconnections_ws_ > NB. closes all clients (cascades cleanup) > NB.6!:3 (0.2) > pD wsconnections_ws_ ; wssockets_ws_ > pD 'q0';wd 'ws query 0' > pD 'q1';wd 'ws query 1' > ) > > cocurrent 'z' > deleteitem_z_ =: {. , >:@[ }. ] > defaults1 =: ([`]@.(0=#@>@[)) > defaults =: defaults1"0 0 f. > fixlenx =: 1 : (':';'((#y) {. x) u y') > iorinf =: (#@[ _:^:= i.) > inl_z_ =: (cocurrent@] ".@] [)"1 0 > pD_z_ =: 1!:2&2 > > > > ----- Original Message ----- > From: bill lam <bbill....@gmail.com> > To: "programm...@jsoftware.com" <programm...@jsoftware.com> > Cc: > Sent: Wednesday, February 12, 2014 8:51:46 PM > Subject: Re: [Jprogramming] Qt websockets and doevents > > 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) > >> > >> > >> > ---------------------------------------------------------------------- > 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