diff options
author | Nathan Letwory <nathan@letworyinteractive.com> | 2006-10-16 19:28:57 +0400 |
---|---|---|
committer | Nathan Letwory <nathan@letworyinteractive.com> | 2006-10-16 19:28:57 +0400 |
commit | 282b0d528da179320aabfa2ffe4f4aff32a5b4cb (patch) | |
tree | d3968fbccb2c0e0b71f68868448f3868c92fe932 | |
parent | 6468b1705bfba89221c239898fab563eca6838d3 (diff) |
* fix totblock error when quiting blender with sessions open
* add "Disconnect"-menu when RMB on verse server that is connected in
outliner
-rw-r--r-- | source/blender/blenkernel/BKE_verse.h | 15 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/verse_session.c | 47 | ||||
-rw-r--r-- | source/blender/src/header_info.c | 2 | ||||
-rw-r--r-- | source/blender/src/outliner.c | 8 | ||||
-rw-r--r-- | source/blender/src/usiblender.c | 6 | ||||
-rw-r--r-- | source/blender/src/verse_common.c | 1 |
6 files changed, 42 insertions, 37 deletions
diff --git a/source/blender/blenkernel/BKE_verse.h b/source/blender/blenkernel/BKE_verse.h index 932a11f2f94..8d93cda7118 100644 --- a/source/blender/blenkernel/BKE_verse.h +++ b/source/blender/blenkernel/BKE_verse.h @@ -323,12 +323,6 @@ typedef struct VNode { void (*post_node_name_set)(struct VNode *vnode); } VNode; -typedef struct VerseServer { - struct VerseServer *next, *prev; - char *name; /* human-readable server name */ - char *ip; /* string containing IP/domain name of verse server and number of port */ - short flag; /* flag: VERSE_CONNECTING, VERSE_CONNECTED */ -} VerseServer; /* * Verse Session: verse client can be connected to several verse servers @@ -353,6 +347,13 @@ typedef struct VerseSession { void (*post_connect_update)(struct VerseSession *session); } VerseSession; +typedef struct VerseServer { + struct VerseServer *next, *prev; + char *name; /* human-readable server name */ + char *ip; /* string containing IP/domain name of verse server and number of port */ + short flag; /* flag: VERSE_CONNECTING, VERSE_CONNECTED */ + struct VerseSession *session; /* pointer to related session */ +} VerseServer; /* * list of post callback functions */ @@ -448,7 +449,7 @@ void free_verse_session(struct VerseSession *session); void b_verse_update(void); void b_vers_ms_get(void); void b_verse_connect(char *address); -void end_verse_session(struct VerseSession *session, char free); +void end_verse_session(struct VerseSession *session); void end_all_verse_sessions(void); /* functions from verse_node.c */ diff --git a/source/blender/blenkernel/intern/verse_session.c b/source/blender/blenkernel/intern/verse_session.c index b5f21213f0d..67515cab3cb 100644 --- a/source/blender/blenkernel/intern/verse_session.c +++ b/source/blender/blenkernel/intern/verse_session.c @@ -169,11 +169,13 @@ static void cb_connect_accept( if(strcmp(session->address, server->ip)==0) { server->flag |= VERSE_CONNECTED; server->flag &= ~VERSE_CONNECTING; + server->session = session; + break; } server = server->next; } - printf("\tBlender was connected to verse server: %s\n", (char*)address); + printf("\tBlender is connected to verse server: %s\n", (char*)address); printf("\tVerseSession->counter: %d\n", session->counter); session->avatar = avatar; @@ -369,7 +371,7 @@ VerseSession *create_verse_session( /* * end verse session and free all session data */ -void end_verse_session(VerseSession *session, char free) +void end_verse_session(VerseSession *session) { /* send terminate command to verse server */ verse_send_connect_terminate(session->address, "blender: bye bye"); @@ -381,10 +383,8 @@ void end_verse_session(VerseSession *session, char free) session->flag &= ~VERSE_CONNECTED; /* do post connect operations */ session->post_connect_terminated(session); - /* free session data */ - free_verse_session_data(session); /* free structure of verse session */ - if(free) free_verse_session(session); + free_verse_session(session); } void free_all_servers(void) @@ -394,12 +394,12 @@ void free_all_servers(void) server = server_list.first; while(server) { - nextserver = server->next; - BLI_remlink(&server_list, server); - MEM_freeN(server->name); - MEM_freeN(server->ip); - MEM_freeN(server); - server = nextserver; + nextserver = server->next; + BLI_remlink(&server_list, server); + MEM_freeN(server->name); + MEM_freeN(server->ip); + MEM_freeN(server); + server = nextserver; } BLI_freelistN(&server_list); @@ -411,14 +411,15 @@ void free_all_servers(void) */ void end_all_verse_sessions(void) { - VerseSession *session; + VerseSession *session,*nextsession; session = session_list.first; while(session) { - end_verse_session(session, 0); + nextsession= session->next; + end_verse_session(session); /* end next session */ - session = session->next; + session = nextsession; } BLI_freelistN(&session_list); @@ -431,16 +432,16 @@ void end_all_verse_sessions(void) */ void b_verse_ms_get(void) { - if(cb_ping_registered==0) { - /* handle ping messages (for master server) */ - verse_callback_set(verse_send_ping, cb_ping, NULL); - add_screenhandler(G.curscreen, SCREEN_HANDLER_VERSE, 1); - cb_ping_registered++; - } - free_all_servers(); + if(cb_ping_registered==0) { + /* handle ping messages (for master server) */ + verse_callback_set(verse_send_ping, cb_ping, NULL); + add_screenhandler(G.curscreen, SCREEN_HANDLER_VERSE, 1); + cb_ping_registered++; + } + free_all_servers(); - verse_ms_get_send(U.versemaster, VERSE_MS_FIELD_DESCRIPTION, NULL); - verse_callback_update(10); + verse_ms_get_send(U.versemaster, VERSE_MS_FIELD_DESCRIPTION, NULL); + verse_callback_update(10); } /* diff --git a/source/blender/src/header_info.c b/source/blender/src/header_info.c index f96bd8b7b2b..59261fb5c97 100644 --- a/source/blender/src/header_info.c +++ b/source/blender/src/header_info.c @@ -766,7 +766,7 @@ static void do_verse_filemenu(void *arg, int event) session = session_menu(); if(session) { printf("Disconnecting session: %s!\n", session->address); - end_verse_session(session, 1); + end_verse_session(session); } break; case 3: diff --git a/source/blender/src/outliner.c b/source/blender/src/outliner.c index 6b66eff56fb..237c4144221 100644 --- a/source/blender/src/outliner.c +++ b/source/blender/src/outliner.c @@ -1632,7 +1632,7 @@ static int do_outliner_mouse_event(SpaceOops *soops, TreeElement *te, short even } switch(event) { case 1: - end_verse_session(session, 1); + end_verse_session(session); break; case 2: vnode = session->nodes.lb.first; @@ -1677,9 +1677,9 @@ static int do_outliner_mouse_event(SpaceOops *soops, TreeElement *te, short even if(!(vserver->flag & VERSE_CONNECTING) && !(vserver->flag & VERSE_CONNECTED)) { event = pupmenu("VerseServer %t| Connect %x1"); } else if((vserver->flag & VERSE_CONNECTING) && !(vserver->flag & VERSE_CONNECTED)) { - event = pupmenu("VerseServer %t| Connecting... %x2"); + event = pupmenu("VerseServer %t| Connecting %x2"); } else if(!(vserver->flag & VERSE_CONNECTING) && (vserver->flag & VERSE_CONNECTED)) { - event = pupmenu("VerseServer %t| Connected %x3"); + event = pupmenu("VerseServer %t| Disconnect %x3"); } switch(event) { case 1: @@ -1687,7 +1687,9 @@ static int do_outliner_mouse_event(SpaceOops *soops, TreeElement *te, short even vserver->flag |= VERSE_CONNECTING; break; case 2: + break; case 3: + end_verse_session(vserver->session); break; } } diff --git a/source/blender/src/usiblender.c b/source/blender/src/usiblender.c index 6782a3f0c6a..666e4d9df07 100644 --- a/source/blender/src/usiblender.c +++ b/source/blender/src/usiblender.c @@ -853,6 +853,9 @@ void exit_usiblender(void) tf= tf->next; } BLI_freelistN(&G.ttfdata); +#ifdef WITH_VERSE + end_all_verse_sessions(); +#endif free_openrecent(); freeAllRad(); @@ -900,9 +903,6 @@ void exit_usiblender(void) sound_exit_audio(); if(G.listener) MEM_freeN(G.listener); -#ifdef WITH_VERSE - end_all_verse_sessions(); -#endif libtiff_exit(); diff --git a/source/blender/src/verse_common.c b/source/blender/src/verse_common.c index 4e8cf10746d..d91c09dc2cd 100644 --- a/source/blender/src/verse_common.c +++ b/source/blender/src/verse_common.c @@ -255,6 +255,7 @@ void post_connect_terminated(VerseSession *session) while(server) { if(strcmp(server->ip, session->address)==0) { server->flag = 0; + server->session=NULL; break; } server = server->next; |