From fade1789644b671f065eca70264e394269354af3 Mon Sep 17 00:00:00 2001 From: Tyler274 Date: Wed, 7 Jan 2015 14:05:52 -0500 Subject: [PATCH] Attempt to solve the blocking problem when broadcasting to a large group by running the broadcast on its own thread. Tested on my server and appeared to solve it, more intensive testing may be needed. --- services/views.py | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/services/views.py b/services/views.py index bf7e4e84..4ee0ca35 100755 --- a/services/views.py +++ b/services/views.py @@ -24,6 +24,8 @@ from forms import JabberBroadcastForm from forms import FleetFormatterForm from util import check_if_user_has_permission +import threading + @login_required def fleet_formatter_view(request): @@ -50,6 +52,18 @@ def fleet_formatter_view(request): return render_to_response('registered/fleetformattertool.html', context, context_instance=RequestContext(request)) +class xmppThread (threading.Thread): + def __init__(self, threadID, name, counter, group, message,): + threading.Thread.__init__(self) + self.threadID = threadID + self.name = name + self.counter = counter + self.group = group + self.message = message + def run(self): + print "Starting " + self.name + OpenfireManager.send_broadcast_message(self.group, self.message) + print "Exiting " + self.name @login_required @permission_required('auth.jabber_broadcast') @@ -61,14 +75,19 @@ def jabber_broadcast_view(request): user_info = AuthServicesInfo.objects.get(user=request.user) main_char = EveCharacter.objects.get(character_id=user_info.main_char_id) if user_info.main_char_id != "": - OpenfireManager.send_broadcast_message(form.cleaned_data['group'], form.cleaned_data[ - 'message'] + "\n##### SENT BY: " + "[" + main_char.corporation_ticker + "]" + main_char.character_name + " TO: " + - form.cleaned_data[ - 'group'] + " #####\n##### Replies are NOT monitored #####\n") + message_to_send = form.cleaned_data['message'] + "\n##### SENT BY: " + "[" + main_char.corporation_ticker + "]" + main_char.character_name + " TO: " + form.cleaned_data['group'] + " #####\n##### Replies are NOT monitored #####\n" + group_to_send = form.cleaned_data['group'] + + broadcast_thread = xmppThread(1, "XMPP Broadcast Thread", 1, group_to_send, message_to_send) + broadcast_thread.start() + else: - OpenfireManager.send_broadcast_message(form.cleaned_data['group'], form.cleaned_data[ - 'message'] + "\n##### SENT BY: " + "No character but can send pings?" + " TO: " + form.cleaned_data[ - 'group'] + " #####\n##### Replies are NOT monitored #####\n") + message_to_send = form.cleaned_data['message'] + "\n##### SENT BY: " + "No character but can send pings?" + " TO: " + form.cleaned_data['group'] + " #####\n##### Replies are NOT monitored #####\n" + group_to_send = form.cleaned_data['group'] + + broadcast_thread = xmppThread(1, "XMPP Broadcast Thread", 1, group_to_send, message_to_send) + broadcast_thread.start() + success = True else: form = JabberBroadcastForm()