import json
import uuid
-import simplejson
import datetime
from django.shortcuts import render_to_response
from django.template.loader import render_to_string
from django.http import HttpResponse
from gevent.event import Event
from django.conf import settings
-from django.views.decorators.csrf import csrf_exempt
+#from django.views.decorators.csrf import csrf_exempt
+from django.http import HttpResponseRedirect
+from django.core.urlresolvers import reverse
-from flowspy.utils import beanstalkc
+
+import beanstalkc
import logging
def json_response(value, **kwargs):
kwargs.setdefault('content_type', 'text/javascript; charset=UTF-8')
- return HttpResponse(simplejson.dumps(value), **kwargs)
+ return HttpResponse(json.dumps(value), **kwargs)
class Msgs(object):
- cache_size = 200
+ cache_size = 500
def __init__(self):
+ logger.info("initializing")
+ self.user = None
self.user_cache = {}
self.user_cursor = {}
self.cache = []
if self.user_cache:
request.session['cursor'] = self.user_cache[-1]['id']
return render_to_response('poll.html', {'messages': self.user_cache})
-
- @csrf_exempt
+
def message_existing(self, request):
-
- try:
- user = request.user.username
- except:
- user = None
- self.new_message_user_event[user] = Event()
- try:
- if self.user_cache[user]:
- self.user_cursor[user] = self.user_cache[user][-1]['id']
- except:
- self.user_cache[user] = []
- self.user_cursor[user] = ''
- return json_response({'messages': self.user_cache[user]})
+ if request.is_ajax():
+ try:
+ user = request.user.get_profile().peer.domain_name
+ except:
+ user = None
+ return False
+ try:
+ assert(self.new_message_user_event[user])
+ except:
+ self.new_message_user_event[user] = Event()
+ try:
+ if self.user_cache[user]:
+ self.user_cursor[user] = self.user_cache[user][-1]['id']
+ except:
+ self.user_cache[user] = []
+ self.user_cursor[user] = ''
+ return json_response({'messages': self.user_cache[user]})
+ return HttpResponseRedirect(reverse('group-routes'))
- @csrf_exempt
def message_new(self, mesg=None):
if mesg:
message = mesg['message']
self.user_cursor[user] = self.user_cache[user][-1]['id']
else:
self.user_cursor[user] = self.user_cache[user][-2]['id']
-# self.cache.append(msg)
if len(self.user_cache[user]) > self.cache_size:
self.user_cache[user] = self.user_cache[user][-self.cache_size:]
self.new_message_user_event[user].set()
self.new_message_user_event[user].clear()
return json_response(msg)
- @csrf_exempt
def message_updates(self, request):
- cursor = {}
- try:
- user = request.user.username
- except:
- user = None
-
- cursor[user] = self.user_cursor[user]
-
- try:
- if not isinstance(self.user_cache[user], list):
+ if request.is_ajax():
+ cursor = {}
+ try:
+ user = request.user.get_profile().peer.domain_name
+ except:
+ user = None
+ return False
+ try:
+ cursor[user] = self.user_cursor[user]
+ except:
+ return HttpResponse(content='', mimetype=None, status=400)
+
+ try:
+ if not isinstance(self.user_cache[user], list):
+ self.user_cache[user] = []
+ except:
self.user_cache[user] = []
- except:
- self.user_cache[user] = []
- if not self.user_cache[user] or cursor[user] == self.user_cache[user][-1]['id']:
- self.new_message_user_event[user].wait()
-# self.new_message_event.wait()
-# assert cursor[user] != self.user_cache[user][-1]['id'], cursor[user]
- try:
- for index, m in enumerate(self.user_cache[user]):
- if m['id'] == cursor[user]:
- return json_response({'messages': self.user_cache[user][index + 1:]})
- return json_response({'messages': self.user_cache[user]})
- finally:
- if self.user_cache[user]:
- self.user_cursor[user] = self.user_cache[user][-1]['id']
-# else:
-# request.session.pop('cursor', None)
+ if not self.user_cache[user] or cursor[user] == self.user_cache[user][-1]['id']:
+ self.new_message_user_event[user].wait(settings.POLL_SESSION_UPDATE)
+ try:
+ for index, m in enumerate(self.user_cache[user]):
+ if m['id'] == cursor[user]:
+ return json_response({'messages': self.user_cache[user][index + 1:]})
+ return json_response({'messages': self.user_cache[user]})
+ finally:
+ if self.user_cache[user]:
+ self.user_cursor[user] = self.user_cache[user][-1]['id']
+ return HttpResponseRedirect(reverse('group-routes'))
def monitor_polls(self, polls=None):
b = beanstalkc.Connection()
b.watch(settings.POLLS_TUBE)
while True:
job = b.reserve()
- print job.body
msg = json.loads(job.body)
job.bury()
self.message_new(msg)
p.spawn(self.monitor_polls)
msgs = Msgs()
-
main = msgs.main
message_new = msgs.message_new
poll = msgs.start_polling
poll()
-
-
-
-
-
-
-
-
-