Cach├й DBMS 2013.1 рдореЗрдВ рдирдпрд╛: рдиреЗрдЯрд┐рд╡ рд╡реЗрдмрд╕реЙрдХ рд╕рдкреЛрд░реНрдЯ

рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ , рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдирд┐рдпрдорд┐рдд рд╕реЙрдХреЗрдЯреНрд╕ рдХреЗ рдКрдкрд░ рдЗрд╕ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕рд░реНрд╡рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ WebSocket рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреАред

Cach├й 2013.1 DBMS рдореЗрдВ, CSP рдЧреЗрдЯрд╡реЗ рдореЗрдВ рдЕрдм WebSocket рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП HTML 5 рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд▓рд┐рдП рд╡реЗрдм рд╕рд░реНрд╡рд░ рдФрд░ HTML 5 рд╕рдВрдЧрдд рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдмреАрдЪ рд╕рдорд░реНрдерди рд╢рд╛рдорд┐рд▓ рд╣реИред рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ Apache 2.2 рдФрд░ рдмрд╛рдж рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдФрд░ IIS 8.0 рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИ, рдЬреЛ рдХрд┐ рд╡рд┐рдВрдбреЛрдЬ рд╕рд░реНрд╡рд░ 2012 рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред

рдЪреВрдВрдХрд┐ Apache 2.4 рдкрд╣рд▓реЗ рд╕реЗ рд╣реА Cach├й 2013.1 рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╣рдо рдЗрд╕ рдкрд░ рдЕрдкрдиреЗ рдЙрджрд╛рд╣рд░рдг рдЪрд▓рд╛рдПрдВрдЧреЗред
рдХреНрд▓рд╛рдЗрдВрдЯ рднрд╛рдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, ZEN рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЖрдк рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ CSP рддрдХрдиреАрдХ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рддреЛ рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред

рд╕рд┐рджреНрдзрд╛рдВрдд


рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЕрдм Cach├й DBMS рдХреЗ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдореЗрдВ WebSocket рдХреЛ рд╕рдорд░реНрдерди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдЖрдВрддрд░рд┐рдХ рддрд░реНрдХ рдХреЛ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдХреЗрд╡рд▓ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рд╡рд░реНрдЧ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕реЗ % CSP.WebSocket рд╡рд░реНрдЧ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ , рдФрд░ рдЗрд╕рдореЗрдВ рдХрдИ рддрд░реАрдХреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдХреНрд▓рд╛рд╕ % CSP.WebSocket рдХрд╛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ WebSocket рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЗ рдмреАрдЪ рд╕рдВрдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рд╕рднреА WebSocket рд╕рд░реНрд╡рд░ рдХреЛ CSP.WebSocket% рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ ред
% CSP.WebSocket рд╡рд░реНрдЧ рдХреЗ рддрд░реАрдХреЛрдВ рдФрд░ рдЧреБрдгреЛрдВ рдХрд╛ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рдХрдХреНрд╖рд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдпрд╣рд╛рдБ рдореИрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдЙрдирдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ рдХреБрдЫ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░реВрдВрдЧрд╛:
рд╡рд┐рдзрд┐ / рд╕рдВрдкрддреНрддрд┐рд╡рд┐рд╡рд░рдг
рдкрдврд╝реЗрдВ ()рдПрдХ рдЧреНрд░рд╛рд╣рдХ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ
рд▓рд┐рдЦреЗрдВ ()рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдбреЗрдЯрд╛ рднреЗрдЬреЗрдВ
OnPreServer ()PreServer рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░: WebSocket рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
OnPostServer ()PostServer рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░: рдЬрдм WebSocket рд╕рд░реНрд╡рд░ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рд╕рд░реНрд╡рд░ ()WebSocket рд╕рд░реНрд╡рд░ рд╣реА
рдПрдВрдбрд╕рд░реНрд╡рд░ ()рд╡реЗрдмрд╕реИрдЯ рд╕рд░реНрд╡рд░ рдХреЛ рдмрдВрдж рдХрд░реЗрдВ
AtEndрдкреНрд░реЙрдкрд░реНрдЯреА рд╡реИрд▓реНрдпреВ рдХреЛ рд╕рд╣реА рдорд╛рдирддреА рд╣реИ (1) рдЬрдм, рдкрдврд╝рддреЗ рд╕рдордп, WebSocket рд╕рд░реНрд╡рд░ рд╡рд░реНрддрдорд╛рди рдбреЗрдЯрд╛ рдлреНрд░реЗрдо рдХреЗ рдЕрдВрдд рддрдХ рдкрд╣реБрдБрдЪ рдЬрд╛рддрд╛ рд╣реИ
SharedConnectionрдкреНрд░реЙрдкрд░реНрдЯреА рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ рдЧреНрд░рд╛рд╣рдХ рдФрд░ рд╡реЗрдмрд╕реНрдХреЗрдЯ рд╕рд░реНрд╡рд░ рдХреЗ рдмреАрдЪ рд╕реВрдЪрдирд╛рдУрдВ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рд╕реАрдПрд╕рдкреА рдЧреЗрдЯрд╡реЗ рдХреЗ рдПрдХ рд╕рдорд░реНрдкрд┐рдд рдХрдиреЗрдХреНрд╢рди рдкрд░ рдпрд╛ рд╕рд╛рдЭрд╛ рдХрдиреЗрдХреНрд╢рдиреЛрдВ рдХреЗ рдкреВрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрддрд╛ рд╣реИ (рдЕрднреА рддрдХ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)

