@@ -467,6 +467,27 @@ KBEngine.Event = new KBEngine.Event();
467467/*-----------------------------------------------------------------------------------------
468468 memorystream
469469-----------------------------------------------------------------------------------------*/
470+
471+ /*
472+ union PackFloatXType
473+ {
474+ float fv;
475+ uint32 uv;
476+ int iv;
477+ };
478+ */
479+ KBEngine . PackFloatXType = function ( )
480+ {
481+ this . _unionData = new ArrayBuffer ( 4 ) ;
482+ this . fv = new Float32Array ( this . _unionData , 0 , 1 ) ;
483+ this . uv = new Uint32Array ( this . _unionData , 0 , 1 ) ;
484+ this . iv = new Int32Array ( this . _unionData , 0 , 1 ) ;
485+ } ;
486+
487+ KBEngine . _xPackData = new KBEngine . PackFloatXType ( ) ;
488+ KBEngine . _yPackData = new KBEngine . PackFloatXType ( ) ;
489+ KBEngine . _zPackData = new KBEngine . PackFloatXType ( ) ;
490+
470491KBEngine . MemoryStream = function ( size_or_buffer )
471492{
472493 if ( size_or_buffer instanceof ArrayBuffer )
@@ -481,22 +502,6 @@ KBEngine.MemoryStream = function(size_or_buffer)
481502 this . rpos = 0 ;
482503 this . wpos = 0 ;
483504
484- /*
485- union PackFloatXType
486- {
487- float fv;
488- uint32 uv;
489- int iv;
490- };
491- */
492- KBEngine . MemoryStream . PackFloatXType = function ( )
493- {
494- this . _unionData = new ArrayBuffer ( 4 ) ;
495- this . fv = new Float32Array ( this . _unionData , 0 , 1 ) ;
496- this . uv = new Uint32Array ( this . _unionData , 0 , 1 ) ;
497- this . iv = new Int32Array ( this . _unionData , 0 , 1 ) ;
498- } ;
499-
500505 //---------------------------------------------------------------------------------
501506 this . readInt8 = function ( )
502507 {
@@ -632,8 +637,8 @@ KBEngine.MemoryStream = function(size_or_buffer)
632637
633638 this . readPackXZ = function ( )
634639 {
635- var xPackData = new KBEngine . MemoryStream . PackFloatXType ( ) ;
636- var zPackData = new KBEngine . MemoryStream . PackFloatXType ( ) ;
640+ var xPackData = KBEngine . _xPackData ;
641+ var zPackData = KBEngine . _zPackData ;
637642
638643 xPackData . fv [ 0 ] = 0.0 ;
639644 zPackData . fv [ 0 ] = 0.0 ;
@@ -669,7 +674,7 @@ KBEngine.MemoryStream = function(size_or_buffer)
669674 {
670675 var v = this . readUint16 ( ) ;
671676
672- var yPackData = new KBEngine . MemoryStream . PackFloatXType ( ) ;
677+ var yPackData = KBEngine . _yPackData ;
673678 yPackData . uv [ 0 ] = 0x40000000 ;
674679 yPackData . uv [ 0 ] |= ( v & 0x7fff ) << 12 ;
675680 yPackData . fv [ 0 ] -= 2.0 ;
@@ -832,7 +837,7 @@ KBEngine.MemoryStream = function(size_or_buffer)
832837 buf . set ( new Uint8Array ( stream . buffer , offset , size ) , 0 ) ;
833838 this . wpos += size ;
834839 }
835-
840+
836841 //---------------------------------------------------------------------------------
837842 this . readSkip = function ( v )
838843 {
@@ -869,6 +874,13 @@ KBEngine.MemoryStream = function(size_or_buffer)
869874 return this . buffer . slice ( this . rpos , this . wpos ) ;
870875 }
871876
877+ //---------------------------------------------------------------------------------
878+ this . setbuffer = function ( buffer )
879+ {
880+ this . clear ( ) ;
881+ this . buffer = buffer ;
882+ }
883+
872884 //---------------------------------------------------------------------------------
873885 this . size = function ( )
874886 {
@@ -884,15 +896,33 @@ KBEngine.MemoryStream = function(size_or_buffer)
884896 if ( this . buffer . byteLength > KBEngine . PACKET_MAX_SIZE )
885897 this . buffer = new ArrayBuffer ( KBEngine . PACKET_MAX_SIZE ) ;
886898 }
899+
900+ this . reclaimObject = function ( )
901+ {
902+ this . clear ( ) ;
903+
904+ if ( KBEngine . MemoryStream . _objects != undefined )
905+ KBEngine . MemoryStream . _objects . push ( this ) ;
906+ }
887907}
888908
909+ KBEngine . MemoryStream . createObject = function ( )
910+ {
911+ if ( KBEngine . MemoryStream . _objects == undefined )
912+ KBEngine . MemoryStream . _objects = [ ] ;
913+
914+ return KBEngine . MemoryStream . _objects . length > 0 ? KBEngine . MemoryStream . _objects . pop ( ) : new KBEngine . MemoryStream ( KBEngine . PACKET_MAX_SIZE_TCP ) ;
915+ }
916+
917+
918+
889919/*-----------------------------------------------------------------------------------------
890920 bundle
891921-----------------------------------------------------------------------------------------*/
892922KBEngine . Bundle = function ( )
893923{
894924 this . memorystreams = new Array ( ) ;
895- this . stream = new KBEngine . MemoryStream ( KBEngine . PACKET_MAX_SIZE_TCP ) ;
925+ this . stream = KBEngine . MemoryStream . createObject ( ) ;
896926
897927 this . numMessage = 0 ;
898928 this . messageLengthBuffer = null ;
@@ -960,10 +990,13 @@ KBEngine.Bundle = function()
960990 {
961991 var tmpStream = this . memorystreams [ i ] ;
962992 network . send ( tmpStream . getbuffer ( ) ) ;
993+ tmpStream . reclaimObject ( ) ;
963994 }
964-
995+
965996 this . memorystreams = new Array ( ) ;
966- this . stream = new KBEngine . MemoryStream ( KBEngine . PACKET_MAX_SIZE_TCP ) ;
997+ this . stream = KBEngine . MemoryStream . createObject ( ) ;
998+
999+ this . reclaimObject ( ) ;
9671000 }
9681001
9691002 //---------------------------------------------------------------------------------
@@ -972,7 +1005,7 @@ KBEngine.Bundle = function()
9721005 if ( v > this . stream . space ( ) )
9731006 {
9741007 this . memorystreams . push ( this . stream ) ;
975- this . stream = new KBEngine . MemoryStream ( KBEngine . PACKET_MAX_SIZE_TCP ) ;
1008+ this . stream = KBEngine . MemoryStream . createObject ( ) ;
9761009 }
9771010
9781011 this . messageLength += v ;
@@ -1050,6 +1083,32 @@ KBEngine.Bundle = function()
10501083 this . checkStream ( v . length + 4 ) ;
10511084 this . stream . writeBlob ( v ) ;
10521085 }
1086+
1087+ this . clear = function ( )
1088+ {
1089+ this . stream = KBEngine . MemoryStream . createObject ( ) ;
1090+ this . memorystreams = new Array ( ) ;
1091+ this . numMessage = 0 ;
1092+ this . messageLengthBuffer = null ;
1093+ this . messageLength = 0 ;
1094+ this . msgtype = null ;
1095+ }
1096+
1097+ this . reclaimObject = function ( )
1098+ {
1099+ this . clear ( ) ;
1100+
1101+ if ( KBEngine . Bundle . _objects != undefined )
1102+ KBEngine . Bundle . _objects . push ( this ) ;
1103+ }
1104+ }
1105+
1106+ KBEngine . Bundle . createObject = function ( )
1107+ {
1108+ if ( KBEngine . Bundle . _objects == undefined )
1109+ KBEngine . Bundle . _objects = [ ] ;
1110+
1111+ return KBEngine . Bundle . _objects . length > 0 ? KBEngine . Bundle . _objects . pop ( ) : new KBEngine . Bundle ( ) ;
10531112}
10541113
10551114/*-----------------------------------------------------------------------------------------
@@ -1866,7 +1925,7 @@ KBEngine.EntityCall = function()
18661925 this . newCall = function ( )
18671926 {
18681927 if ( this . bundle == null )
1869- this . bundle = new KBEngine . Bundle ( ) ;
1928+ this . bundle = KBEngine . Bundle . createObject ( ) ;
18701929
18711930 if ( this . type == KBEngine . ENTITYCALL_TYPE_CELL )
18721931 this . bundle . newMessage ( KBEngine . messages . Baseapp_onRemoteCallCellMethodFromClient ) ;
@@ -2920,6 +2979,8 @@ KBEngine.KBEngineApp = function(kbengineArgs)
29202979 this . fragmentDatasFlag = KBEngine . FragmentDataTypes . FRAGMENT_DATA_UNKNOW ;
29212980 this . fragmentDatasRemain = 0 ;
29222981
2982+ this . msgStream = new KBEngine . MemoryStream ( KBEngine . PACKET_MAX_SIZE_TCP ) ;
2983+
29232984 this . resetSocket = function ( )
29242985 {
29252986 try
@@ -3019,7 +3080,7 @@ KBEngine.KBEngineApp = function(kbengineArgs)
30193080
30203081 this . hello = function ( )
30213082 {
3022- var bundle = new KBEngine . Bundle ( ) ;
3083+ var bundle = KBEngine . Bundle . createObject ( ) ;
30233084
30243085 if ( KBEngine . app . currserver == "loginapp" )
30253086 bundle . newMessage ( KBEngine . messages . Loginapp_hello ) ;
@@ -3092,8 +3153,10 @@ KBEngine.KBEngineApp = function(kbengineArgs)
30923153
30933154 this . onmessage = function ( msg )
30943155 {
3095- var stream = new KBEngine . MemoryStream ( msg . data ) ;
3156+ var stream = KBEngine . app . msgStream ;
3157+ stream . setbuffer ( msg . data ) ;
30963158 stream . wpos = msg . data . byteLength ;
3159+
30973160 var app = KBEngine . app ;
30983161 var FragmentDataTypes = KBEngine . FragmentDataTypes ;
30993162
@@ -3305,7 +3368,7 @@ KBEngine.KBEngineApp = function(kbengineArgs)
33053368 {
33063369 if ( KBEngine . messages . Loginapp_onClientActiveTick != undefined )
33073370 {
3308- var bundle = new KBEngine . Bundle ( ) ;
3371+ var bundle = KBEngine . Bundle . createObject ( ) ;
33093372 bundle . newMessage ( KBEngine . messages . Loginapp_onClientActiveTick ) ;
33103373 bundle . send ( KBEngine . app ) ;
33113374 }
@@ -3314,7 +3377,7 @@ KBEngine.KBEngineApp = function(kbengineArgs)
33143377 {
33153378 if ( KBEngine . messages . Baseapp_onClientActiveTick != undefined )
33163379 {
3317- var bundle = new KBEngine . Bundle ( ) ;
3380+ var bundle = KBEngine . Bundle . createObject ( ) ;
33183381 bundle . newMessage ( KBEngine . messages . Baseapp_onClientActiveTick ) ;
33193382 bundle . send ( KBEngine . app ) ;
33203383 }
@@ -3381,7 +3444,7 @@ KBEngine.KBEngineApp = function(kbengineArgs)
33813444
33823445 if ( ! KBEngine . app . loginappMessageImported )
33833446 {
3384- var bundle = new KBEngine . Bundle ( ) ;
3447+ var bundle = KBEngine . Bundle . createObject ( ) ;
33853448 bundle . newMessage ( KBEngine . messages . Loginapp_importClientMessages ) ;
33863449 bundle . send ( KBEngine . app ) ;
33873450 KBEngine . app . socket . onmessage = KBEngine . app . Client_onImportClientMessages ;
@@ -3403,7 +3466,7 @@ KBEngine.KBEngineApp = function(kbengineArgs)
34033466
34043467 if ( ! KBEngine . app . loginappMessageImported )
34053468 {
3406- var bundle = new KBEngine . Bundle ( ) ;
3469+ var bundle = KBEngine . Bundle . createObject ( ) ;
34073470 bundle . newMessage ( KBEngine . messages . Loginapp_importClientMessages ) ;
34083471 bundle . send ( KBEngine . app ) ;
34093472 KBEngine . app . socket . onmessage = KBEngine . app . Client_onImportClientMessages ;
@@ -3428,7 +3491,7 @@ KBEngine.KBEngineApp = function(kbengineArgs)
34283491 {
34293492 KBEngine . INFO_MSG ( "KBEngine::onImportClientMessagesCompleted(): send importServerErrorsDescr!" ) ;
34303493 KBEngine . app . serverErrorsDescrImported = true ;
3431- var bundle = new KBEngine . Bundle ( ) ;
3494+ var bundle = KBEngine . Bundle . createObject ( ) ;
34323495 bundle . newMessage ( KBEngine . messages . Loginapp_importServerErrorsDescr ) ;
34333496 bundle . send ( KBEngine . app ) ;
34343497 }
@@ -3449,7 +3512,7 @@ KBEngine.KBEngineApp = function(kbengineArgs)
34493512 if ( ! KBEngine . app . entitydefImported )
34503513 {
34513514 KBEngine . INFO_MSG ( "KBEngineApp::onImportClientMessagesCompleted: start importEntityDef ..." ) ;
3452- var bundle = new KBEngine . Bundle ( ) ;
3515+ var bundle = KBEngine . Bundle . createObject ( ) ;
34533516 bundle . newMessage ( KBEngine . messages . Baseapp_importClientEntityDef ) ;
34543517 bundle . send ( KBEngine . app ) ;
34553518 KBEngine . Event . fire ( "Baseapp_importClientEntityDef" ) ;
@@ -3869,7 +3932,7 @@ KBEngine.KBEngineApp = function(kbengineArgs)
38693932 }
38703933 else
38713934 {
3872- var bundle = new KBEngine . Bundle ( ) ;
3935+ var bundle = KBEngine . Bundle . createObject ( ) ;
38733936 bundle . newMessage ( KBEngine . messages . Loginapp_reqCreateAccount ) ;
38743937 bundle . writeString ( KBEngine . app . username ) ;
38753938 bundle . writeString ( KBEngine . app . password ) ;
@@ -3880,7 +3943,7 @@ KBEngine.KBEngineApp = function(kbengineArgs)
38803943
38813944 this . bindAccountEmail = function ( emailAddress )
38823945 {
3883- var bundle = new KBEngine . Bundle ( ) ;
3946+ var bundle = KBEngine . Bundle . createObject ( ) ;
38843947 bundle . newMessage ( KBEngine . messages . Baseapp_reqAccountBindEmail ) ;
38853948 bundle . writeInt32 ( KBEngine . app . entity_id ) ;
38863949 bundle . writeString ( KBEngine . app . password ) ;
@@ -3890,7 +3953,7 @@ KBEngine.KBEngineApp = function(kbengineArgs)
38903953
38913954 this . newPassword = function ( old_password , new_password )
38923955 {
3893- var bundle = new KBEngine . Bundle ( ) ;
3956+ var bundle = KBEngine . Bundle . createObject ( ) ;
38943957 bundle . newMessage ( KBEngine . messages . Baseapp_reqAccountNewPassword ) ;
38953958 bundle . writeInt32 ( KBEngine . app . entity_id ) ;
38963959 bundle . writeString ( old_password ) ;
@@ -3910,7 +3973,7 @@ KBEngine.KBEngineApp = function(kbengineArgs)
39103973
39113974 this . logout = function ( )
39123975 {
3913- var bundle = new KBEngine . Bundle ( ) ;
3976+ var bundle = KBEngine . Bundle . createObject ( ) ;
39143977 bundle . newMessage ( KBEngine . messages . Baseapp_logoutBaseapp ) ;
39153978 bundle . writeUint64 ( KBEngine . app . entity_uuid ) ;
39163979 bundle . writeInt32 ( KBEngine . app . entity_id ) ;
@@ -3929,7 +3992,7 @@ KBEngine.KBEngineApp = function(kbengineArgs)
39293992 }
39303993 else
39313994 {
3932- var bundle = new KBEngine . Bundle ( ) ;
3995+ var bundle = KBEngine . Bundle . createObject ( ) ;
39333996 bundle . newMessage ( KBEngine . messages . Loginapp_login ) ;
39343997 bundle . writeInt8 ( KBEngine . app . args . clientType ) ; // clientType
39353998 bundle . writeBlob ( KBEngine . app . clientdatas ) ;
@@ -3947,7 +4010,7 @@ KBEngine.KBEngineApp = function(kbengineArgs)
39474010
39484011 if ( ! KBEngine . app . loginappMessageImported )
39494012 {
3950- var bundle = new KBEngine . Bundle ( ) ;
4013+ var bundle = KBEngine . Bundle . createObject ( ) ;
39514014 bundle . newMessage ( KBEngine . messages . Loginapp_importClientMessages ) ;
39524015 bundle . send ( KBEngine . app ) ;
39534016 KBEngine . app . socket . onmessage = KBEngine . app . Client_onImportClientMessages ;
@@ -3978,7 +4041,7 @@ KBEngine.KBEngineApp = function(kbengineArgs)
39784041 }
39794042 else
39804043 {
3981- var bundle = new KBEngine . Bundle ( ) ;
4044+ var bundle = KBEngine . Bundle . createObject ( ) ;
39824045 bundle . newMessage ( KBEngine . messages . Loginapp_reqAccountResetPassword ) ;
39834046 bundle . writeString ( KBEngine . app . username ) ;
39844047 bundle . send ( KBEngine . app ) ;
@@ -3992,7 +4055,7 @@ KBEngine.KBEngineApp = function(kbengineArgs)
39924055
39934056 if ( ! KBEngine . app . baseappMessageImported )
39944057 {
3995- var bundle = new KBEngine . Bundle ( ) ;
4058+ var bundle = KBEngine . Bundle . createObject ( ) ;
39964059 bundle . newMessage ( KBEngine . messages . Baseapp_importClientMessages ) ;
39974060 bundle . send ( KBEngine . app ) ;
39984061 KBEngine . app . socket . onmessage = KBEngine . app . Client_onImportClientMessages ;
@@ -4019,7 +4082,7 @@ KBEngine.KBEngineApp = function(kbengineArgs)
40194082 }
40204083 else
40214084 {
4022- var bundle = new KBEngine . Bundle ( ) ;
4085+ var bundle = KBEngine . Bundle . createObject ( ) ;
40234086 bundle . newMessage ( KBEngine . messages . Baseapp_loginBaseapp ) ;
40244087 bundle . writeString ( KBEngine . app . username ) ;
40254088 bundle . writeString ( KBEngine . app . password ) ;
@@ -4053,7 +4116,7 @@ KBEngine.KBEngineApp = function(kbengineArgs)
40534116 KBEngine . INFO_MSG ( "KBEngineApp::onReOpenBaseapp: successfully!" ) ;
40544117 KBEngine . app . currserver = "baseapp" ;
40554118
4056- var bundle = new KBEngine . Bundle ( ) ;
4119+ var bundle = KBEngine . Bundle . createObject ( ) ;
40574120 bundle . newMessage ( KBEngine . messages . Baseapp_reloginBaseapp ) ;
40584121 bundle . writeString ( KBEngine . app . username ) ;
40594122 bundle . writeString ( KBEngine . app . password ) ;
@@ -4619,7 +4682,7 @@ KBEngine.KBEngineApp = function(kbengineArgs)
46194682 player . entityLastLocalDir . y = player . direction . y ;
46204683 player . entityLastLocalDir . z = player . direction . z ;
46214684
4622- var bundle = new KBEngine . Bundle ( ) ;
4685+ var bundle = KBEngine . Bundle . createObject ( ) ;
46234686 bundle . newMessage ( KBEngine . messages . Baseapp_onUpdateDataFromClient ) ;
46244687 bundle . writeFloat ( player . position . x ) ;
46254688 bundle . writeFloat ( player . position . y ) ;
@@ -4647,7 +4710,7 @@ KBEngine.KBEngineApp = function(kbengineArgs)
46474710 entity . entityLastLocalPos = position ;
46484711 entity . entityLastLocalDir = direction ;
46494712
4650- var bundle = new KBEngine . Bundle ( ) ;
4713+ var bundle = KBEngine . Bundle . createObject ( ) ;
46514714 bundle . newMessage ( KBEngine . messages . Baseapp_onUpdateDataFromClientForControlledEntity ) ;
46524715 bundle . writeInt32 ( entity . id ) ;
46534716 bundle . writeFloat ( position . x ) ;
0 commit comments