| 
									
										
										
										
											2013-08-26 13:18:20 -04:00
										 |  |  | var RDB = require('./redis'), | 
					
						
							| 
									
										
										
										
											2013-10-17 12:05:53 -04:00
										 |  |  | 	async = require('async'), | 
					
						
							|  |  |  | 	user = require('./user'); | 
					
						
							| 
									
										
										
										
											2013-08-26 13:18:20 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | (function(Messaging) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	function sortUids(fromuid, touid) { | 
					
						
							|  |  |  | 		var uids = [fromuid, touid]; | 
					
						
							|  |  |  | 		uids.sort(); | 
					
						
							|  |  |  | 		return uids; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	Messaging.addMessage = function(fromuid, touid, content, callback) { | 
					
						
							|  |  |  | 		var uids = sortUids(fromuid, touid); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		RDB.incr('global:next_message_id', function(err, mid) { | 
					
						
							| 
									
										
										
										
											2013-09-17 13:09:37 -04:00
										 |  |  | 			if (err) | 
					
						
							| 
									
										
										
										
											2013-08-26 13:18:20 -04:00
										 |  |  | 				return callback(err, null); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			var message = { | 
					
						
							|  |  |  | 				content: content, | 
					
						
							|  |  |  | 				timestamp: Date.now(), | 
					
						
							|  |  |  | 				fromuid: fromuid, | 
					
						
							|  |  |  | 				touid: touid | 
					
						
							|  |  |  | 			}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			RDB.hmset('message:' + mid, message); | 
					
						
							|  |  |  | 			RDB.rpush('messages:' + uids[0] + ':' + uids[1], mid); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			callback(null, message); | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	Messaging.getMessages = function(fromuid, touid, callback) { | 
					
						
							|  |  |  | 		var uids = sortUids(fromuid, touid); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		RDB.lrange('messages:' + uids[0] + ':' + uids[1], 0, -1, function(err, mids) { | 
					
						
							| 
									
										
										
										
											2013-09-17 13:09:37 -04:00
										 |  |  | 			if (err) | 
					
						
							| 
									
										
										
										
											2013-08-26 13:18:20 -04:00
										 |  |  | 				return callback(err, null); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-17 13:09:37 -04:00
										 |  |  | 			if (!mids || !mids.length) { | 
					
						
							| 
									
										
										
										
											2013-08-26 13:18:20 -04:00
										 |  |  | 				return callback(null, []); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			user.getUserField(touid, 'username', function(err, tousername) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				var messages = []; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				function getMessage(mid, next) { | 
					
						
							|  |  |  | 					RDB.hgetall('message:' + mid, function(err, message) { | 
					
						
							| 
									
										
										
										
											2013-09-17 13:09:37 -04:00
										 |  |  | 						if (err) | 
					
						
							| 
									
										
										
										
											2013-08-26 13:18:20 -04:00
										 |  |  | 							return next(err); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-17 13:09:37 -04:00
										 |  |  | 						if (message.fromuid === fromuid) | 
					
						
							| 
									
										
										
										
											2013-08-26 13:18:20 -04:00
										 |  |  | 							message.content = 'You : ' + message.content; | 
					
						
							|  |  |  | 						else | 
					
						
							|  |  |  | 							message.content = tousername + ' : ' + message.content; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 						messages.push(message); | 
					
						
							|  |  |  | 						next(null); | 
					
						
							|  |  |  | 					}); | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				async.eachSeries(mids, getMessage, function(err) { | 
					
						
							| 
									
										
										
										
											2013-09-17 13:09:37 -04:00
										 |  |  | 					if (err) | 
					
						
							| 
									
										
										
										
											2013-08-26 13:18:20 -04:00
										 |  |  | 						return callback(err, null); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 					callback(null, messages); | 
					
						
							|  |  |  | 				}); | 
					
						
							|  |  |  | 			}); | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | }(exports)); |