最基本功能的简易“聊天室”
一个简易网页版“聊天室”,主要是ajax的运用。这是一个基于facebook开发的应用的一小块,后台用groovy on grails框架实现,前台页面用了一些FBJS,FBML,所以如果没接触过facebook应用的朋友可能有些陌生,不过逻辑是一致的,很简单,初学者可以参考一下。
view:
![]()
My Balance
Lifetime
100
Current
100
Rank
100




Modern Family
Wall
Info
Fan Stream
Don't miss Wednesday's episode at 9/8c: "Game Changer": The release of a new product Phil wants coincides with his birthday; Mitchell has a newfound desire to toughen up; Cameron gets involved in a neighbor's marital problems.
Fan Stream
Everyone
Just My Friends

Post
Post comment to my Facebook profile
controller:
package com.webgiftr
class FanStreamController extends BaseController {
def beforeInterceptor = [action: this.&authInFrame, only: ['index']]
ChatService chatService
def index = {
def pageId = params.fb_page_id
//println jsonArray.length()
//println jsonArray.getJSONObject(0).getString('message')
render(view: 'index', model: [facebookId: userId, pageId: pageId, friendList:params.fb_sig_friends])
}
def fetchChatMessage = {
def startId = params.startId as Long
def pageId = params.pageId
def facebookId = params.facebookId
def msgList
msgList = chatService.fetchChatMessage(pageId, facebookId, startId)
render msgList
}
def fetchFriendsChatMessage = {
def startId = params.startId as Long
def pageId = params.pageId
def facebookId = params.facebookId
String[] friendList = [""]
if (params.friendList) {
friendList = params.friendList.split(",")
} else {
friendList = [""]
}
def msgList
msgList = chatService.getFriendsChatMessage(pageId, facebookId, startId, friendList)
render msgList
}
def writeChatMessage = {
def pageId = params.pageId
def facebookId = params.facebookId
def message = params.message
def date = new Date().toString()
chatService.writeChatMessage(pageId,facebookId,message)
render (template:"/fanStream/inc/commentsList",model:[pageId:pageId,facebookId:facebookId,message:message,date:date])
}
def displayChatMessage = {
def pageId = params.pageId
def facebookId = params.facebookId
def message = params.message
def date = params.date
render (template:"/fanStream/inc/commentsList",model:[pageId:pageId,facebookId:facebookId,message:message,date:date])
}
}
service:
package com.webgiftr
import org.json.JSONArray
import org.json.JSONObject
import net.spy.memcached.MemcachedClient
class ChatService {
boolean transactional = true
static MemcachedClient memCachedClient = null;
def init() {
if(!memCachedClient) {
memCachedClient = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211))
}
}
def writeChatMessage(String pageId, String facebookId, String message) {
init()
def pageChatMessageList = memCachedClient.get(pageId);
def replaceFlag = true
if(!pageChatMessageList) {
pageChatMessageList = []
pageChatMessageList << [id: 1L, facebookId: facebookId, message: message, date: new Date()]
replaceFlag = false
}
else {
def currentMessageSize = pageChatMessageList.size()
// writeChatMessage is invoked for every single message, so currentMessageSize's max value is 500 in theory.
// TODO: make the max list size configurable
if(currentMessageSize >= 500) {
pageChatMessageList.remove(0)
}
def id = pageChatMessageList[pageChatMessageList.size() - 1].id + 1
pageChatMessageList << [id: id, facebookId: facebookId, message: message, date: new Date()]
}
def ret
if (replaceFlag) {
ret = memCachedClient.replace(pageId, 0, pageChatMessageList)
}
else {
ret = memCachedClient.set(pageId, 0, pageChatMessageList)
}
return ret.get().booleanValue()
}
def fetchChatMessage(String pageId, String userFacebookId, Long startId) {
init()
def batchSize = 50
List pageChatMessageList = memCachedClient.get(pageId)
if(!pageChatMessageList) {
return new JSONArray()
}
def resultList = []
if(startId == 0) {
def lastIndex = pageChatMessageList.size() - 1
def startIndex = Math.max((lastIndex - batchSize + 1), 0)
resultList = pageChatMessageList.getAt(startIndex..lastIndex)
}
else {
resultList = pageChatMessageList.findAll {it.id > startId && it.facebookId != userFacebookId}
}
return makeChatMessageJson(resultList)
}
private makeChatMessageJson (chatMessageList) {
def jsonArray = new JSONArray()
chatMessageList.each {
def jsonObject = new JSONObject()
jsonObject.put('id', it.id)
jsonObject.put('facebookId', it.facebookId)
jsonObject.put('message', it.message)
jsonObject.put('date', it.date)
jsonArray.put(jsonObject)
}
return jsonArray
}
def getFriendsChatMessage(String pageId, String userFacebookId, Long startId, String[] friendsFacebookIdList) {
init()
List pageChatMessageList = memCachedClient.get(pageId)
if(!pageChatMessageList) {
return new JSONArray()
}
def batchSize = 50
def resultList = []
List friendsAllMessageList
if (startId == 0) {
friendsAllMessageList = pageChatMessageList.findAll { (friendsFacebookIdList as List).contains(it.facebookId) || it.facebookId == userFacebookId }.toList()
if (!friendsAllMessageList) {
return new JSONArray()
}
def lastIndex = friendsAllMessageList.size() - 1
def startIndex = Math.max((lastIndex - batchSize + 1), 0)
resultList = friendsAllMessageList.getAt(startIndex..lastIndex)
}
else {
friendsAllMessageList = pageChatMessageList.findAll { (friendsFacebookIdList as List).contains(it.facebookId) }.toList()
if (!friendsAllMessageList) {
return new JSONArray()
}
resultList = friendsAllMessageList.findAll {it.id > startId && it.facebookId != userFacebookId}
}
return makeChatMessageJson(resultList)
}
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