рдЕрднреНрдпрд╛рд╕


рдЖрдЗрдП рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рд╕рдм рдХреИрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, USER рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдПрдХ ZEN рдкреЗрдЬ рдмрдирд╛рдПрдВ - рдбреЗрдореЛ.рд╡реЗрдмрдХреЗрдЯ рдХреНрд▓рд╛рд╕ - рдФрд░ рдЗрд╕реЗ % CSP.WebSocket рд╡рд░реНрдЧ рд╕реЗ рд╡рд╛рд░рд┐рд╕ рдХрд░реЗрдВ:
рдХреНрд▓рд╛рд╕ рдбреЗрдореЛ.рд╡реЗрдмрд╕реЙрдХреЗрдЯ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ ( % ZEN.Component.page , % CSP.WebSocket )
{

XData рд╕рд╛рдордЧреНрд░реА [ XMLNamespace = " www.intersystems.com/zen" ]
{
< рдкреЗрдЬ xmlns = " www.intersystems.com/zen" рд╢реАрд░реНрд╖рдХ = "" >
</ рдкреГрд╖реНрда >
}

}

JSON рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо zenCSLM.js рдлрд╝рд╛рдЗрд▓ рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реИрдВ :
рдкреИрд░рд╛рдореАрдЯрд░ JSINCLUDES = "zenCSLM.js" ;

рд╣рдо WebSocket рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реАрдХреЗ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ:
/// рдпрд╣ рдХреНрд▓рд╛рдЗрдВрдЯ рдЗрд╡реЗрдВрдЯ, рдпрджрд┐ рдореМрдЬреВрдж рд╣реИ, рддреЛ рдкреЗрдЬ рд▓реЛрдб рд╣реЛрдиреЗ рдкрд░ рдирд┐рдХрд╛рд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
ClientMethod onloadHandler () [ рднрд╛рд╖рд╛ = рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ]
{
ws = null;

url = ((window.location.protocol == 'https:' ) ? 'wss:' : 'ws:' ) + '//' + window.location.host + window.location.pathname;

wsCtor = рд╡рд┐рдВрдбреЛ [ 'MozWebSocket' ] ? MozWebSocket : рд╡рд┐рдВрдбреЛ [ 'WebSocket' ] ? WebSocket : рдЕрд╢рдХреНрдд;

рдЕрдЧрд░ (zenIsMissing (wsCtor)) zenAlert ( 'WebSocket рдЖрдкрдХреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ рд╣реИ!' );
}

