Very nice, and thank you for the feedback.

> On 28 Dec 2018, at 23:16, Jimmie Houchin <jlhouc...@gmail.com> wrote:
> 
> On 12/27/18 9:00 AM, Sven Van Caekenberghe wrote:
>> Hi Jimmie,
>> 
>>> On 27 Dec 2018, at 15:15, Jimmie Houchin <jlhouc...@gmail.com> wrote:
>>> 
>>> Hello,
>>> 
>>> I am wanting to subscribe to a perpetual stream of JSON data in my app. I 
>>> have failed to find an example which helps me understand       how to do 
>>> so. It may be there but I have not discovered it.
>>> 
>>> How do I do something like that? A curl example from the website.
>>> 
>>> curl \
>>>   -H "Authorization: abcdefg?????" \
>>>   "https://stream-mystreamingsite.com/stream?query=whatIwant";
>>> Response Headers
>>> HTTP/1.1 200 OK
>>> Access-Control-Allow-Headers: Authorization, Content-Type, 
>>> Accept-Datetime-Format
>>> Access-Control-Allow-Methods: PUT, PATCH, POST, GET, OPTIONS, DELETE
>>> Access-Control-Allow-Origin: *
>>> Content-Type: application/octet-stream
>>> 
>>> 
>>> After subscribing to the stream I will need to get and access the JSON data 
>>> so that my app can process it.
>>> 
>>> Any help and wisdom greatly appreciated.
>>> 
>>> Thanks.
>>> 
>>> Jimmie
>> The client and server part of the WebSockets extension to Zinc HTTP 
>> Components already supports similar functionality, so this is certainly 
>> doable.
>> 
>> Unless you can give me a public end point to test, I can only write some 
>> untested pseudo code.
>> 
>> | client reader |
>> client := ZnClient new.
>> client url: 'https://stream-mystreamingsite.com/stream?query=whatIwant'.
>> client streaming: true.
>> client headerAt: 'Authorization' put: 'xxx'.
>> client get.
>> reader := NeoJSONReader on: (ZnCharacterReadStream on: client contents).
>> [ reader atEnd] whileFalse: [ reader next ].
>> reader close.
>> client close.
>> 
>> Be sure to tell us how you got it working.
>> 
>> HTH,
>> 
>> Sven
> 
> Hello Sven,
> 
> Thanks for your help.
> 
> The server I am connecting to requires an account to access. But you provided 
> sufficient information to get me going. Thanks.
> 
> This is for a Trading Application. I am a ways off before ready for 
> releasing. I will open source when it is usable and cleaned up enough from 
> personal code.
> 
> Currently I have named it SmallTrader, hence the ST prefix for classes.
> 
> I have an STClient class which subclasses ZnClient and sets it up with the 
> necessary account authorization.
> 
> Below is the STPriceStream#mainLoop method.
> 
> Basically it is populating some OrderedCollections in the STPriceStream which 
> are available to the app's mainLoop.
> 
> It is working perfectly. I currently have it printing out data to stdout so 
> that I can watch the data it collects to visually understand what is 
> happening.
> 
> The connection below is the instance of the class which connects to this 
> specific broker. Since connections are specific to a broker I am putting all 
> of the parsing into ST objects such as STPrice and STCandle in the broker 
> specific class as it understands what the broker returns. This will allow my 
> app to be able to use different brokers simply by changing which connection 
> class we call. Currently I am writing for one specific one where my account 
> is located. But I want to be able to add brokers in time.
> 
> Thanks again for your help.
> 
> mainLoop
>     | delay pricesStream reader |
>     delay := (Duration milliSeconds: 100) asDelay.
>     minuteDateTime := STCandle datetimeMinute: (DateAndTime now asUTC).
>     pricesStream := connection newPriceStreamConnectionForInstruments: 
> instruments.
>     pricesStream get.
>     reader := STONReader on: (ZnCharacterReadStream on: pricesStream 
> contents).
>     [ reader atEnd] whileFalse: [
>         stop
>             ifFalse: [ | price |
>                 price := connection pricesStreamNextPrice: (reader next).
>                 price ifNotNil: [
>                     prices add: price.
>                     price datetimeMinute = minuteDateTime
>                         ifTrue: [ minutePrices add: price ]
>                         ifFalse: [ self processMinutePrices: price ]]]
>             ifTrue: [
>                 reader close
>                 ^ self ].
>         delay wait ].
> 
> 
> Jimmie


Reply via email to