Hi list,
New WebSocket(127.0.0.1:33022)WebSocket(127.0.0.1:33022)
ConnectionClosed: Connection closed while waiting for data.[ConnectionClosed signal: 'Connection closed while waiting for data.'] in Socket>>waitForDataFor:Socket>>waitForDataFor:ifClosed:ifTimedOut:Socket>>waitForDataFor:Socket>>receiveDataSignallingTimeout:into:startingAt:SocketStream>>receiveDataSocketStream>>nextWebSocket>>readMessage[[stream isConnected]whileTrue: [self readMessage.frameType = 255ifTrue: [stream close.^ self].self handleMessage: frameData type: frameType].nil] in [[[stream isConnected]whileTrue: [self readMessage.frameType = 255ifTrue: [stream close.^ self].self handleMessage: frameData type: frameType].nil]on: Errordo: [:ex | self handleError: ex]] in WebSocket>>runBlockClosure>>on:do:[[[stream isConnected]whileTrue: [self readMessage.frameType = 255ifTrue: [stream close.^ self].self handleMessage: frameData type: frameType].nil]on: Errordo: [:ex | self handleError: ex]] in WebSocket>>runBlockClosure>>ensure:WebSocket>>run[:req |��| ws |ws := req asWebSocket.ws timeout: 300.Transcript cr; show: 'New ' , ws.wsonMessage: [:data | mutexcritical: [socketsdo: [:s | s send: data]]].wsonClose: [Transcript cr; show: 'Closing ' , ws.mutexcritical: [socketsremove: wsifAbsent: []]].wsonError: [:ex |��Transcript cr; show: ws.Transcript cr; show: ex description.Transcript cr; show: ex signalerContext longStack].mutexcritical: [sockets add: ws].ws run] in WebSocket class>>exampleWebServer>>invokeAction:request:[selfinvokeAction: (action at: 2)request: request] in WebServer>>dispatchRequest:url:BlockClosure>>on:do:WebServer>>dispatchRequest:url:WebServer>>dispatchRequest:[| ssl |certNameifNil: [stream := SocketStream on: aSocket]ifNotNil: [ssl := Smalltalkat: #SqueakSSLifAbsent: [self error: 'SqueakSSL not installed'].stream := ssl secureSocketStream on: aSocket.[stream sslAccept: certName]on: Errordo: [^ stream destroy]].[aSocket isConnected]whileTrue: [stream peekifNil: [^ aSocket destroy].request := self newRequest.[request readFrom: stream]on: Errordo: [:ex |��(ex isKindOf: NetworkError)ifFalse: [[request send400Response]on: Errordo: [:ignore | nil]].^ aSocket destroy].self dispatchRequest: request].nil] in WebServer>>handleConnectionFrom:BlockClosure>>on:do:WebServer>>handleConnectionFrom:[self handleConnectionFrom: aSocket] in [[self handleConnectionFrom: aSocket]on: Errordo: [:ex | aSocket destroy].mutexcritical: [connectionsremove: Processor activeProcessifAbsent: []]] in [[[self handleConnectionFrom: aSocket]on: Errordo: [:ex | aSocket destroy].mutexcritical: [connectionsremove: Processor activeProcessifAbsent: []]]ensure: [aSocket destroy]] in WebServer>>asyncHandleConnectionFrom:BlockClosure>>on:do:[[self handleConnectionFrom: aSocket]on: Errordo: [:ex | aSocket destroy].mutexcritical: [connectionsremove: Processor activeProcessifAbsent: []]] in [[[self handleConnectionFrom: aSocket]on: Errordo: [:ex | aSocket destroy].mutexcritical: [connectionsremove: Processor activeProcessifAbsent: []]]ensure: [aSocket destroy]] in WebServer>>asyncHandleConnectionFrom:BlockClosure>>ensure:[[[self handleConnectionFrom: aSocket]on: Errordo: [:ex | aSocket destroy].mutexcritical: [connectionsremove: Processor activeProcessifAbsent: []]]ensure: [aSocket destroy]] in WebServer>>asyncHandleConnectionFrom:[self value.Processor terminateActive] in BlockClosure>>newProcessClosing WebSocket(127.0.0.1:33022)New WebSocket(127.0.0.1:33024)WebSocket(127.0.0.1:33024)ConnectionClosed: Connection closed while waiting for data.[ConnectionClosed signal: 'Connection closed while waiting for data.'] in Socket>>waitForDataFor:Socket>>waitForDataFor:ifClosed:ifTimedOut:Socket>>waitForDataFor:Socket>>receiveDataSignallingTimeout:into:startingAt:SocketStream>>receiveDataSocketStream>>nextWebSocket>>readMessage[[stream isConnected]whileTrue: [self readMessage.frameType = 255ifTrue: [stream close.^ self].self handleMessage: frameData type: frameType].nil] in [[[stream isConnected]whileTrue: [self readMessage.frameType = 255ifTrue: [stream close.^ self].self handleMessage: frameData type: frameType].nil]on: Errordo: [:ex | self handleError: ex]] in WebSocket>>runBlockClosure>>on:do:[[[stream isConnected]whileTrue: [self readMessage.frameType = 255ifTrue: [stream close.^ self].self handleMessage: frameData type: frameType].nil]on: Errordo: [:ex | self handleError: ex]] in WebSocket>>runBlockClosure>>ensure:WebSocket>>run[:req |��| ws |ws := req asWebSocket.ws timeout: 300.Transcript cr; show: 'New ' , ws.wsonMessage: [:data | mutexcritical: [socketsdo: [:s | s send: data]]].wsonClose: [Transcript cr; show: 'Closing ' , ws.mutexcritical: [socketsremove: wsifAbsent: []]].wsonError: [:ex |��Transcript cr; show: ws.Transcript cr; show: ex description.Transcript cr; show: ex signalerContext longStack].mutexcritical: [sockets add: ws].ws run] in WebSocket class>>exampleWebServer>>invokeAction:request:[selfinvokeAction: (action at: 2)request: request] in WebServer>>dispatchRequest:url:BlockClosure>>on:do:WebServer>>dispatchRequest:url:WebServer>>dispatchRequest:[| ssl |certNameifNil: [stream := SocketStream on: aSocket]ifNotNil: [ssl := Smalltalkat: #SqueakSSLifAbsent: [self error: 'SqueakSSL not installed'].stream := ssl secureSocketStream on: aSocket.[stream sslAccept: certName]on: Errordo: [^ stream destroy]].[aSocket isConnected]whileTrue: [stream peekifNil: [^ aSocket destroy].request := self newRequest.[request readFrom: stream]on: Errordo: [:ex |��(ex isKindOf: NetworkError)ifFalse: [[request send400Response]on: Errordo: [:ignore | nil]].^ aSocket destroy].self dispatchRequest: request].nil] in WebServer>>handleConnectionFrom:BlockClosure>>on:do:WebServer>>handleConnectionFrom:[self handleConnectionFrom: aSocket] in [[self handleConnectionFrom: aSocket]on: Errordo: [:ex | aSocket destroy].mutexcritical: [connectionsremove: Processor activeProcessifAbsent: []]] in [[[self handleConnectionFrom: aSocket]on: Errordo: [:ex | aSocket destroy].mutexcritical: [connectionsremove: Processor activeProcessifAbsent: []]]ensure: [aSocket destroy]] in WebServer>>asyncHandleConnectionFrom:BlockClosure>>on:do:[[self handleConnectionFrom: aSocket]on: Errordo: [:ex | aSocket destroy].mutexcritical: [connectionsremove: Processor activeProcessifAbsent: []]] in [[[self handleConnectionFrom: aSocket]on: Errordo: [:ex | aSocket destroy].mutexcritical: [connectionsremove: Processor activeProcessifAbsent: []]]ensure: [aSocket destroy]] in WebServer>>asyncHandleConnectionFrom:BlockClosure>>ensure:[[[self handleConnectionFrom: aSocket]on: Errordo: [:ex | aSocket destroy].mutexcritical: [connectionsremove: Processor activeProcessifAbsent: []]]ensure: [aSocket destroy]] in WebServer>>asyncHandleConnectionFrom:[self value.Processor terminateActive] in BlockClosure>>newProcessClosing WebSocket(127.0.0.1:33024)listener terminating, socket: waitingForConnectionlistener starting (interface: * port: 8080)The method SmalltalkImage platformName has been deprecated.Use Smalltalk os platformNameNew WebSocket(127.0.0.1:33026)WebSocket(127.0.0.1:33026)ConnectionClosed: Connection closed while waiting for data.[ConnectionClosed signal: 'Connection closed while waiting for data.'] in Socket>>waitForDataFor:Socket>>waitForDataFor:ifClosed:ifTimedOut:Socket>>waitForDataFor:Socket>>receiveDataSignallingTimeout:into:startingAt:SocketStream>>receiveDataSocketStream>>nextWebSocket>>readMessage[[stream isConnected]whileTrue: [self readMessage.frameType = 255ifTrue: [stream close.^ self].self handleMessage: frameData type: frameType].nil] in [[[stream isConnected]whileTrue: [self readMessage.frameType = 255ifTrue: [stream close.^ self].self handleMessage: frameData type: frameType].nil]on: Errordo: [:ex | self handleError: ex]] in WebSocket>>runBlockClosure>>on:do:[[[stream isConnected]whileTrue: [self readMessage.frameType = 255ifTrue: [stream close.^ self].self handleMessage: frameData type: frameType].nil]on: Errordo: [:ex | self handleError: ex]] in WebSocket>>runBlockClosure>>ensure:WebSocket>>run[:req |��| ws |ws := req asWebSocket.ws timeout: 300.Transcript cr; show: 'New ' , ws.wsonMessage: [:data | mutexcritical: [socketsdo: [:s | s send: data]]].wsonClose: [Transcript cr; show: 'Closing ' , ws.mutexcritical: [socketsremove: wsifAbsent: []]].wsonError: [:ex |��Transcript cr; show: ws.Transcript cr; show: ex description.Transcript cr; show: ex signalerContext longStack].mutexcritical: [sockets add: ws].ws run] in WebSocket class>>exampleWebServer>>invokeAction:request:[selfinvokeAction: (action at: 2)request: request] in WebServer>>dispatchRequest:url:BlockClosure>>on:do:WebServer>>dispatchRequest:url:WebServer>>dispatchRequest:[| ssl |certNameifNil: [stream := SocketStream on: aSocket]ifNotNil: [ssl := Smalltalkat: #SqueakSSLifAbsent: [self error: 'SqueakSSL not installed'].stream := ssl secureSocketStream on: aSocket.[stream sslAccept: certName]on: Errordo: [^ stream destroy]].[aSocket isConnected]whileTrue: [stream peekifNil: [^ aSocket destroy].request := self newRequest.[request readFrom: stream]on: Errordo: [:ex |��(ex isKindOf: NetworkError)ifFalse: [[request send400Response]on: Errordo: [:ignore | nil]].^ aSocket destroy].self dispatchRequest: request].nil] in WebServer>>handleConnectionFrom:BlockClosure>>on:do:WebServer>>handleConnectionFrom:[self handleConnectionFrom: aSocket] in [[self handleConnectionFrom: aSocket]on: Errordo: [:ex | aSocket destroy].mutexcritical: [connectionsremove: Processor activeProcessifAbsent: []]] in [[[self handleConnectionFrom: aSocket]on: Errordo: [:ex | aSocket destroy].mutexcritical: [connectionsremove: Processor activeProcessifAbsent: []]]ensure: [aSocket destroy]] in WebServer>>asyncHandleConnectionFrom:BlockClosure>>on:do:[[self handleConnectionFrom: aSocket]on: Errordo: [:ex | aSocket destroy].mutexcritical: [connectionsremove: Processor activeProcessifAbsent: []]] in [[[self handleConnectionFrom: aSocket]on: Errordo: [:ex | aSocket destroy].mutexcritical: [connectionsremove: Processor activeProcessifAbsent: []]]ensure: [aSocket destroy]] in WebServer>>asyncHandleConnectionFrom:BlockClosure>>ensure:[[[self handleConnectionFrom: aSocket]on: Errordo: [:ex | aSocket destroy].mutexcritical: [connectionsremove: Processor activeProcessifAbsent: []]]ensure: [aSocket destroy]] in WebServer>>asyncHandleConnectionFrom:[self value.Processor terminateActive] in BlockClosure>>newProcessClosing WebSocket(127.0.0.1:33026)