ClientMethod start () [ рднрд╛рд╖рд╛ = рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ]
{
рдЕрдЧрд░ ( zenIsMissing (wsCtor)) {
рдЕрдЧрд░ (zenIsMissing (ws)) {
ws = new wsCtor (url);

ws.onopen = function () {
zenAlert ( 'onopen \ n \ nreadyState:' , ws.readyState, '\ nbinaryType:' , ws.binaryType, '\ nbufferedAmount:' , wb.bufferedAmount);
};

ws.onmessage = function (e) {
zenAlert (e.data);
};

ws.onclose = function (e) {
zenAlert ( 'onclose \ n \ nwasClean:' , e.wasClean, '\ ncode :' , e.code, '\ nreason:' , e.reason);
ws = null;
};

ws.onerror = function (e) {
zenAlert ( 'onerror' );
};
}
}
}

рдЪреВрдВрдХрд┐ WebSocket рд╕рд░реНрд╡рд░ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЙрд╕реА рдкреГрд╖реНрда рдкрд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдХрдиреЗрдХреНрд╢рди рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕рдорд╛рди рд╣реЛрдЧреАред рдпрд╛рдирд┐ рдЕрдЧрд░ рд╣рдорд╛рд░реЗ ZEN рдкреЗрдЬ рдХреЗ url рдХрд╛ рдлреЙрд░реНрдо рд╣реИ
localhost:57772/csp/user/demo.WebSocket.cls
, рддреЛ WebSocket рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╣реЛрдЧрд╛
ws://localhost:57772/csp/user/demo.WebSocket.cls

рдЕрдм рд╣рдорд╛рд░реЗ рдкреЗрдЬ рдореЗрдВ рдереЛрдбрд╝рд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЬреЛрдбрд╝реЗрдВ: рд╕рд░реНрд╡рд░ рд╕реЗ рдбреЗрдЯрд╛ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ, рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдФрд░ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдмрдЯрди:
XData рд╕рд╛рдордЧреНрд░реА [ XMLNamespace = " www.intersystems.com/zen" ]
{
< рдкреЗрдЬ xmlns = " www.intersystems.com/zen" рд╢реАрд░реНрд╖рдХ = "" >
< text id = "txt" рд▓реЗрдмрд▓ = "Text to" value = "World" /> рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП
< рдмрдЯрди рдХреИрдкреНрд╢рди = "1. рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ = "zenPage.start ();" />
< рдмрдЯрди рдХреИрдкреНрд╢рди = "2. рдкрд╛рда рднреЗрдЬреЗрдВ" onclick = "if (! zenIsMissing (ws)) ws.send (zenGetProp ('txt', 'value');") />
< рдмрдЯрди рдХреИрдкреНрд╢рди = "3. рдПрдХ рд▓рдВрдмреА рд▓рд╛рдЗрди рднреЗрдЬреЗрдВ" onclick = "zenPage.sendLongStr (100000);" />
< рдмрдЯрди рдХреИрдкреНрд╢рди = "4.Send JSON" onclick = "zenPage.sendJSON ();" />
< рдмрдЯрди рдХреИрдкреНрд╢рди = "5.Disable" onclick = "if (! zenIsMissing (ws)) ws.close ();" />
</ рдкреГрд╖реНрда >
}

SendLongStr рд╡рд┐рдзрд┐ рдХреЛрдб рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:
ClientMethod sendLongStr ( N ) [ рднрд╛рд╖рд╛ = рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ]
{
рдЕрдЧрд░ (zenIsMissing (ws)) рд╡рд╛рдкрд╕реА ;

var s = 'a' ;
for ( var i = 1 ; i < N; i ++ ) s + = 'a' ;
ws.send (s);
}

