q3map2: * buffered broadcast xml stream to dramatically increase compilation monitoring speed
This commit is contained in:
parent
a02c1312c4
commit
5bf0dd5243
|
|
@ -537,7 +537,7 @@ void CWatchBSP::DoEBeginStep(){
|
|||
}
|
||||
}
|
||||
m_eState = EBeginStep;
|
||||
s_routine_id = gtk_timeout_add( 25, watchbsp_routine, this );
|
||||
s_routine_id = gtk_timeout_add( 8, watchbsp_routine, this );
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -45,12 +45,6 @@
|
|||
// utf8 conversion
|
||||
#include <glib.h>
|
||||
|
||||
#ifdef WIN32
|
||||
HWND hwndOut = NULL;
|
||||
qboolean lookedForServer = qfalse;
|
||||
UINT wm_BroadcastCommand = -1;
|
||||
#endif
|
||||
|
||||
socket_t *brdcst_socket;
|
||||
netmessage_t msg;
|
||||
|
||||
|
|
@ -95,10 +89,12 @@ void xml_SendNode( xmlNodePtr node ){
|
|||
while ( pos < (int)xml_buf->use )
|
||||
{
|
||||
// what size are we gonna send now?
|
||||
( xml_buf->use - pos < MAX_NETMESSAGE - 10 ) ? ( size = xml_buf->use - pos ) : ( size = MAX_NETMESSAGE - 10 );
|
||||
//++timo just a debug thing
|
||||
if ( size == MAX_NETMESSAGE - 10 ) {
|
||||
Sys_FPrintf( SYS_NOXML, "Got to split the buffer\n" );
|
||||
if( xml_buf->use - pos < MAX_NETMESSAGE - 10 ){
|
||||
size = xml_buf->use - pos;
|
||||
}
|
||||
else{
|
||||
size = MAX_NETMESSAGE - 10;
|
||||
Sys_FPrintf( SYS_NOXML, "Got to split the buffer\n" ); //++timo just a debug thing
|
||||
}
|
||||
memcpy( xmlbuf, xml_buf->content + pos, size );
|
||||
xmlbuf[size] = '\0';
|
||||
|
|
@ -252,16 +248,63 @@ void Broadcast_Setup( const char *dest ){
|
|||
void Broadcast_Shutdown(){
|
||||
if ( brdcst_socket ) {
|
||||
Sys_Printf( "Disconnecting\n" );
|
||||
xml_message_flush();
|
||||
Net_Disconnect( brdcst_socket );
|
||||
brdcst_socket = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
#define MAX_MESEGE MAX_NETMESSAGE / 2
|
||||
char mesege[MAX_MESEGE];
|
||||
size_t mesege_len = 0;
|
||||
int mesege_flag = SYS_STD;
|
||||
|
||||
void xml_message_flush(){
|
||||
if( mesege_len == 0 )
|
||||
return;
|
||||
xmlNodePtr node;
|
||||
node = xmlNewNode( NULL, (xmlChar*)"message" );
|
||||
{
|
||||
mesege[mesege_len] = '\0';
|
||||
mesege_len = 0;
|
||||
gchar* utf8 = g_locale_to_utf8( mesege, -1, NULL, NULL, NULL );
|
||||
xmlNodeAddContent( node, (xmlChar*)utf8 );
|
||||
g_free( utf8 );
|
||||
}
|
||||
char level[2];
|
||||
level[0] = (int)'0' + mesege_flag;
|
||||
level[1] = 0;
|
||||
xmlSetProp( node, (xmlChar*)"level", (xmlChar *)&level );
|
||||
|
||||
xml_SendNode( node );
|
||||
}
|
||||
|
||||
void xml_message_push( int flag, const char* characters, size_t length ){
|
||||
if( flag != mesege_flag ){
|
||||
xml_message_flush();
|
||||
mesege_flag = flag;
|
||||
}
|
||||
|
||||
const char* end = characters + length;
|
||||
while ( characters != end )
|
||||
{
|
||||
size_t space = MAX_MESEGE - 1 - mesege_len;
|
||||
if ( space == 0 ) {
|
||||
xml_message_flush();
|
||||
}
|
||||
else
|
||||
{
|
||||
size_t size = ( space < ( size_t )( end - characters ) ) ? space : ( size_t )( end - characters );
|
||||
memcpy( mesege + mesege_len, characters, size );
|
||||
mesege_len += size;
|
||||
characters += size;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// all output ends up through here
|
||||
void FPrintf( int flag, char *buf ){
|
||||
xmlNodePtr node;
|
||||
static qboolean bGotXML = qfalse;
|
||||
char level[2];
|
||||
|
||||
printf( "%s", buf );
|
||||
|
||||
|
|
@ -284,17 +327,7 @@ void FPrintf( int flag, char *buf ){
|
|||
doc->children = xmlNewDocRawNode( doc, NULL, (xmlChar*)"q3map_feedback", NULL );
|
||||
bGotXML = qtrue;
|
||||
}
|
||||
node = xmlNewNode( NULL, (xmlChar*)"message" );
|
||||
{
|
||||
gchar* utf8 = g_locale_to_utf8( buf, -1, NULL, NULL, NULL );
|
||||
xmlNodeAddContent( node, (xmlChar*)utf8 );
|
||||
g_free( utf8 );
|
||||
}
|
||||
level[0] = (int)'0' + flag;
|
||||
level[1] = 0;
|
||||
xmlSetProp( node, (xmlChar*)"level", (xmlChar *)&level );
|
||||
|
||||
xml_SendNode( node );
|
||||
xml_message_push( flag, buf, strlen( buf ) );
|
||||
}
|
||||
|
||||
#ifdef DBG_XML
|
||||
|
|
@ -348,6 +381,7 @@ void Error( const char *error, ... ){
|
|||
sprintf( out_buffer, "************ ERROR ************\n%s\n", tmp );
|
||||
|
||||
FPrintf( SYS_ERR, out_buffer );
|
||||
xml_message_flush();
|
||||
|
||||
#ifdef DBG_XML
|
||||
DumpXML();
|
||||
|
|
@ -357,7 +391,5 @@ void Error( const char *error, ... ){
|
|||
// a clean solution is to send a sync request node in the stream and wait for an answer before exiting
|
||||
Sys_Sleep( 1000 );
|
||||
|
||||
Broadcast_Shutdown();
|
||||
|
||||
exit( 1 );
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@
|
|||
// some useful xml routines
|
||||
xmlNodePtr xml_NodeForVec( vec3_t v );
|
||||
void xml_SendNode( xmlNodePtr node );
|
||||
void xml_message_flush();
|
||||
// print a message in q3map output and send the corresponding select information down the xml stream
|
||||
// bError: do we end with an error on this one or do we go ahead?
|
||||
void xml_Select( char *msg, int entitynum, int brushnum, qboolean bError );
|
||||
|
|
|
|||
|
|
@ -348,6 +348,7 @@ void ProcessWorldModel( void ){
|
|||
Sys_FPrintf( SYS_NOXML, "******* leaked *******\n" );
|
||||
Sys_FPrintf( SYS_NOXML, "**********************\n" );
|
||||
polyline = LeakFile( tree );
|
||||
xml_message_flush();
|
||||
leaknode = xmlNewNode( NULL, (xmlChar*)"message" );
|
||||
xmlNodeAddContent( leaknode, (xmlChar*)"MAP LEAKED\n" );
|
||||
xmlAddChild( leaknode, polyline );
|
||||
|
|
@ -356,7 +357,7 @@ void ProcessWorldModel( void ){
|
|||
xmlSetProp( leaknode, (xmlChar*)"level", (xmlChar*) &level );
|
||||
xml_SendNode( leaknode );
|
||||
if ( leaktest ) {
|
||||
Sys_Printf( "--- MAP LEAKED, ABORTING LEAKTEST ---\n" );
|
||||
Sys_FPrintf( SYS_WRN, "--- MAP LEAKED, ABORTING LEAKTEST ---\n" );
|
||||
exit( 0 );
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -87,6 +87,8 @@ char *Q_strncat( char *dst, size_t dlen, const char *src, size_t slen ) {
|
|||
*/
|
||||
|
||||
static void ExitQ3Map( void ){
|
||||
/* flush xml send buffer, shut down connection */
|
||||
Broadcast_Shutdown();
|
||||
BSPFilesCleanup();
|
||||
if ( mapDrawSurfs != NULL ) {
|
||||
free( mapDrawSurfs );
|
||||
|
|
@ -3904,9 +3906,6 @@ int main( int argc, char **argv ){
|
|||
end = I_FloatTime();
|
||||
Sys_Printf( "%9.0f seconds elapsed\n", end - start );
|
||||
|
||||
/* shut down connection */
|
||||
Broadcast_Shutdown();
|
||||
|
||||
/* return any error code */
|
||||
return r;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user