Revision 97e42c7d poller/views.py
b/poller/views.py | ||
---|---|---|
12 | 12 |
from gevent.event import Event |
13 | 13 |
from django.conf import settings |
14 | 14 |
from django.views.decorators.csrf import csrf_exempt |
15 |
from django.http import HttpResponseRedirect |
|
16 |
from django.core.urlresolvers import reverse |
|
17 |
|
|
15 | 18 |
|
16 | 19 |
from flowspy.utils import beanstalkc |
17 | 20 |
|
... | ... | |
37 | 40 |
cache_size = 200 |
38 | 41 |
|
39 | 42 |
def __init__(self): |
43 |
self.user = None |
|
40 | 44 |
self.user_cache = {} |
41 | 45 |
self.user_cursor = {} |
42 | 46 |
self.cache = [] |
... | ... | |
47 | 51 |
if self.user_cache: |
48 | 52 |
request.session['cursor'] = self.user_cache[-1]['id'] |
49 | 53 |
return render_to_response('poll.html', {'messages': self.user_cache}) |
50 |
|
|
54 |
|
|
51 | 55 |
@csrf_exempt |
52 | 56 |
def message_existing(self, request): |
53 |
|
|
54 |
try: |
|
55 |
user = request.user.username |
|
56 |
except: |
|
57 |
user = None |
|
58 |
self.new_message_user_event[user] = Event() |
|
59 |
try: |
|
60 |
if self.user_cache[user]: |
|
61 |
self.user_cursor[user] = self.user_cache[user][-1]['id'] |
|
62 |
except: |
|
63 |
self.user_cache[user] = [] |
|
64 |
self.user_cursor[user] = '' |
|
65 |
return json_response({'messages': self.user_cache[user]}) |
|
57 |
if request.is_ajax(): |
|
58 |
try: |
|
59 |
user = request.user.get_profile().peer.domain_name |
|
60 |
except: |
|
61 |
user = None |
|
62 |
return False |
|
63 |
try: |
|
64 |
assert(self.new_message_user_event[user]) |
|
65 |
except: |
|
66 |
self.new_message_user_event[user] = Event() |
|
67 |
# self.new_message_user_event[user] = Event() |
|
68 |
try: |
|
69 |
if self.user_cache[user]: |
|
70 |
self.user_cursor[user] = self.user_cache[user][-1]['id'] |
|
71 |
except: |
|
72 |
self.user_cache[user] = [] |
|
73 |
self.user_cursor[user] = '' |
|
74 |
return json_response({'messages': self.user_cache[user]}) |
|
75 |
return HttpResponseRedirect(reverse('login')) |
|
66 | 76 |
|
67 | 77 |
@csrf_exempt |
68 | 78 |
def message_new(self, mesg=None): |
... | ... | |
89 | 99 |
|
90 | 100 |
@csrf_exempt |
91 | 101 |
def message_updates(self, request): |
92 |
cursor = {} |
|
93 |
try: |
|
94 |
user = request.user.username |
|
95 |
except: |
|
96 |
user = None |
|
97 |
|
|
98 |
cursor[user] = self.user_cursor[user] |
|
99 |
|
|
100 |
try: |
|
101 |
if not isinstance(self.user_cache[user], list): |
|
102 |
if request.is_ajax(): |
|
103 |
cursor = {} |
|
104 |
try: |
|
105 |
# user = request.user.username |
|
106 |
user = request.user.get_profile().peer.domain_name |
|
107 |
except: |
|
108 |
user = None |
|
109 |
return False |
|
110 |
cursor[user] = self.user_cursor[user] |
|
111 |
|
|
112 |
try: |
|
113 |
if not isinstance(self.user_cache[user], list): |
|
114 |
self.user_cache[user] = [] |
|
115 |
except: |
|
102 | 116 |
self.user_cache[user] = [] |
103 |
except: |
|
104 |
self.user_cache[user] = [] |
|
105 |
if not self.user_cache[user] or cursor[user] == self.user_cache[user][-1]['id']: |
|
106 |
self.new_message_user_event[user].wait() |
|
107 |
# self.new_message_event.wait() |
|
108 |
# assert cursor[user] != self.user_cache[user][-1]['id'], cursor[user] |
|
109 |
try: |
|
110 |
for index, m in enumerate(self.user_cache[user]): |
|
111 |
if m['id'] == cursor[user]: |
|
112 |
return json_response({'messages': self.user_cache[user][index + 1:]}) |
|
113 |
return json_response({'messages': self.user_cache[user]}) |
|
114 |
finally: |
|
115 |
if self.user_cache[user]: |
|
116 |
self.user_cursor[user] = self.user_cache[user][-1]['id'] |
|
117 |
# else: |
|
118 |
# request.session.pop('cursor', None) |
|
117 |
if not self.user_cache[user] or cursor[user] == self.user_cache[user][-1]['id']: |
|
118 |
self.new_message_user_event[user].wait() |
|
119 |
# self.new_message_event.wait() |
|
120 |
# assert cursor[user] != self.user_cache[user][-1]['id'], cursor[user] |
|
121 |
try: |
|
122 |
for index, m in enumerate(self.user_cache[user]): |
|
123 |
if m['id'] == cursor[user]: |
|
124 |
return json_response({'messages': self.user_cache[user][index + 1:]}) |
|
125 |
return json_response({'messages': self.user_cache[user]}) |
|
126 |
finally: |
|
127 |
if self.user_cache[user]: |
|
128 |
self.user_cursor[user] = self.user_cache[user][-1]['id'] |
|
129 |
return HttpResponseRedirect(reverse('login')) |
|
130 |
# else: |
|
131 |
# request.session.pop('cursor', None) |
|
119 | 132 |
|
120 | 133 |
def monitor_polls(self, polls=None): |
121 | 134 |
b = beanstalkc.Connection() |
122 | 135 |
b.watch(settings.POLLS_TUBE) |
123 | 136 |
while True: |
124 | 137 |
job = b.reserve() |
125 |
print job.body |
|
126 | 138 |
msg = json.loads(job.body) |
127 | 139 |
job.bury() |
128 | 140 |
self.message_new(msg) |
Also available in: Unified diff