SendJSON рд╡рд┐рдзрд┐ рдХреЛрдб :
ClientMethod sendJSON () [ рднрд╛рд╖рд╛ = рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ]
{
рдЕрдЧрд░ (zenIsMissing (ws)) рд╡рд╛рдкрд╕реА ;

var obj = {
"рдлрд░реНрд╕реНрдЯрдирд╛рдо" : "рдЗрд╡рд╛рди" ,
"рдЕрдВрддрд┐рдо рдирд╛рдо" : "рдЗрд╡рд╛рдиреЛрд╡" ,
"рдкрддрд╛" : {
"рд╕реНрдЯреНрд░реАрдЯрдПрдбреНрд░реЗрд╕" : "рдореЙрд╕реНрдХреЛ рд░рд╛рдЬрдорд╛рд░реНрдЧ 101, рдЙрдкрдпреБрдХреНрдд 101" ред
"рд╢рд╣рд░" : "рд▓реЗрдирд┐рдирдЧреНрд░рд╛рдж" ,
"рдбрд╛рдХ рдХреЛрдб" : 101101
}
"рдлреЛрдирдиреНрдпреВрдЬ" : [
"812 123-1234" ,
"916 123-4567"
]
};

ws.send (ZLM.jsonStringify (obj));
}

рдпрд╣ рд╣рдорд╛рд░реЗ WebSocket рд╕рд░реНрд╡рд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдиреАрдЪреЗ рджрд┐рдЦрд╛рдП рдЧрдП рдЕрдиреБрд╕рд╛рд░ OnPreServer , OnPostServer рдФрд░ рд╕рд░реНрд╡рд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░реЗрдВ:
рд╡рд┐рдзрд┐ OnPreServer () % рд╕реНрдерд┐рддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ
{
$ рд╡реНрдпрд╡рд╕реНрдерд╛ рдХрд░реЛ ред рдЕрдирд┐рд░реНрдзрд╛рд░рд┐рдд (2)

рд╕реЗрдЯ ^ tmp ( $ рд╡реГрджреНрдзрд┐ ) (^ tmp), "OnPreServer" ) = ""
$ $ $ $ рдареАрдХ рд╣реИ
}

рд╡рд┐рдзрд┐ OnPostServer () % рд╕реНрдерд┐рддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ
{
рд╕реЗрдЯ ^ tmp ( $ рд╡реГрджреНрдзрд┐ ) (^ tmp), "OnPostServer" ) = ""
$ $ $ $ рдареАрдХ рд╣реИ
}

