Development tools for GemStone might need to determine if a GemStone session was created from Glamorous Toolkit.
To support this when a RSR session is created from Glamorous Toolkit the session temp GT_GEMSTONE_SESSION_MARKER
to true in GtGemStoneGciConnector>>#setupRsrConnection:
setupRsrConnection: gsSession
<return: #RsrConnection>
| detailBytes initiator thePort token |
detailBytes := gsSession executeStringAndFetchResultByteArray:
'| acceptor port detailBytes |
acceptor := RsrGciAcceptConnection portRange: (10800 to: 10805).
acceptor ensureListening.
SessionTemps current
at: #PendingConnectionAcceptor
put: acceptor.
port := acceptor listeningPort.
detailBytes := ByteArray new: 18.
detailBytes unsigned16At: 1 put: port.
detailBytes
replaceFrom: 3
to: 18
with: acceptor token bytes.
detailBytes'
maxResultSize: 1024.
gsSession executeStringAndDetachNb: '| connection resolverClass |
connection := (SessionTemps current at: #PendingConnectionAcceptor) waitForConnection.
SessionTemps current removeKey: #PendingConnectionAcceptor.
"UNCOMMENT THESE LINES TO ADD TRACING TO RSR"
"connection log addSink: (RsrCustomSink action: [:message | GsFile gciLogServer: message ]).
connection log verbosity: connection log levelTrace."
"Add a merker indicating that the GemStone session was started from GT."
SessionTemps current at: #GT_GEMSTONE_SESSION_MARKER put: true.
GsFile gciLogServer: ''about to waitUntilClose''.
connection waitUntilClose.'.
thePort := detailBytes unsignedShortAt: 1 bigEndian: true.
token := RsrToken bytes: (detailBytes copyFrom: 3 to: 18).
initiator := RsrGciInitiateConnection host: host port: thePort token: token.
^ initiator connect
.
SessionTemps current
at: #GT_GEMSTONE_SESSION_MARKER
ifAbsent: [ false ]