plastkort 0 Posted July 31, 2019 hi!. This is perhaps not the best way to do it, but it sort of works for me, except that I am seems to receive some garbage characters and unwanted characters in the beginning of the received string. Am i doing something wrong? #$0081'~'#1'%{"table":"trade","action":"insert"}' and other garbage characters #$0081'~'#1#$18 is there a bug in TSSLWsocket or is this by design in json structure? I also have trouble receive very large json strings. it seem to be incomplete.. a workaround i have is to add lineend as #93#125 which is ]} are there other updated websocket libraries using TWSocket or indy ? i know there are one but its not maintenanced anymore Share this post Link to post
Angus Robertson 574 Posted July 31, 2019 TSSLWsocket receives a stream of bytes, perhaps you are not correctly converting them into a string, might be UTF8, UTF16, ANSI or anything really. No idea what websockets specifies. Are you using a unicode or ANSI Delphi, the websockets project was ANSI only. I'm not aware of any up to date websocket libraries for ICS. Angus Share this post Link to post
plastkort 0 Posted July 31, 2019 I have allways used for example: ReceivedJSON := TSslWSocket(Sender).ReceiveStr; for receiving my strings in any project i had earlier using normal TWSocket.. but ssl is new to me... if you have other suggestion on how to receive the whole string im all ears Share this post Link to post
Angus Robertson 574 Posted July 31, 2019 For HTTP, the headers contain the content type and character set so it's easy to convert to a string, including entities like £, look at TSslHttpRest.TriggerRequestDone2 in OverbyteIcsSslHttpRest.pas: // convert response to correct codepage, including entities if (Pos ('text/', FContentType) = 1) or (Pos ('json', FContentType) <> 0) or (Pos ('javascript', FContentType) <> 0) or (Pos ('xml', FContentType) <> 0) then begin FResponseRaw := IcsHtmlToStr(FResponseStream, FContentType, true); end; But I have no idea if websockets provides the content type, and you've not said if you are using Unicode. Angus Share this post Link to post
Angus Robertson 574 Posted July 31, 2019 (edited) BTW, the Json you receive from a websocket or by HTTP may not contain any line endings, so using ReceiveStr is a bad idea, it may not return complete lines, that might explain why your json was corrupted if there was no line ending at the end. That is why the HTTP component receives content into a stream, and that stream is passed to IcsHtmlToStr to convert into something Delphi can handle. Angus Edited July 31, 2019 by Angus Robertson Share this post Link to post
plastkort 0 Posted July 31, 2019 ok, i will see if i can correct this.. i never really done much with streams before, but i will probably figure out sonthign Share this post Link to post