рд╡рд┐рдзрд┐ рд╕рд░реНрд╡рд░ () % рд╕реНрдерд┐рддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ
{
{рдХреЗ рд▓рд┐рдП

рд╕реЗрдЯ рд▓реЗрди = 32656
рд╕реЗрдЯ рдбреЗрдЯрд╛ = $ ZConvert (.. рдкрдврд╝реЗрдВ (? рд▓реЗрдиред рд╕реНрдерд┐рддрд┐ ред ), "рдореИрдВ" , "UTF8" )

рдпрджрд┐ $ $ $ ISOK ( рд╕реНрдерд┐рддрд┐ ) {

рдпрджрд┐ рдбреЗрдЯрд╛ = "рд╡рд┐рд╢реНрд╡" {
рдХрд░реЛ .. рд▓рд┐рдЦреЛ ( $ ZConvert ( "рд╣реИрд▓реЛ," _ рдбреЗрдЯрд╛ _ "!" , "O" , "UTF8" ))
} ElseIf data = "bye" {

; WebSocket рд╕рд░реНрд╡рд░ рдХрд╛ рдмрд▓ рд╢рдЯрдбрд╛рдЙрди рдФрд░ рдЕрдВрддрд╣реАрди рд▓реВрдк рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ
; рдЧреНрд░рд╛рд╣рдХ рдкрд░ рдХрд╛рдо рдХрд░реЗрдЧрд╛ onclose
рдХрд░реЛ .. рдПрдВрдбрд╕реНрд╡рд░ ()
рдЫреЛрдбрд╝рдирд╛

} рдПрд▓реНрд╕ {

#Dim obj as % RegisteredObject = $$$ NULLOREF

рд╕реЗрдЯ ^ tmp = $ рд╡реГрджреНрдзрд┐ (^ tmp)

; рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдмрджрд▓реЗрдВ
рдпрджрд┐ $$$ ISOK ( ## рд╡рд░реНрдЧ ( % ZEN.Auxiliary.jsonProvider )ред % ConvertJSONToObject ( рдбреЗрдЯрд╛ ,,ред Obj ) {ред

; рдпрджрд┐ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╕рдВрдкрддреНрддрд┐ рдорд╛рди рд╕рд╣реЗрдЬреЗрдВ
рд╕реЗрдЯ ^ tmp (^ tmp, "Server" , "firstName" ) = obj ред firstName
рд╕реЗрдЯ ^ tmp (^ tmp, "Server" , "lastName" ) = obj ред lastName
рд╕реЗрдЯ ^ tmp (^ tmp, "Server" , "address.streetAddress" ) = obj ред рдкрддрд╛ ред streetAddress
рд╕реЗрдЯ ^ tmp (^ tmp, "Server" , "address.city" ) = obj ред рдкрддрд╛ ред рд╢рд╣рд░
рд╕реЗрдЯ ^ tmp (^ tmp, "Server" , "address.postalCode" ) = obj ред рдкрддрд╛ ред PostalCode
рд╕реЗрдЯ ^ tmp (^ tmp, "Server" , "phoneNumbers" ) = obj ред рдлреЛрди рдирдВ ред GetAt (1)
рд╕реЗрдЯ ^ tmp (^ tmp, "Server" , "phoneNumbers.2" ) = obj ред рдлреЛрди рдирдВ ред GetAt (2)

; рдЙрдкрдирд╛рдо рдмрджрд▓реЗрдВ
Obj рд╕реЗрдЯ рдХрд░реЗрдВ ред рдЕрдВрддрд┐рдо рдирд╛рдо = "рд╕рд┐рджреЛрд░реЛрд╡"

; рдПрдХ рдФрд░ рдлреЛрди рдЬреЛрдбрд╝реЗрдВ
рдУрдмрдЬ рдХрд░ рджреЛ ред рдлреЛрди рдирдВ ред рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░реЗрдВ ( "111 111-1111" )

; рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рджреЛ рдФрд░ рдирдП рдЧреБрдг рдЬреЛрдбрд╝реЗрдВред
Obj рд╕реЗрдЯ рдХрд░реЗрдВ ред рдирд╛рдо = "рд╡рд╕реНрдпрд╛"
Obj рд╕реЗрдЯ рдХрд░реЗрдВ ред рд╕рдбрд╝рдХ = "17 рдореАрд░рд╛ рд╕реНрдЯреНрд░реАрдЯ"

; рд╣рдо рдмрджрд▓реЗ рд╣реБрдП рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд╡рд╛рдкрд╕ рднреЗрдЬрддреЗ рд╣реИрдВ
рдХрд░реЛ .. рд▓рд┐рдЦреЛ (.. Write2Str (ред Obj ))

} рдПрд▓реНрд╕ {

; рдПрдХ рд▓рдВрдмреА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╕рдордп рдбреЗрдЯрд╛ рд╕рд╣реЗрдЬреЗрдВ
рд╕реЗрдЯ ^ tmp (^ tmp, "Server" , "longStr" ) = .. AtEnd _ ":" _ $ рд▓рдВрдмрд╛рдИ ( рдбреЗрдЯрд╛ ) _ ":" _ len
}
}
} рдПрд▓реНрд╕ {
рдЫреЛрдбрд╝реЗрдВ :( $$$ GETERRORCODE ( рд╕реНрдерд┐рддрд┐ ) = $$$ CSPWebSocket ( рдмрдВрдж )
}
}
$ $ $ $ рдареАрдХ рд╣реИ
}

Write2Str рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдбреЗрдЯрд╛ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рд░рд╛рдЗрдЯ рдХрдорд╛рдВрдб рджреНрд╡рд╛рд░рд╛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
ClassMethod Write2Str ( ByRef obj ) % рд╕реНрдЯреНрд░рд┐рдВрдЧ [ рдирд┐рдЬреА ] рдХреЗ рд░реВрдк рдореЗрдВ
{
рдХреЛрд╢рд┐рд╢ рдХрд░реЛ {
рд╕реЗрдЯ рдХрд░реЗрдВ TIO = $ IO , tXDEV = "| XDEV |" _ + $ рдиреМрдХрд░реА
рдХрд░реЛ {

// $$$ IsUnicode рдХреЗ рд▓рд┐рдП UTF-8 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
рдУрдкрди tXDEV :( $ ZF (-6, $$$ XSLTLibrary , 12): "" : "S" : / HOSTNAME = "XSLT" : / IOT = $ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ ( $ $$ UUnicode : "UTF8" , 1: " : " RAW " ): / IBU = 16384: / OBU = 16384)
TXDEV рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

рдЫреЛрдбрд╝реЛ : $ $ $ ISERR ( obj ред % рдЯреЛрдЬрд╝рди (,, "рдПрд▓реЗрдУрд╡реА" ))

// рдХрд┐рд╕реА рднреА рд╢реЗрд╖ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдлреНрд▓рд╢ рдХрд░реЗрдВ
* -3 рд▓рд┐рдЦрд┐рдП

// рдЕрдм рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкрдврд╝реЗрдВ (рдЕрдзрд┐рдХрддрдо рд╕рдВрднрд╡ рд▓рдВрдмрд╛рдИ рддрдХ, рд▓рдВрдмреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП 32k рдпрд╛ ~ 4MB)
рд╕реЗрдЯ рдХрд░реЗрдВ = ""
рдЬрдмрдХрд┐ (1) {
# DCChunk % рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ
рдкрдврд╝реЗрдВ tChunk : 0
рдЫреЛрдбрд╝реЛ : ' $ рд▓рдВрдмрд╛рдИ ( tChunk )
рд╕реЗрдЯ s = s _ tChunk
}

} рдЬрдмрдХрд┐ (0)
}} {}

TXDEV рдХреЛ рдмрдВрдж рдХрд░реЗрдВ
Tio рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ
}

рдпрд╣ рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛ (Ctrl + F7) рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ (F5) рдореЗрдВ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЦреБрд▓рд╛ рд░рд╣рддрд╛ рд╣реИред
рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдмрдЯрди рджрдмрд╛рдиреЗ рдХреЗ рдмрд╛рдж ^ tmp рдЧреНрд▓реЛрдмрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧреА:

^tmp=7
^tmp(1,"OnPreServer")=""
^tmp(2,"Server","longStr")="0:32656:32656"
^tmp(3,"Server","longStr")="0:32656:32656"
^tmp(4,"Server","longStr")="0:32656:32656"
^tmp(5,"Server","longStr")="1:2032:2032"
^tmp(6,"Server","address.city")=""
^tmp(6,"Server","address.postalCode")=101101
^tmp(6,"Server","address.streetAddress")=" ., 101, .101"
^tmp(6,"Server","firstName")=""
^tmp(6,"Server","lastName")=""
^tmp(6,"Server","phoneNumbers.1")="812 123-1234"
^tmp(6,"Server","phoneNumbers.2")="916 123-4567"
^tmp(7,"OnPostServer")=""

рдбреЗрдореЛ рдХреЛрдб рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛрдб рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВред

Source: https://habr.com/ru/post/In181113/


All Articles