diff --git a/repository/BaselineOfSeaside3.package/BaselineOfSeaside3.class/instance/baseline..st b/repository/BaselineOfSeaside3.package/BaselineOfSeaside3.class/instance/baseline..st index e21eb26bf..b2a45afe1 100644 --- a/repository/BaselineOfSeaside3.package/BaselineOfSeaside3.class/instance/baseline..st +++ b/repository/BaselineOfSeaside3.package/BaselineOfSeaside3.class/instance/baseline..st @@ -11,6 +11,7 @@ baseline: spec self baselinefilesystem: spec. self baselineadaptors: spec. self baselinecomet: spec. + self baselinewebsocket: spec. self baselinejavascript: spec. self baselinejquery: spec. self baselinejqueryui: spec. diff --git a/repository/BaselineOfSeaside3.package/BaselineOfSeaside3.class/instance/baselineadaptors..st b/repository/BaselineOfSeaside3.package/BaselineOfSeaside3.class/instance/baselineadaptors..st index 7207f12e7..3a691c59f 100644 --- a/repository/BaselineOfSeaside3.package/BaselineOfSeaside3.class/instance/baselineadaptors..st +++ b/repository/BaselineOfSeaside3.package/BaselineOfSeaside3.class/instance/baselineadaptors..st @@ -39,7 +39,15 @@ baselineadaptors: spec spec for: #pharo - do: [ + do: [ + spec + baseline: 'Zinc WebSockets' + with: [ + spec + className: 'BaselineOfZincHTTPComponents'; + loads: #('WebSocket'); + repository: 'github://svenvc/zinc:master/repository' ]. + spec package: 'Seaside-Adaptors-Comanche' with: [ spec requires: #('KomHttpServerLight' 'Seaside-Core') ]; package: 'KomHttpServerLight' with: [ spec repository: 'http://www.smalltalkhub.com/mc/Seaside/KomHttpServer/main' ]; @@ -56,7 +64,8 @@ baselineadaptors: spec spec for: #gemstone - do: [ spec + do: [ + spec project: 'FastCGI Project' with: [ spec className: 'ConfigurationOfGsFastCGI'; diff --git a/repository/BaselineOfSeaside3.package/BaselineOfSeaside3.class/instance/baselinegettext..st b/repository/BaselineOfSeaside3.package/BaselineOfSeaside3.class/instance/baselinegettext..st index 7c23fe78d..a4319c571 100644 --- a/repository/BaselineOfSeaside3.package/BaselineOfSeaside3.class/instance/baselinegettext..st +++ b/repository/BaselineOfSeaside3.package/BaselineOfSeaside3.class/instance/baselinegettext..st @@ -15,8 +15,7 @@ baselinegettext: spec with: [ spec requires: #('Seaside-Gettext-Examples') ]. spec group: 'Seaside-Gettext' with: #('Seaside-Gettext-Core'); - group: 'Gettext-Examples' - with: #('Seaside-Gettext' 'Seaside-Gettext-Examples'); + group: 'Gettext-Examples' with: #('Seaside-Gettext' 'Seaside-Gettext-Examples'); group: 'Tests' with: #('Seaside-Tests-Gettext-Core' 'Gettext-Examples') ]. spec diff --git a/repository/BaselineOfSeaside3.package/BaselineOfSeaside3.class/instance/baselinewebsocket..st b/repository/BaselineOfSeaside3.package/BaselineOfSeaside3.class/instance/baselinewebsocket..st new file mode 100644 index 000000000..8f26d2b67 --- /dev/null +++ b/repository/BaselineOfSeaside3.package/BaselineOfSeaside3.class/instance/baselinewebsocket..st @@ -0,0 +1,20 @@ +baselines +baselinewebsocket: spec + + spec for: #'pharo' do: [ + spec blessing: #baseline. + spec + package: 'Seaside-WebSocket-Core' with: [ + spec requires: #('Javascript-Core' 'Seaside-Canvas' ) ]; +" package: 'Seaside-WebSocket-Tests-Core' with: [ + spec requires: #('Javascript-Tests-Core' 'Seaside-WebSocket-Core' ) ];" + package: 'Seaside-WebSocket-Zinc' with:[ + spec requires: #('Zinc' 'Zinc WebSockets') ]; + package: 'Seaside-WebSocket-Examples' with: [ + spec requires: #('JQuery-Core' 'Seaside-WebSocket-Core') ]. + + spec + group: 'WebSocket' with: #('Seaside-WebSocket-Core' 'Seaside-WebSocket-Zinc'); +" group: 'WebSocket Tests' with: #('Seaside-WebSocket-Tests-Core' );" + group: 'Examples' with: #('Seaside-WebSocket-Examples' ) + "group: 'Tests' with: #('WebSocket Tests')" ] \ No newline at end of file diff --git a/repository/Seaside-Core.package/WARequestHandler.class/instance/handleFiltered..st b/repository/Seaside-Core.package/WARequestHandler.class/instance/handleFiltered..st index 0a567a997..6f591f6d3 100644 --- a/repository/Seaside-Core.package/WARequestHandler.class/instance/handleFiltered..st +++ b/repository/Seaside-Core.package/WARequestHandler.class/instance/handleFiltered..st @@ -1,5 +1,5 @@ handling handleFiltered: aRequestContext - "Handle aRequestContext by either dispatching to a different request handler of by producing a response and singalling the result." + "Handle aRequestContext by either dispatching to a different request handler of by producing a response and signalling the result." self subclassResponsibility \ No newline at end of file diff --git a/repository/Seaside-Tests-Pharo-Core.package/WAFileLibraryTest.extension/instance/runCase.st b/repository/Seaside-Tests-Pharo-Core.package/WAFileLibraryTest.extension/instance/runCase.st index 09ecb21ef..f9c704cf0 100644 --- a/repository/Seaside-Tests-Pharo-Core.package/WAFileLibraryTest.extension/instance/runCase.st +++ b/repository/Seaside-Tests-Pharo-Core.package/WAFileLibraryTest.extension/instance/runCase.st @@ -1,3 +1,3 @@ *Seaside-Tests-Pharo-Core runCase - GRPlatform current doSilently: [ super performTest ] \ No newline at end of file + GRPlatform current doSilently: [ super runCase ] \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/.filetree b/repository/Seaside-WebSocket-Core.package/.filetree new file mode 100644 index 000000000..57a679737 --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/.filetree @@ -0,0 +1,5 @@ +{ + "separateMethodMetaAndSource" : false, + "noMethodMetaData" : true, + "useCypressPropertiesFile" : true +} \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/JSWebSocket.class/README.md b/repository/Seaside-WebSocket-Core.package/JSWebSocket.class/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/repository/Seaside-WebSocket-Core.package/JSWebSocket.class/class/headerField.st b/repository/Seaside-WebSocket-Core.package/JSWebSocket.class/class/headerField.st new file mode 100644 index 000000000..96ec5db44 --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/JSWebSocket.class/class/headerField.st @@ -0,0 +1,3 @@ +configuration +headerField + ^ '_ws' \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/JSWebSocket.class/instance/close.st b/repository/Seaside-WebSocket-Core.package/JSWebSocket.class/instance/close.st new file mode 100644 index 000000000..cf3180a6b --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/JSWebSocket.class/instance/close.st @@ -0,0 +1,3 @@ +initialize-release +close + self call: 'close' \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/JSWebSocket.class/instance/defaultUrl.st b/repository/Seaside-WebSocket-Core.package/JSWebSocket.class/instance/defaultUrl.st new file mode 100644 index 000000000..5bb37be0d --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/JSWebSocket.class/instance/defaultUrl.st @@ -0,0 +1,5 @@ +printing +defaultUrl + ^ self renderContext actionUrl + addField: self class headerField + value: self pusher id \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/JSWebSocket.class/instance/filter.st b/repository/Seaside-WebSocket-Core.package/JSWebSocket.class/instance/filter.st new file mode 100644 index 000000000..9ddfca0d2 --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/JSWebSocket.class/instance/filter.st @@ -0,0 +1,5 @@ +accessing +filter + ^ self session filters + detect: [ :each | each isWebSocketFilter ] + ifNone: [ self session addFilterFirst: WAWebSocketFilter new ] \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/JSWebSocket.class/instance/javascriptContentOn..st b/repository/Seaside-WebSocket-Core.package/JSWebSocket.class/instance/javascriptContentOn..st new file mode 100644 index 000000000..0391da7ec --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/JSWebSocket.class/instance/javascriptContentOn..st @@ -0,0 +1,8 @@ +printing +javascriptContentOn: aStream + "TODO: window.location should not be retrieved here..." + aStream + nextPutAll: 'new WebSocket(((window.location.protocol === "https:") ? "wss://" : "ws://") + window.location.host + '; + javascript: self url; + nextPut: $). + pusher ifNotNil:[ pusher websocketEventHandlerJavaScriptOn: aStream ] \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/JSWebSocket.class/instance/pusher..st b/repository/Seaside-WebSocket-Core.package/JSWebSocket.class/instance/pusher..st new file mode 100644 index 000000000..dbbce72e3 --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/JSWebSocket.class/instance/pusher..st @@ -0,0 +1,7 @@ +accessing +pusher: aPusher + self url: (self renderContext actionUrl + withField: self class headerField + value: (self filter + registerPusher: (pusher := aPusher) + context: self requestContext)) \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/JSWebSocket.class/instance/pusher.st b/repository/Seaside-WebSocket-Core.package/JSWebSocket.class/instance/pusher.st new file mode 100644 index 000000000..c3d12a826 --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/JSWebSocket.class/instance/pusher.st @@ -0,0 +1,3 @@ +accessing +pusher + ^ pusher \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/JSWebSocket.class/instance/send..st b/repository/Seaside-WebSocket-Core.package/JSWebSocket.class/instance/send..st new file mode 100644 index 000000000..75c29c468 --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/JSWebSocket.class/instance/send..st @@ -0,0 +1,3 @@ +initialize-release +send: anObject + self call: 'send' with: anObject \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/JSWebSocket.class/instance/url..st b/repository/Seaside-WebSocket-Core.package/JSWebSocket.class/instance/url..st new file mode 100644 index 000000000..e231da08a --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/JSWebSocket.class/instance/url..st @@ -0,0 +1,3 @@ +accessing +url: aUrl + url := aUrl \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/JSWebSocket.class/instance/url.st b/repository/Seaside-WebSocket-Core.package/JSWebSocket.class/instance/url.st new file mode 100644 index 000000000..66ca1a3a4 --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/JSWebSocket.class/instance/url.st @@ -0,0 +1,3 @@ +printing +url + ^ url ifNil: [ url := self defaultUrl ] \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/JSWebSocket.class/properties.json b/repository/Seaside-WebSocket-Core.package/JSWebSocket.class/properties.json new file mode 100644 index 000000000..4499675e8 --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/JSWebSocket.class/properties.json @@ -0,0 +1,14 @@ +{ + "commentStamp" : "", + "super" : "JSObject", + "category" : "Seaside-WebSocket-Core", + "classinstvars" : [ ], + "pools" : [ ], + "classvars" : [ ], + "instvars" : [ + "pusher", + "url" + ], + "name" : "JSWebSocket", + "type" : "normal" +} \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/WARenderer.extension/instance/websocket.st b/repository/Seaside-WebSocket-Core.package/WARenderer.extension/instance/websocket.st new file mode 100644 index 000000000..526cda8e7 --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/WARenderer.extension/instance/websocket.st @@ -0,0 +1,5 @@ +*Seaside-WebSocket-Core +websocket + ^ (JSWebSocket context: self context) + rendererClass: self species; + yourself \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/WARenderer.extension/properties.json b/repository/Seaside-WebSocket-Core.package/WARenderer.extension/properties.json new file mode 100644 index 000000000..acd07dda9 --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/WARenderer.extension/properties.json @@ -0,0 +1,3 @@ +{ + "name" : "WARenderer" +} \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/WARequest.extension/instance/isWebSocketSetupRequest.st b/repository/Seaside-WebSocket-Core.package/WARequest.extension/instance/isWebSocketSetupRequest.st new file mode 100644 index 000000000..563f78869 --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/WARequest.extension/instance/isWebSocketSetupRequest.st @@ -0,0 +1,9 @@ +*Seaside-WebSocket-Core +isWebSocketSetupRequest + "Return true when request can be considered a valid WebSocket setup request" + + ^ self isGet + and: [ (self headerAt: 'upgrade' ifAbsent: [ ^ false ]) asLowercase = 'websocket' + and: [ (self headerAt: 'connection' ifAbsent: [ ^ false ]) asLowercase = 'upgrade' + and: [ (self headerAt: 'sec-websocket-version' ifAbsent: [ ^ false ]) = '13' + and: [ self headers includesKey: 'sec-websocket-key' ] ] ] ] \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/WARequest.extension/properties.json b/repository/Seaside-WebSocket-Core.package/WARequest.extension/properties.json new file mode 100644 index 000000000..487b10fd3 --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/WARequest.extension/properties.json @@ -0,0 +1,3 @@ +{ + "name" : "WARequest" +} \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/WARequestContext.extension/instance/createWebSocket.st b/repository/Seaside-WebSocket-Core.package/WARequestContext.extension/instance/createWebSocket.st new file mode 100644 index 000000000..b594b87cb --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/WARequestContext.extension/instance/createWebSocket.st @@ -0,0 +1,4 @@ +*seaside-websocket-core +createWebSocket + self webSocket ifNotNil:[ Error signal: 'WAWebSocket already created' ]. + ^ self properties at: #webSocket put: (self webSocketCreator newWebSocketInRequestContext: self) \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/WARequestContext.extension/instance/webSocket.st b/repository/Seaside-WebSocket-Core.package/WARequestContext.extension/instance/webSocket.st new file mode 100644 index 000000000..2324d4cd9 --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/WARequestContext.extension/instance/webSocket.st @@ -0,0 +1,3 @@ +*seaside-websocket-core +webSocket + ^ self properties at: #webSocket ifAbsent:[ nil ] \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/WARequestContext.extension/instance/webSocketCreator..st b/repository/Seaside-WebSocket-Core.package/WARequestContext.extension/instance/webSocketCreator..st new file mode 100644 index 000000000..649237707 --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/WARequestContext.extension/instance/webSocketCreator..st @@ -0,0 +1,3 @@ +*seaside-websocket-core +webSocketCreator: aWebSocketCreator + self properties at: #webSocketCreator put: aWebSocketCreator \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/WARequestContext.extension/instance/webSocketCreator.st b/repository/Seaside-WebSocket-Core.package/WARequestContext.extension/instance/webSocketCreator.st new file mode 100644 index 000000000..e1d6747c9 --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/WARequestContext.extension/instance/webSocketCreator.st @@ -0,0 +1,3 @@ +*seaside-websocket-core +webSocketCreator + ^ self properties at: #webSocketCreator \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/WARequestContext.extension/properties.json b/repository/Seaside-WebSocket-Core.package/WARequestContext.extension/properties.json new file mode 100644 index 000000000..280d2e102 --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/WARequestContext.extension/properties.json @@ -0,0 +1,3 @@ +{ + "name" : "WARequestContext" +} \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/WARequestFilter.extension/instance/isWebSocketFilter.st b/repository/Seaside-WebSocket-Core.package/WARequestFilter.extension/instance/isWebSocketFilter.st new file mode 100644 index 000000000..f1a9f3e73 --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/WARequestFilter.extension/instance/isWebSocketFilter.st @@ -0,0 +1,3 @@ +*Seaside-WebSocket-Core +isWebSocketFilter + ^ false \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/WARequestFilter.extension/properties.json b/repository/Seaside-WebSocket-Core.package/WARequestFilter.extension/properties.json new file mode 100644 index 000000000..a11881226 --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/WARequestFilter.extension/properties.json @@ -0,0 +1,3 @@ +{ + "name" : "WARequestFilter" +} \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/WAWebSocket.class/README.md b/repository/Seaside-WebSocket-Core.package/WAWebSocket.class/README.md new file mode 100644 index 000000000..9c6482b0c --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/WAWebSocket.class/README.md @@ -0,0 +1 @@ +I am a WebSocket. \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/WAWebSocket.class/instance/initializeWithRequestContext..st b/repository/Seaside-WebSocket-Core.package/WAWebSocket.class/instance/initializeWithRequestContext..st new file mode 100644 index 000000000..9f346166f --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/WAWebSocket.class/instance/initializeWithRequestContext..st @@ -0,0 +1,5 @@ +initialization +initializeWithRequestContext: aRequestContext + + self initialize. + session := aRequestContext session. \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/WAWebSocket.class/instance/isConnected.st b/repository/Seaside-WebSocket-Core.package/WAWebSocket.class/instance/isConnected.st new file mode 100644 index 000000000..8eacdce33 --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/WAWebSocket.class/instance/isConnected.st @@ -0,0 +1,4 @@ +testing +isConnected + + self subclassResponsibility \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/WAWebSocket.class/instance/onClose..st b/repository/Seaside-WebSocket-Core.package/WAWebSocket.class/instance/onClose..st new file mode 100644 index 000000000..10a5cc66e --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/WAWebSocket.class/instance/onClose..st @@ -0,0 +1,4 @@ +callbacks +onClose: aBlock + + onClose := aBlock \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/WAWebSocket.class/instance/onError..st b/repository/Seaside-WebSocket-Core.package/WAWebSocket.class/instance/onError..st new file mode 100644 index 000000000..f6d67fbb7 --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/WAWebSocket.class/instance/onError..st @@ -0,0 +1,5 @@ +callbacks +onError: aOneArgumentBlock + + onError := aOneArgumentBlock + \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/WAWebSocket.class/instance/onMessage..st b/repository/Seaside-WebSocket-Core.package/WAWebSocket.class/instance/onMessage..st new file mode 100644 index 000000000..104c0489b --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/WAWebSocket.class/instance/onMessage..st @@ -0,0 +1,4 @@ +callbacks +onMessage: aOneArgumentBlock + + onMessage := aOneArgumentBlock \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/WAWebSocket.class/instance/run.st b/repository/Seaside-WebSocket-Core.package/WAWebSocket.class/instance/run.st new file mode 100644 index 000000000..5830c6483 --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/WAWebSocket.class/instance/run.st @@ -0,0 +1,5 @@ +running +run + "Run the WebSocket's input process." + + self subclassResponsibility \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/WAWebSocket.class/instance/send..st b/repository/Seaside-WebSocket-Core.package/WAWebSocket.class/instance/send..st new file mode 100644 index 000000000..a0af6d3a5 --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/WAWebSocket.class/instance/send..st @@ -0,0 +1,5 @@ +callbacks +send: aString + "Write data to the socket" + + self subclassResponsibility \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/WAWebSocket.class/instance/timeout..st b/repository/Seaside-WebSocket-Core.package/WAWebSocket.class/instance/timeout..st new file mode 100644 index 000000000..49091e0a4 --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/WAWebSocket.class/instance/timeout..st @@ -0,0 +1,4 @@ +callbacks +timeout: seconds + "Sets the underlying stream timeout." + self subclassResponsibility \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/WAWebSocket.class/instance/touchSession.st b/repository/Seaside-WebSocket-Core.package/WAWebSocket.class/instance/touchSession.st new file mode 100644 index 000000000..bf0604cb7 --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/WAWebSocket.class/instance/touchSession.st @@ -0,0 +1,7 @@ +private +touchSession + "Prevent session expiry." + + session ifNotNil: [ :s | + Transcript show:'Touch session ', s key;cr. + s application cache at: s key ifAbsent:[ ] ] \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/WAWebSocket.class/properties.json b/repository/Seaside-WebSocket-Core.package/WAWebSocket.class/properties.json new file mode 100644 index 000000000..f38d127d6 --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/WAWebSocket.class/properties.json @@ -0,0 +1,16 @@ +{ + "commentStamp" : "", + "super" : "WAObject", + "category" : "Seaside-WebSocket-Core", + "classinstvars" : [ ], + "pools" : [ ], + "classvars" : [ ], + "instvars" : [ + "session", + "onMessage", + "onClose", + "onError" + ], + "name" : "WAWebSocket", + "type" : "normal" +} \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/WAWebSocketCreator.class/README.md b/repository/Seaside-WebSocket-Core.package/WAWebSocketCreator.class/README.md new file mode 100644 index 000000000..4c7daac52 --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/WAWebSocketCreator.class/README.md @@ -0,0 +1 @@ +I create new instances of WebSocket. I abstract away the server specific ways to create new WebSockets. \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/WAWebSocketCreator.class/instance/newWebSocketInRequestContext..st b/repository/Seaside-WebSocket-Core.package/WAWebSocketCreator.class/instance/newWebSocketInRequestContext..st new file mode 100644 index 000000000..f5c862781 --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/WAWebSocketCreator.class/instance/newWebSocketInRequestContext..st @@ -0,0 +1,3 @@ +instance creation +newWebSocketInRequestContext: aRequestContext + ^ self socketClass basicNew initializeWithRequestContext: aRequestContext \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/WAWebSocketCreator.class/instance/socketClass.st b/repository/Seaside-WebSocket-Core.package/WAWebSocketCreator.class/instance/socketClass.st new file mode 100644 index 000000000..61274c5b6 --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/WAWebSocketCreator.class/instance/socketClass.st @@ -0,0 +1,3 @@ +instance creation +socketClass + self subclassResponsibility \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/WAWebSocketCreator.class/properties.json b/repository/Seaside-WebSocket-Core.package/WAWebSocketCreator.class/properties.json new file mode 100644 index 000000000..a00902622 --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/WAWebSocketCreator.class/properties.json @@ -0,0 +1,11 @@ +{ + "commentStamp" : "", + "super" : "WAObject", + "category" : "Seaside-WebSocket-Core", + "classinstvars" : [ ], + "pools" : [ ], + "classvars" : [ ], + "instvars" : [ ], + "name" : "WAWebSocketCreator", + "type" : "normal" +} \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/WAWebSocketFilter.class/README.md b/repository/Seaside-WebSocket-Core.package/WAWebSocketFilter.class/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/repository/Seaside-WebSocket-Core.package/WAWebSocketFilter.class/instance/createWebSocketForContext..st b/repository/Seaside-WebSocket-Core.package/WAWebSocketFilter.class/instance/createWebSocketForContext..st new file mode 100644 index 000000000..a08c36484 --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/WAWebSocketFilter.class/instance/createWebSocketForContext..st @@ -0,0 +1,10 @@ +processing +createWebSocketForContext: aRequestContext + | webSocket | + webSocket := aRequestContext createWebSocket. + (pushers + at: (aRequestContext request fields + at: JSWebSocket headerField + ifAbsent: [ ^ nil ])) + addSocket: webSocket. + \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/WAWebSocketFilter.class/instance/handleFiltered..st b/repository/Seaside-WebSocket-Core.package/WAWebSocketFilter.class/instance/handleFiltered..st new file mode 100644 index 000000000..84c9f6401 --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/WAWebSocketFilter.class/instance/handleFiltered..st @@ -0,0 +1,7 @@ +processing +handleFiltered: aRequestContext + (aRequestContext request isWebSocketSetupRequest) + ifFalse: [ ^ super handleFiltered: aRequestContext ]. + + self createWebSocketForContext: aRequestContext. + \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/WAWebSocketFilter.class/instance/initialize.st b/repository/Seaside-WebSocket-Core.package/WAWebSocketFilter.class/instance/initialize.st new file mode 100644 index 000000000..a9b632fc9 --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/WAWebSocketFilter.class/instance/initialize.st @@ -0,0 +1,4 @@ +initialization +initialize + super initialize. + pushers := Dictionary new \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/WAWebSocketFilter.class/instance/isWebSocketFilter.st b/repository/Seaside-WebSocket-Core.package/WAWebSocketFilter.class/instance/isWebSocketFilter.st new file mode 100644 index 000000000..e3f50178a --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/WAWebSocketFilter.class/instance/isWebSocketFilter.st @@ -0,0 +1,3 @@ +testing +isWebSocketFilter + ^ true \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/WAWebSocketFilter.class/instance/registerPusher.context..st b/repository/Seaside-WebSocket-Core.package/WAWebSocketFilter.class/instance/registerPusher.context..st new file mode 100644 index 000000000..eb78bd48f --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/WAWebSocketFilter.class/instance/registerPusher.context..st @@ -0,0 +1,4 @@ +public +registerPusher: aPusher context: aContext + pushers at: aPusher id put: aPusher. + ^ aPusher id \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/WAWebSocketFilter.class/properties.json b/repository/Seaside-WebSocket-Core.package/WAWebSocketFilter.class/properties.json new file mode 100644 index 000000000..87bda7af5 --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/WAWebSocketFilter.class/properties.json @@ -0,0 +1,13 @@ +{ + "commentStamp" : "", + "super" : "WARequestFilter", + "category" : "Seaside-WebSocket-Core", + "classinstvars" : [ ], + "pools" : [ ], + "classvars" : [ ], + "instvars" : [ + "pushers" + ], + "name" : "WAWebSocketFilter", + "type" : "normal" +} \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/WAWebSocketJSPusher.class/README.md b/repository/Seaside-WebSocket-Core.package/WAWebSocketJSPusher.class/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/repository/Seaside-WebSocket-Core.package/WAWebSocketJSPusher.class/instance/javascript..st b/repository/Seaside-WebSocket-Core.package/WAWebSocketJSPusher.class/instance/javascript..st new file mode 100644 index 000000000..b6856a608 --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/WAWebSocketJSPusher.class/instance/javascript..st @@ -0,0 +1,11 @@ +public +javascript: aBlock + + "Evaluate aBlock with an JSScript instance and pushes the resulting script-string aString to all associated websockets." + + | script | + script := (JSScript context: self renderContext) + rendererClass: self rendererClass; + yourself. + aBlock value: script. + self push: (String streamContents: [ :stream | stream javascript: script ]) \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/WAWebSocketJSPusher.class/instance/websocketEventHandlerJavaScriptOn..st b/repository/Seaside-WebSocket-Core.package/WAWebSocketJSPusher.class/instance/websocketEventHandlerJavaScriptOn..st new file mode 100644 index 000000000..9c908c021 --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/WAWebSocketJSPusher.class/instance/websocketEventHandlerJavaScriptOn..st @@ -0,0 +1,4 @@ +protected +websocketEventHandlerJavaScriptOn: aStream + aStream + nextPutAll: '.addEventListener(''message'', (event) => { Function(`"use strict";return (${event.data})`)(); })' \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/WAWebSocketJSPusher.class/properties.json b/repository/Seaside-WebSocket-Core.package/WAWebSocketJSPusher.class/properties.json new file mode 100644 index 000000000..6ec544913 --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/WAWebSocketJSPusher.class/properties.json @@ -0,0 +1,11 @@ +{ + "commentStamp" : "", + "super" : "WAWebSocketPusher", + "category" : "Seaside-WebSocket-Core", + "classinstvars" : [ ], + "pools" : [ ], + "classvars" : [ ], + "instvars" : [ ], + "name" : "WAWebSocketJSPusher", + "type" : "normal" +} \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/WAWebSocketPusher.class/README.md b/repository/Seaside-WebSocket-Core.package/WAWebSocketPusher.class/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/repository/Seaside-WebSocket-Core.package/WAWebSocketPusher.class/instance/addSocket..st b/repository/Seaside-WebSocket-Core.package/WAWebSocketPusher.class/instance/addSocket..st new file mode 100644 index 000000000..6206172aa --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/WAWebSocketPusher.class/instance/addSocket..st @@ -0,0 +1,3 @@ +accessing +addSocket: aWebSocket + mutex critical: [ sockets := sockets copyWith: aWebSocket ] \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/WAWebSocketPusher.class/instance/id.st b/repository/Seaside-WebSocket-Core.package/WAWebSocketPusher.class/instance/id.st new file mode 100644 index 000000000..41241a326 --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/WAWebSocketPusher.class/instance/id.st @@ -0,0 +1,3 @@ +accessing +id + ^ id \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/WAWebSocketPusher.class/instance/initialize.st b/repository/Seaside-WebSocket-Core.package/WAWebSocketPusher.class/instance/initialize.st new file mode 100644 index 000000000..c90bc3659 --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/WAWebSocketPusher.class/instance/initialize.st @@ -0,0 +1,6 @@ +initialization +initialize + super initialize. + mutex := GRPlatform current semaphoreClass forMutualExclusion. + sockets := Array new. + id := WAKeyGenerator current keyOfLength: 16. \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/WAWebSocketPusher.class/instance/mutex.st b/repository/Seaside-WebSocket-Core.package/WAWebSocketPusher.class/instance/mutex.st new file mode 100644 index 000000000..12461a057 --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/WAWebSocketPusher.class/instance/mutex.st @@ -0,0 +1,5 @@ +accessing +mutex + "Answer the mutex in use with the receiver." + + ^ mutex \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/WAWebSocketPusher.class/instance/push..st b/repository/Seaside-WebSocket-Core.package/WAWebSocketPusher.class/instance/push..st new file mode 100644 index 000000000..c850183e6 --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/WAWebSocketPusher.class/instance/push..st @@ -0,0 +1,5 @@ +protected +push: aString + "Push aString to all associated handlers." + + self mutex critical: [ (sockets := sockets select: [ :each | each isConnected ]) do:[ :each | each send: aString ] ] \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/WAWebSocketPusher.class/instance/renderContext.st b/repository/Seaside-WebSocket-Core.package/WAWebSocketPusher.class/instance/renderContext.st new file mode 100644 index 000000000..113977042 --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/WAWebSocketPusher.class/instance/renderContext.st @@ -0,0 +1,8 @@ +accessing-rendering +renderContext + "Answer a fake rendering context for this pusher." + + ^ WARenderContext new + document: (WAHtmlDocument on: (WriteStream on: String new)); + actionUrl: WAUrl new; + yourself \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/WAWebSocketPusher.class/instance/rendererClass..st b/repository/Seaside-WebSocket-Core.package/WAWebSocketPusher.class/instance/rendererClass..st new file mode 100644 index 000000000..ceb9af73a --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/WAWebSocketPusher.class/instance/rendererClass..st @@ -0,0 +1,3 @@ +accessing-rendering +rendererClass: aRendererClass + rendererClass := aRendererClass \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/WAWebSocketPusher.class/instance/rendererClass.st b/repository/Seaside-WebSocket-Core.package/WAWebSocketPusher.class/instance/rendererClass.st new file mode 100644 index 000000000..914851fdb --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/WAWebSocketPusher.class/instance/rendererClass.st @@ -0,0 +1,5 @@ +accessing-rendering +rendererClass + "Answer the default renderer for this pusher." + + ^ rendererClass ifNil: [ WARenderer default ] \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/WAWebSocketPusher.class/instance/sockets.st b/repository/Seaside-WebSocket-Core.package/WAWebSocketPusher.class/instance/sockets.st new file mode 100644 index 000000000..088247709 --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/WAWebSocketPusher.class/instance/sockets.st @@ -0,0 +1,5 @@ +accessing +sockets + "Answer the current list of sockets." + + ^ sockets \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/WAWebSocketPusher.class/instance/socketsDo..st b/repository/Seaside-WebSocket-Core.package/WAWebSocketPusher.class/instance/socketsDo..st new file mode 100644 index 000000000..e2af3b65d --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/WAWebSocketPusher.class/instance/socketsDo..st @@ -0,0 +1,4 @@ +protected +socketsDo: aOneArgumentBlock + self mutex critical: [ + sockets do: aOneArgumentBlock ] \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/WAWebSocketPusher.class/instance/websocketEventHandlerJavaScriptOn..st b/repository/Seaside-WebSocket-Core.package/WAWebSocketPusher.class/instance/websocketEventHandlerJavaScriptOn..st new file mode 100644 index 000000000..a5648f9ad --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/WAWebSocketPusher.class/instance/websocketEventHandlerJavaScriptOn..st @@ -0,0 +1,2 @@ +protected +websocketEventHandlerJavaScriptOn: aStream diff --git a/repository/Seaside-WebSocket-Core.package/WAWebSocketPusher.class/properties.json b/repository/Seaside-WebSocket-Core.package/WAWebSocketPusher.class/properties.json new file mode 100644 index 000000000..b3432e3db --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/WAWebSocketPusher.class/properties.json @@ -0,0 +1,18 @@ +{ + "commentStamp" : "", + "super" : "WAObject", + "category" : "Seaside-WebSocket-Core", + "classinstvars" : [ + "process" + ], + "pools" : [ ], + "classvars" : [ ], + "instvars" : [ + "mutex", + "rendererClass", + "sockets", + "id" + ], + "name" : "WAWebSocketPusher", + "type" : "normal" +} \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/WAWebSocketRequestHandler.class/README.md b/repository/Seaside-WebSocket-Core.package/WAWebSocketRequestHandler.class/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/repository/Seaside-WebSocket-Core.package/WAWebSocketRequestHandler.class/instance/handleFiltered..st b/repository/Seaside-WebSocket-Core.package/WAWebSocketRequestHandler.class/instance/handleFiltered..st new file mode 100644 index 000000000..56c32a7aa --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/WAWebSocketRequestHandler.class/instance/handleFiltered..st @@ -0,0 +1,5 @@ +handling +handleFiltered: aRequestContext + (aRequestContext request isWebSocketSetupRequest) + ifFalse:[ ^ super handleFiltered: aRequestContext ]. + self handleWebSocketSetup: aRequestContext createWebSocket in: aRequestContext \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/WAWebSocketRequestHandler.class/instance/handleWebSocketSetup.in..st b/repository/Seaside-WebSocket-Core.package/WAWebSocketRequestHandler.class/instance/handleWebSocketSetup.in..st new file mode 100644 index 000000000..93680e467 --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/WAWebSocketRequestHandler.class/instance/handleWebSocketSetup.in..st @@ -0,0 +1,4 @@ +handling +handleWebSocketSetup: aWAWebSocket in: aRequestContext + "Override on subclass to implement websocket setup" + self subclassResponsibility \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/WAWebSocketRequestHandler.class/properties.json b/repository/Seaside-WebSocket-Core.package/WAWebSocketRequestHandler.class/properties.json new file mode 100644 index 000000000..6d1b10082 --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/WAWebSocketRequestHandler.class/properties.json @@ -0,0 +1,11 @@ +{ + "commentStamp" : "", + "super" : "WARequestHandler", + "category" : "Seaside-WebSocket-Core", + "classinstvars" : [ ], + "pools" : [ ], + "classvars" : [ ], + "instvars" : [ ], + "name" : "WAWebSocketRequestHandler", + "type" : "normal" +} \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/monticello.meta/categories.st b/repository/Seaside-WebSocket-Core.package/monticello.meta/categories.st new file mode 100644 index 000000000..5b1259128 --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/monticello.meta/categories.st @@ -0,0 +1 @@ +self packageOrganizer ensurePackage: #'Seaside-WebSocket-Core' withTags: #()! diff --git a/repository/Seaside-WebSocket-Core.package/monticello.meta/initializers.st b/repository/Seaside-WebSocket-Core.package/monticello.meta/initializers.st new file mode 100644 index 000000000..e69de29bb diff --git a/repository/Seaside-WebSocket-Core.package/monticello.meta/package b/repository/Seaside-WebSocket-Core.package/monticello.meta/package new file mode 100644 index 000000000..1c87c5db1 --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/monticello.meta/package @@ -0,0 +1 @@ +(name 'Seaside-WebSocket-Core') \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Core.package/properties.json b/repository/Seaside-WebSocket-Core.package/properties.json new file mode 100644 index 000000000..6f31cf5a2 --- /dev/null +++ b/repository/Seaside-WebSocket-Core.package/properties.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Examples.package/.filetree b/repository/Seaside-WebSocket-Examples.package/.filetree new file mode 100644 index 000000000..57a679737 --- /dev/null +++ b/repository/Seaside-WebSocket-Examples.package/.filetree @@ -0,0 +1,5 @@ +{ + "separateMethodMetaAndSource" : false, + "noMethodMetaData" : true, + "useCypressPropertiesFile" : true +} \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Examples.package/WACounterModel.class/README.md b/repository/Seaside-WebSocket-Examples.package/WACounterModel.class/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/repository/Seaside-WebSocket-Examples.package/WACounterModel.class/instance/count..st b/repository/Seaside-WebSocket-Examples.package/WACounterModel.class/instance/count..st new file mode 100644 index 000000000..6ad83ee3e --- /dev/null +++ b/repository/Seaside-WebSocket-Examples.package/WACounterModel.class/instance/count..st @@ -0,0 +1,3 @@ +accessing +count: anInteger + count := anInteger \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Examples.package/WACounterModel.class/instance/count.st b/repository/Seaside-WebSocket-Examples.package/WACounterModel.class/instance/count.st new file mode 100644 index 000000000..d9f069431 --- /dev/null +++ b/repository/Seaside-WebSocket-Examples.package/WACounterModel.class/instance/count.st @@ -0,0 +1,3 @@ +accessing +count + ^ count \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Examples.package/WACounterModel.class/instance/decrease.st b/repository/Seaside-WebSocket-Examples.package/WACounterModel.class/instance/decrease.st new file mode 100644 index 000000000..187b93317 --- /dev/null +++ b/repository/Seaside-WebSocket-Examples.package/WACounterModel.class/instance/decrease.st @@ -0,0 +1,3 @@ +actions +decrease + count := count - 1 \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Examples.package/WACounterModel.class/instance/increase.st b/repository/Seaside-WebSocket-Examples.package/WACounterModel.class/instance/increase.st new file mode 100644 index 000000000..924ce64f0 --- /dev/null +++ b/repository/Seaside-WebSocket-Examples.package/WACounterModel.class/instance/increase.st @@ -0,0 +1,3 @@ +actions +increase + count := count + 1 \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Examples.package/WACounterModel.class/instance/initialize.st b/repository/Seaside-WebSocket-Examples.package/WACounterModel.class/instance/initialize.st new file mode 100644 index 000000000..8917e4d7f --- /dev/null +++ b/repository/Seaside-WebSocket-Examples.package/WACounterModel.class/instance/initialize.st @@ -0,0 +1,4 @@ +initialization +initialize + super initialize. + count := 0 \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Examples.package/WACounterModel.class/properties.json b/repository/Seaside-WebSocket-Examples.package/WACounterModel.class/properties.json new file mode 100644 index 000000000..585b02f40 --- /dev/null +++ b/repository/Seaside-WebSocket-Examples.package/WACounterModel.class/properties.json @@ -0,0 +1,13 @@ +{ + "commentStamp" : "", + "super" : "GRObject", + "category" : "Seaside-WebSocket-Examples", + "classinstvars" : [ ], + "pools" : [ ], + "classvars" : [ ], + "instvars" : [ + "count" + ], + "name" : "WACounterModel", + "type" : "normal" +} \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Examples.package/WAWebSocketCounter.class/README.md b/repository/Seaside-WebSocket-Examples.package/WAWebSocketCounter.class/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/repository/Seaside-WebSocket-Examples.package/WAWebSocketCounter.class/class/initialize.st b/repository/Seaside-WebSocket-Examples.package/WAWebSocketCounter.class/class/initialize.st new file mode 100644 index 000000000..03391f4f3 --- /dev/null +++ b/repository/Seaside-WebSocket-Examples.package/WAWebSocketCounter.class/class/initialize.st @@ -0,0 +1,5 @@ +class initialization +initialize + | application | + application := WAAdmin register: self asApplicationAt: 'examples/websockets/counter'. + application addLibrary: JQDeploymentLibrary \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Examples.package/WAWebSocketCounter.class/class/model.st b/repository/Seaside-WebSocket-Examples.package/WAWebSocketCounter.class/class/model.st new file mode 100644 index 000000000..c5adc549b --- /dev/null +++ b/repository/Seaside-WebSocket-Examples.package/WAWebSocketCounter.class/class/model.st @@ -0,0 +1,3 @@ +accessing +model + ^ CounterModel ifNil: [ CounterModel := WACounterModel new ] \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Examples.package/WAWebSocketCounter.class/class/pusher.st b/repository/Seaside-WebSocket-Examples.package/WAWebSocketCounter.class/class/pusher.st new file mode 100644 index 000000000..42e608853 --- /dev/null +++ b/repository/Seaside-WebSocket-Examples.package/WAWebSocketCounter.class/class/pusher.st @@ -0,0 +1,3 @@ +accessing +pusher + ^ Pusher ifNil: [ Pusher := WAWebSocketJSPusher new ] \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Examples.package/WAWebSocketCounter.class/instance/decrease.st b/repository/Seaside-WebSocket-Examples.package/WAWebSocketCounter.class/instance/decrease.st new file mode 100644 index 000000000..856a50acd --- /dev/null +++ b/repository/Seaside-WebSocket-Examples.package/WAWebSocketCounter.class/instance/decrease.st @@ -0,0 +1,5 @@ +actions +decrease + + self model decrease. + self update: #decrease \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Examples.package/WAWebSocketCounter.class/instance/increase.st b/repository/Seaside-WebSocket-Examples.package/WAWebSocketCounter.class/instance/increase.st new file mode 100644 index 000000000..3d2485ba6 --- /dev/null +++ b/repository/Seaside-WebSocket-Examples.package/WAWebSocketCounter.class/instance/increase.st @@ -0,0 +1,5 @@ +actions +increase + + self model increase. + self update: #increase \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Examples.package/WAWebSocketCounter.class/instance/model.st b/repository/Seaside-WebSocket-Examples.package/WAWebSocketCounter.class/instance/model.st new file mode 100644 index 000000000..23d0987f5 --- /dev/null +++ b/repository/Seaside-WebSocket-Examples.package/WAWebSocketCounter.class/instance/model.st @@ -0,0 +1,3 @@ +accessing +model + ^ self class model \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Examples.package/WAWebSocketCounter.class/instance/pusher.st b/repository/Seaside-WebSocket-Examples.package/WAWebSocketCounter.class/instance/pusher.st new file mode 100644 index 000000000..1640f238b --- /dev/null +++ b/repository/Seaside-WebSocket-Examples.package/WAWebSocketCounter.class/instance/pusher.st @@ -0,0 +1,4 @@ +accessing +pusher + + ^ self class pusher \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Examples.package/WAWebSocketCounter.class/instance/renderContentOn..st b/repository/Seaside-WebSocket-Examples.package/WAWebSocketCounter.class/instance/renderContentOn..st new file mode 100644 index 000000000..820c5abb3 --- /dev/null +++ b/repository/Seaside-WebSocket-Examples.package/WAWebSocketCounter.class/instance/renderContentOn..st @@ -0,0 +1,18 @@ +rendering +renderContentOn: html + + html heading + id: #count; + with: self model count. + + html paragraph: [ + html anchor + onClick: (html jQuery ajax callback: [ self decrease ]); + with: 'dec'. + html space; space; space. + html anchor + onClick: (html jQuery ajax callback: [ self increase ]); + with: 'inc' ]. + + html document + addLoadScript: (html websocket pusher: self pusher) \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Examples.package/WAWebSocketCounter.class/instance/style.st b/repository/Seaside-WebSocket-Examples.package/WAWebSocketCounter.class/instance/style.st new file mode 100644 index 000000000..dfbcd2f97 --- /dev/null +++ b/repository/Seaside-WebSocket-Examples.package/WAWebSocketCounter.class/instance/style.st @@ -0,0 +1,15 @@ +hooks +style + ^ 'body { + color: #222; + font-size: 4em; + line-height: 1.5; + text-align: center; + font-family: "Helvetica Neue", Helvetica, Verdana, Arial, sans-serif; +} +h1 { font-weight: bold; } +a { + color: #555; + cursor: pointer; + text-decoration: none; +}' \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Examples.package/WAWebSocketCounter.class/instance/update..st b/repository/Seaside-WebSocket-Examples.package/WAWebSocketCounter.class/instance/update..st new file mode 100644 index 000000000..91d9de6d1 --- /dev/null +++ b/repository/Seaside-WebSocket-Examples.package/WAWebSocketCounter.class/instance/update..st @@ -0,0 +1,14 @@ +updating +update: anAspect + "Update the counter in all connected web browsers. + Only the first 3 lines are really needed, the rest adds some eye-candy and can simply be removed if not needed." + + self pusher javascript: [ :script | + script << (script jQuery: #count) + text: self model count; + append: [ :html | + html span: [ + html html: (anAspect = #increase + ifTrue: [ '↑' ] + ifFalse: [ '↓' ]) ] ]; + find: 'span'; fadeOut: 'slow' ] \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Examples.package/WAWebSocketCounter.class/properties.json b/repository/Seaside-WebSocket-Examples.package/WAWebSocketCounter.class/properties.json new file mode 100644 index 000000000..06b418119 --- /dev/null +++ b/repository/Seaside-WebSocket-Examples.package/WAWebSocketCounter.class/properties.json @@ -0,0 +1,14 @@ +{ + "commentStamp" : "", + "super" : "WAComponent", + "category" : "Seaside-WebSocket-Examples", + "classinstvars" : [ ], + "pools" : [ ], + "classvars" : [ + "CounterModel", + "Pusher" + ], + "instvars" : [ ], + "name" : "WAWebSocketCounter", + "type" : "normal" +} \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Examples.package/WAWebSocketExample.class/README.md b/repository/Seaside-WebSocket-Examples.package/WAWebSocketExample.class/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/repository/Seaside-WebSocket-Examples.package/WAWebSocketExample.class/class/initialize.st b/repository/Seaside-WebSocket-Examples.package/WAWebSocketExample.class/class/initialize.st new file mode 100644 index 000000000..de27e0bb0 --- /dev/null +++ b/repository/Seaside-WebSocket-Examples.package/WAWebSocketExample.class/class/initialize.st @@ -0,0 +1,3 @@ +initialization +initialize + WAAdmin register: self asApplicationAt: 'examples/websockets/basic-chat' \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Examples.package/WAWebSocketExample.class/instance/renderContentOn..st b/repository/Seaside-WebSocket-Examples.package/WAWebSocketExample.class/instance/renderContentOn..st new file mode 100644 index 000000000..9d9c80165 --- /dev/null +++ b/repository/Seaside-WebSocket-Examples.package/WAWebSocketExample.class/instance/renderContentOn..st @@ -0,0 +1,15 @@ +rendering +renderContentOn: html + html paragraph: 'I am a simple demonstration of Seaside-WebSocket basic usage: WAWebSocketExampleBroadcaster is a WARequestHandler that manages websocket connection requests and broadcasts any message received to all open websocket connections.'. + html paragraph + id: 'status'; + with: 'WebSocket: Not connected'. + html basicForm: [ + html textInput + id: 'chat'; + placeholder: 'type and press enter to chat' ]. + html paragraph: 'To test, open two windows with this example application, type a message above and press return. '. + html unorderedList + id: 'log'. + + self renderJavaScriptOn: html \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Examples.package/WAWebSocketExample.class/instance/renderJavaScriptOn..st b/repository/Seaside-WebSocket-Examples.package/WAWebSocketExample.class/instance/renderJavaScriptOn..st new file mode 100644 index 000000000..1355b7830 --- /dev/null +++ b/repository/Seaside-WebSocket-Examples.package/WAWebSocketExample.class/instance/renderJavaScriptOn..st @@ -0,0 +1,33 @@ +rendering +renderJavaScriptOn: html + html script: ' +var conn = {}; +var log = document.getElementById("log"); +var chat = document.getElementById("chat"); +var form = chat.form; +var state = document.getElementById("status"); + +if (window.WebSocket === undefined) { + state.innerHTML = "(WebSockets not supported)"; +} else { + conn = new WebSocket("ws://localhost:8080/broadcast"); + conn.onopen = function () { + state.innerHTML = "WebSocket: Connected"; + }; + + conn.onmessage = function (event) { + log.innerHTML = "
  • " + event.data + "
  • " + log.innerHTML; + }; + + conn.onclose = function (event) { + state.innerHTML = "WebSocket: Closed"; + }; + + form.addEventListener("submit", function (event) { + event.preventDefault(); + if (conn.readyState === 1) { + conn.send(chat.value); + chat.value = ""; + } + }, false); +};' \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Examples.package/WAWebSocketExample.class/instance/updateRoot..st b/repository/Seaside-WebSocket-Examples.package/WAWebSocketExample.class/instance/updateRoot..st new file mode 100644 index 000000000..cc22f3df7 --- /dev/null +++ b/repository/Seaside-WebSocket-Examples.package/WAWebSocketExample.class/instance/updateRoot..st @@ -0,0 +1,5 @@ +updating +updateRoot: root + super updateRoot: root. + root title: 'WebSocket Example' + \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Examples.package/WAWebSocketExample.class/properties.json b/repository/Seaside-WebSocket-Examples.package/WAWebSocketExample.class/properties.json new file mode 100644 index 000000000..9bfa2ff96 --- /dev/null +++ b/repository/Seaside-WebSocket-Examples.package/WAWebSocketExample.class/properties.json @@ -0,0 +1,11 @@ +{ + "commentStamp" : "", + "super" : "WAComponent", + "category" : "Seaside-WebSocket-Examples", + "classinstvars" : [ ], + "pools" : [ ], + "classvars" : [ ], + "instvars" : [ ], + "name" : "WAWebSocketExample", + "type" : "normal" +} \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Examples.package/WAWebSocketExampleBroadcaster.class/README.md b/repository/Seaside-WebSocket-Examples.package/WAWebSocketExampleBroadcaster.class/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/repository/Seaside-WebSocket-Examples.package/WAWebSocketExampleBroadcaster.class/class/description.st b/repository/Seaside-WebSocket-Examples.package/WAWebSocketExampleBroadcaster.class/class/description.st new file mode 100644 index 000000000..26ff7931c --- /dev/null +++ b/repository/Seaside-WebSocket-Examples.package/WAWebSocketExampleBroadcaster.class/class/description.st @@ -0,0 +1,3 @@ +accessing +description + ^ 'WebSocket example broadcaster' \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Examples.package/WAWebSocketExampleBroadcaster.class/class/initialize.st b/repository/Seaside-WebSocket-Examples.package/WAWebSocketExampleBroadcaster.class/class/initialize.st new file mode 100644 index 000000000..726989cd7 --- /dev/null +++ b/repository/Seaside-WebSocket-Examples.package/WAWebSocketExampleBroadcaster.class/class/initialize.st @@ -0,0 +1,3 @@ +initialization +initialize + WAAdmin register: self at: 'examples/websockets/broadcast' \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Examples.package/WAWebSocketExampleBroadcaster.class/instance/addSocket..st b/repository/Seaside-WebSocket-Examples.package/WAWebSocketExampleBroadcaster.class/instance/addSocket..st new file mode 100644 index 000000000..09200a095 --- /dev/null +++ b/repository/Seaside-WebSocket-Examples.package/WAWebSocketExampleBroadcaster.class/instance/addSocket..st @@ -0,0 +1,4 @@ +private +addSocket: aWebSocket + mutex critical: [ + sockets add: aWebSocket ] \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Examples.package/WAWebSocketExampleBroadcaster.class/instance/handleWebSocketSetup.in..st b/repository/Seaside-WebSocket-Examples.package/WAWebSocketExampleBroadcaster.class/instance/handleWebSocketSetup.in..st new file mode 100644 index 000000000..0f5d707b4 --- /dev/null +++ b/repository/Seaside-WebSocket-Examples.package/WAWebSocketExampleBroadcaster.class/instance/handleWebSocketSetup.in..st @@ -0,0 +1,19 @@ +handling +handleWebSocketSetup: aWAWebSocket in: aRequestContext + + "webSocket timeout: 300." "5 minutes timeout" + + Transcript cr; show: 'New ', aWAWebSocket printString. + + aWAWebSocket onMessage:[ :data | + self socketsDo: [ :socket | socket send: data ] ]. + + aWAWebSocket onClose:[ + Transcript cr; show: 'Closing ', aWAWebSocket printString. + self removeSocket: aWAWebSocket ]. + + aWAWebSocket onError:[ :exception | + Transcript cr; show: aWAWebSocket. + Transcript cr; show: exception description. + Transcript cr; show: exception signalerContext longStack ]. + self addSocket: aWAWebSocket. diff --git a/repository/Seaside-WebSocket-Examples.package/WAWebSocketExampleBroadcaster.class/instance/initialize.st b/repository/Seaside-WebSocket-Examples.package/WAWebSocketExampleBroadcaster.class/instance/initialize.st new file mode 100644 index 000000000..e208c9913 --- /dev/null +++ b/repository/Seaside-WebSocket-Examples.package/WAWebSocketExampleBroadcaster.class/instance/initialize.st @@ -0,0 +1,5 @@ +initialization +initialize + super initialize. + sockets := OrderedCollection new. + mutex := WAMutex new \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Examples.package/WAWebSocketExampleBroadcaster.class/instance/removeSocket..st b/repository/Seaside-WebSocket-Examples.package/WAWebSocketExampleBroadcaster.class/instance/removeSocket..st new file mode 100644 index 000000000..529d715c8 --- /dev/null +++ b/repository/Seaside-WebSocket-Examples.package/WAWebSocketExampleBroadcaster.class/instance/removeSocket..st @@ -0,0 +1,4 @@ +private +removeSocket: aWebSocket + mutex critical: [ + sockets remove: aWebSocket ifAbsent: [ ] ] \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Examples.package/WAWebSocketExampleBroadcaster.class/instance/socketsDo..st b/repository/Seaside-WebSocket-Examples.package/WAWebSocketExampleBroadcaster.class/instance/socketsDo..st new file mode 100644 index 000000000..30be3ddcd --- /dev/null +++ b/repository/Seaside-WebSocket-Examples.package/WAWebSocketExampleBroadcaster.class/instance/socketsDo..st @@ -0,0 +1,4 @@ +private +socketsDo: aOneArgumentBlock + mutex critical: [ + sockets do: aOneArgumentBlock ] \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Examples.package/WAWebSocketExampleBroadcaster.class/properties.json b/repository/Seaside-WebSocket-Examples.package/WAWebSocketExampleBroadcaster.class/properties.json new file mode 100644 index 000000000..f1e2bcf00 --- /dev/null +++ b/repository/Seaside-WebSocket-Examples.package/WAWebSocketExampleBroadcaster.class/properties.json @@ -0,0 +1,14 @@ +{ + "commentStamp" : "", + "super" : "WAWebSocketRequestHandler", + "category" : "Seaside-WebSocket-Examples", + "classinstvars" : [ ], + "pools" : [ ], + "classvars" : [ ], + "instvars" : [ + "sockets", + "mutex" + ], + "name" : "WAWebSocketExampleBroadcaster", + "type" : "normal" +} \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Examples.package/WAWebSocketSlider.class/README.md b/repository/Seaside-WebSocket-Examples.package/WAWebSocketSlider.class/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/repository/Seaside-WebSocket-Examples.package/WAWebSocketSlider.class/class/initialize.st b/repository/Seaside-WebSocket-Examples.package/WAWebSocketSlider.class/class/initialize.st new file mode 100644 index 000000000..41da85dd5 --- /dev/null +++ b/repository/Seaside-WebSocket-Examples.package/WAWebSocketSlider.class/class/initialize.st @@ -0,0 +1,8 @@ +accessing +initialize + | application | + application := WAAdmin register: self asApplicationAt: 'examples/websockets/slider'. + application + addLibrary: JQDevelopmentLibrary; + addLibrary: JQUiDevelopmentLibrary; + addLibrary: JQSmoothnessTheme \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Examples.package/WAWebSocketSlider.class/class/pusher.st b/repository/Seaside-WebSocket-Examples.package/WAWebSocketSlider.class/class/pusher.st new file mode 100644 index 000000000..42e608853 --- /dev/null +++ b/repository/Seaside-WebSocket-Examples.package/WAWebSocketSlider.class/class/pusher.st @@ -0,0 +1,3 @@ +accessing +pusher + ^ Pusher ifNil: [ Pusher := WAWebSocketJSPusher new ] \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Examples.package/WAWebSocketSlider.class/class/value..st b/repository/Seaside-WebSocket-Examples.package/WAWebSocketSlider.class/class/value..st new file mode 100644 index 000000000..3720685f6 --- /dev/null +++ b/repository/Seaside-WebSocket-Examples.package/WAWebSocketSlider.class/class/value..st @@ -0,0 +1,7 @@ +accessing +value: aNumber + Value := aNumber. + self pusher javascript: [ :script | + script << (script jQuery: #slider) slider + action: 'value' + arguments: (Array with: Value) ] \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Examples.package/WAWebSocketSlider.class/class/value.st b/repository/Seaside-WebSocket-Examples.package/WAWebSocketSlider.class/class/value.st new file mode 100644 index 000000000..c7294e66a --- /dev/null +++ b/repository/Seaside-WebSocket-Examples.package/WAWebSocketSlider.class/class/value.st @@ -0,0 +1,3 @@ +accessing +value + ^ Value ifNil: [ Value := 50 ] \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Examples.package/WAWebSocketSlider.class/instance/renderContentOn..st b/repository/Seaside-WebSocket-Examples.package/WAWebSocketSlider.class/instance/renderContentOn..st new file mode 100644 index 000000000..eec7ee7ab --- /dev/null +++ b/repository/Seaside-WebSocket-Examples.package/WAWebSocketSlider.class/instance/renderContentOn..st @@ -0,0 +1,12 @@ +rendering +renderContentOn: html + html div + id: #slider; + script: (html jQuery new slider + value: self class value; + onStop: (html jQuery ajax + callback: [ :value | self class value: value asNumber ] + value: (html jQuery this slider getValue))). + html document + addLoadScript: (html websocket + pusher: self class pusher) \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Examples.package/WAWebSocketSlider.class/properties.json b/repository/Seaside-WebSocket-Examples.package/WAWebSocketSlider.class/properties.json new file mode 100644 index 000000000..d9d9a7c8d --- /dev/null +++ b/repository/Seaside-WebSocket-Examples.package/WAWebSocketSlider.class/properties.json @@ -0,0 +1,14 @@ +{ + "commentStamp" : "", + "super" : "WAComponent", + "category" : "Seaside-WebSocket-Examples", + "classinstvars" : [ ], + "pools" : [ ], + "classvars" : [ + "Pusher", + "Value" + ], + "instvars" : [ ], + "name" : "WAWebSocketSlider", + "type" : "normal" +} \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Examples.package/monticello.meta/categories.st b/repository/Seaside-WebSocket-Examples.package/monticello.meta/categories.st new file mode 100644 index 000000000..43615c580 --- /dev/null +++ b/repository/Seaside-WebSocket-Examples.package/monticello.meta/categories.st @@ -0,0 +1 @@ +self packageOrganizer ensurePackage: #'Seaside-WebSocket-Examples' withTags: #()! diff --git a/repository/Seaside-WebSocket-Examples.package/monticello.meta/initializers.st b/repository/Seaside-WebSocket-Examples.package/monticello.meta/initializers.st new file mode 100644 index 000000000..e69de29bb diff --git a/repository/Seaside-WebSocket-Examples.package/monticello.meta/package b/repository/Seaside-WebSocket-Examples.package/monticello.meta/package new file mode 100644 index 000000000..e0d8ecafe --- /dev/null +++ b/repository/Seaside-WebSocket-Examples.package/monticello.meta/package @@ -0,0 +1 @@ +(name 'Seaside-WebSocket-Examples') \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Examples.package/properties.json b/repository/Seaside-WebSocket-Examples.package/properties.json new file mode 100644 index 000000000..6f31cf5a2 --- /dev/null +++ b/repository/Seaside-WebSocket-Examples.package/properties.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Zinc.package/.filetree b/repository/Seaside-WebSocket-Zinc.package/.filetree new file mode 100644 index 000000000..57a679737 --- /dev/null +++ b/repository/Seaside-WebSocket-Zinc.package/.filetree @@ -0,0 +1,5 @@ +{ + "separateMethodMetaAndSource" : false, + "noMethodMetaData" : true, + "useCypressPropertiesFile" : true +} \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Zinc.package/WAZincWebSocket.class/README.md b/repository/Seaside-WebSocket-Zinc.package/WAZincWebSocket.class/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/repository/Seaside-WebSocket-Zinc.package/WAZincWebSocket.class/class/on..st b/repository/Seaside-WebSocket-Zinc.package/WAZincWebSocket.class/class/on..st new file mode 100644 index 000000000..ad0c08954 --- /dev/null +++ b/repository/Seaside-WebSocket-Zinc.package/WAZincWebSocket.class/class/on..st @@ -0,0 +1,5 @@ +instance creation +on: aWebSocket + ^ self basicNew + initializeWith: aWebSocket; + yourself \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Zinc.package/WAZincWebSocket.class/instance/initializeWith..st b/repository/Seaside-WebSocket-Zinc.package/WAZincWebSocket.class/instance/initializeWith..st new file mode 100644 index 000000000..f15bebaa3 --- /dev/null +++ b/repository/Seaside-WebSocket-Zinc.package/WAZincWebSocket.class/instance/initializeWith..st @@ -0,0 +1,6 @@ +initialization +initializeWith: aZnWebSocket + + self initialize. + onClose := [ Transcript show: 'closing...' ]. + znWebSocket := aZnWebSocket \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Zinc.package/WAZincWebSocket.class/instance/isConnected.st b/repository/Seaside-WebSocket-Zinc.package/WAZincWebSocket.class/instance/isConnected.st new file mode 100644 index 000000000..f8b89ee7b --- /dev/null +++ b/repository/Seaside-WebSocket-Zinc.package/WAZincWebSocket.class/instance/isConnected.st @@ -0,0 +1,4 @@ +testing +isConnected + + ^ znWebSocket isConnected \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Zinc.package/WAZincWebSocket.class/instance/run.st b/repository/Seaside-WebSocket-Zinc.package/WAZincWebSocket.class/instance/run.st new file mode 100644 index 000000000..038215906 --- /dev/null +++ b/repository/Seaside-WebSocket-Zinc.package/WAZincWebSocket.class/instance/run.st @@ -0,0 +1,6 @@ +running +run + + [ znWebSocket runWith: [ :message | self touchSession. onMessage value: message ] ] + on: ConnectionClosed + do: [ :e | onClose ifNotNil:[ onClose cull: e ] ] \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Zinc.package/WAZincWebSocket.class/instance/send..st b/repository/Seaside-WebSocket-Zinc.package/WAZincWebSocket.class/instance/send..st new file mode 100644 index 000000000..42c77e3f0 --- /dev/null +++ b/repository/Seaside-WebSocket-Zinc.package/WAZincWebSocket.class/instance/send..st @@ -0,0 +1,6 @@ +callbacks +send: aString + + self isConnected ifFalse: [ ^ self ]. + self touchSession. + znWebSocket sendMessage: aString \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Zinc.package/WAZincWebSocket.class/instance/znWebSocket..st b/repository/Seaside-WebSocket-Zinc.package/WAZincWebSocket.class/instance/znWebSocket..st new file mode 100644 index 000000000..b21338aa3 --- /dev/null +++ b/repository/Seaside-WebSocket-Zinc.package/WAZincWebSocket.class/instance/znWebSocket..st @@ -0,0 +1,5 @@ +initialization +znWebSocket: aZnWebSocket + + znWebSocket := aZnWebSocket. + self run \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Zinc.package/WAZincWebSocket.class/properties.json b/repository/Seaside-WebSocket-Zinc.package/WAZincWebSocket.class/properties.json new file mode 100644 index 000000000..24afd6949 --- /dev/null +++ b/repository/Seaside-WebSocket-Zinc.package/WAZincWebSocket.class/properties.json @@ -0,0 +1,13 @@ +{ + "commentStamp" : "", + "super" : "WAWebSocket", + "category" : "Seaside-WebSocket-Zinc", + "classinstvars" : [ ], + "pools" : [ ], + "classvars" : [ ], + "instvars" : [ + "znWebSocket" + ], + "name" : "WAZincWebSocket", + "type" : "normal" +} \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Zinc.package/WAZincWebSocketCreator.class/README.md b/repository/Seaside-WebSocket-Zinc.package/WAZincWebSocketCreator.class/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/repository/Seaside-WebSocket-Zinc.package/WAZincWebSocketCreator.class/instance/socketClass.st b/repository/Seaside-WebSocket-Zinc.package/WAZincWebSocketCreator.class/instance/socketClass.st new file mode 100644 index 000000000..7635b0a32 --- /dev/null +++ b/repository/Seaside-WebSocket-Zinc.package/WAZincWebSocketCreator.class/instance/socketClass.st @@ -0,0 +1,3 @@ +instance creation +socketClass + ^ WAZincWebSocket \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Zinc.package/WAZincWebSocketCreator.class/properties.json b/repository/Seaside-WebSocket-Zinc.package/WAZincWebSocketCreator.class/properties.json new file mode 100644 index 000000000..ee3603234 --- /dev/null +++ b/repository/Seaside-WebSocket-Zinc.package/WAZincWebSocketCreator.class/properties.json @@ -0,0 +1,11 @@ +{ + "commentStamp" : "", + "super" : "WAWebSocketCreator", + "category" : "Seaside-WebSocket-Zinc", + "classinstvars" : [ ], + "pools" : [ ], + "classvars" : [ ], + "instvars" : [ ], + "name" : "WAZincWebSocketCreator", + "type" : "normal" +} \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Zinc.package/ZnSeasideWebSocketDelegate.class/README.md b/repository/Seaside-WebSocket-Zinc.package/ZnSeasideWebSocketDelegate.class/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/repository/Seaside-WebSocket-Zinc.package/ZnSeasideWebSocketDelegate.class/instance/webSocketResponseForRequest..st b/repository/Seaside-WebSocket-Zinc.package/ZnSeasideWebSocketDelegate.class/instance/webSocketResponseForRequest..st new file mode 100644 index 000000000..f82fa550e --- /dev/null +++ b/repository/Seaside-WebSocket-Zinc.package/ZnSeasideWebSocketDelegate.class/instance/webSocketResponseForRequest..st @@ -0,0 +1,11 @@ +protocol +webSocketResponseForRequest: request + "Given a valid WebSocket setup request, return the matching server response" + + | acceptKey | + acceptKey := ZnWebSocketUtils handshake: (request headers at: 'sec-websocket-key'). + ^ ZnWebSocketResponse new + statusLine: (ZnStatusLine code: 101); + headers: (self responseHeadersForKey: acceptKey); + continuation: self continuation; + yourself \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Zinc.package/ZnSeasideWebSocketDelegate.class/properties.json b/repository/Seaside-WebSocket-Zinc.package/ZnSeasideWebSocketDelegate.class/properties.json new file mode 100644 index 000000000..3f724a758 --- /dev/null +++ b/repository/Seaside-WebSocket-Zinc.package/ZnSeasideWebSocketDelegate.class/properties.json @@ -0,0 +1,11 @@ +{ + "commentStamp" : "", + "super" : "ZnWebSocketDelegate", + "category" : "Seaside-WebSocket-Zinc", + "classinstvars" : [ ], + "pools" : [ ], + "classvars" : [ ], + "instvars" : [ ], + "name" : "ZnSeasideWebSocketDelegate", + "type" : "normal" +} \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Zinc.package/ZnZincServerAdaptor.extension/instance/contextFor..st b/repository/Seaside-WebSocket-Zinc.package/ZnZincServerAdaptor.extension/instance/contextFor..st new file mode 100644 index 000000000..546d4c13a --- /dev/null +++ b/repository/Seaside-WebSocket-Zinc.package/ZnZincServerAdaptor.extension/instance/contextFor..st @@ -0,0 +1,7 @@ +*Seaside-WebSocket-Zinc +contextFor: aZnRequest + | context | + context := super contextFor: aZnRequest. + (context request isWebSocketSetupRequest) + ifTrue:[ context webSocketCreator: (WAZincWebSocketCreator new) ]. + ^ context \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Zinc.package/ZnZincServerAdaptor.extension/properties.json b/repository/Seaside-WebSocket-Zinc.package/ZnZincServerAdaptor.extension/properties.json new file mode 100644 index 000000000..51b7f9156 --- /dev/null +++ b/repository/Seaside-WebSocket-Zinc.package/ZnZincServerAdaptor.extension/properties.json @@ -0,0 +1,3 @@ +{ + "name" : "ZnZincServerAdaptor" +} \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Zinc.package/monticello.meta/categories.st b/repository/Seaside-WebSocket-Zinc.package/monticello.meta/categories.st new file mode 100644 index 000000000..209c3f011 --- /dev/null +++ b/repository/Seaside-WebSocket-Zinc.package/monticello.meta/categories.st @@ -0,0 +1 @@ +self packageOrganizer ensurePackage: #'Seaside-WebSocket-Zinc' withTags: #()! diff --git a/repository/Seaside-WebSocket-Zinc.package/monticello.meta/initializers.st b/repository/Seaside-WebSocket-Zinc.package/monticello.meta/initializers.st new file mode 100644 index 000000000..e69de29bb diff --git a/repository/Seaside-WebSocket-Zinc.package/monticello.meta/package b/repository/Seaside-WebSocket-Zinc.package/monticello.meta/package new file mode 100644 index 000000000..a827a185f --- /dev/null +++ b/repository/Seaside-WebSocket-Zinc.package/monticello.meta/package @@ -0,0 +1 @@ +(name 'Seaside-WebSocket-Zinc') \ No newline at end of file diff --git a/repository/Seaside-WebSocket-Zinc.package/properties.json b/repository/Seaside-WebSocket-Zinc.package/properties.json new file mode 100644 index 000000000..6f31cf5a2 --- /dev/null +++ b/repository/Seaside-WebSocket-Zinc.package/properties.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/repository/Seaside-Zinc-Core.package/ZnSeasideServerAdaptorDelegate.class/instance/handleRequest..st b/repository/Seaside-Zinc-Core.package/ZnSeasideServerAdaptorDelegate.class/instance/handleRequest..st index ea81f47d4..7bc9051d0 100644 --- a/repository/Seaside-Zinc-Core.package/ZnSeasideServerAdaptorDelegate.class/instance/handleRequest..st +++ b/repository/Seaside-Zinc-Core.package/ZnSeasideServerAdaptorDelegate.class/instance/handleRequest..st @@ -1,5 +1,5 @@ public handleRequest: znRequest "I pass a Zinc HTTP Components ZnRequest to my Seaside Server Adaptor using #process:" - + ^ self adaptor process: znRequest \ No newline at end of file diff --git a/repository/Seaside-Zinc-Core.package/ZnZincServerAdaptor.class/instance/responseFrom..st b/repository/Seaside-Zinc-Core.package/ZnZincServerAdaptor.class/instance/responseFrom..st index 560c00376..11ddd4f30 100644 --- a/repository/Seaside-Zinc-Core.package/ZnZincServerAdaptor.class/instance/responseFrom..st +++ b/repository/Seaside-Zinc-Core.package/ZnZincServerAdaptor.class/instance/responseFrom..st @@ -1,6 +1,9 @@ converting responseFrom: aRequestContext | partialHeaders cookies fullHeaders seasideResponse contents entity contentType | + "TODO: is websocket only... useful/needed to package in separate package?" + (aRequestContext properties at: #webSocket ifAbsent:[ nil ]) + ifNotNil:[ ^ self websocketResponseFrom: aRequestContext ]. seasideResponse := aRequestContext response. partialHeaders := seasideResponse headers. cookies := seasideResponse cookies. diff --git a/repository/Seaside-Zinc-Core.package/ZnZincServerAdaptor.class/instance/statusString.st b/repository/Seaside-Zinc-Core.package/ZnZincServerAdaptor.class/instance/statusString.st index 0a91a75f1..0eaba2c1c 100644 --- a/repository/Seaside-Zinc-Core.package/ZnZincServerAdaptor.class/instance/statusString.st +++ b/repository/Seaside-Zinc-Core.package/ZnZincServerAdaptor.class/instance/statusString.st @@ -1,4 +1,8 @@ accessing statusString - ^ 'zinc on port ', self port greaseString, - ( self isRunning ifTrue: [ ' [running]' ] ifFalse: [ ' [stopped]' ] ) \ No newline at end of file + + ^ 'Zinc on port {1} {2}' format: { + self port greaseString . + (self isRunning + ifTrue: [ ' [running]' ] + ifFalse: [ ' [stopped]' ]) } \ No newline at end of file diff --git a/repository/Seaside-Zinc-Core.package/ZnZincServerAdaptor.class/instance/websocketResponseFrom..st b/repository/Seaside-Zinc-Core.package/ZnZincServerAdaptor.class/instance/websocketResponseFrom..st new file mode 100644 index 000000000..248f8ce8c --- /dev/null +++ b/repository/Seaside-Zinc-Core.package/ZnZincServerAdaptor.class/instance/websocketResponseFrom..st @@ -0,0 +1,9 @@ +converting +websocketResponseFrom: aRequestContext + + | wsdelegate webSocket | + wsdelegate := (ZnSeasideWebSocketDelegate new handler: [ :ws | webSocket ifNotNil:[ :wasocket | wasocket znWebSocket: ws ] ]). + ((aRequestContext request isWebSocketSetupRequest) and: [ aRequestContext webSocket notNil ]) + ifTrue:[ + webSocket := aRequestContext webSocket. + ^ wsdelegate webSocketResponseForRequest: aRequestContext request ]