2025-06-04 05:02:57 +08:00

175 lines
3.9 KiB
Plaintext

autoImport("ChatZoneData")
autoImport("ChatZoneMemberData")
autoImport("ChatZoneSummaryData")
ChatZoomProxy = class("ChatZoomProxy", pm.Proxy)
ChatZoomProxy.Instance = nil
ChatZoomProxy.NAME = "ChatZoomProxy"
function ChatZoomProxy:ctor(proxyName, data)
self.proxyName = proxyName or ChatRoomProxy.NAME
if (ChatZoomProxy.Instance == nil) then
ChatZoomProxy.Instance = self
end
if data ~= nil then
self:setData(data)
end
self:Init()
end
function ChatZoomProxy:Init()
self.messageQueue = {}
self.messageCount = 200
self.currentHost = 0
end
function ChatZoomProxy:InQueueInputMessage(data)
if data:GetId() == self:CachedZoomInfo().ownerid then
data:SetChannelName(ZhString.Chat_owner)
else
data:SetChannelName(ZhString.Chat_visitor)
end
table.insert(self.messageQueue, data)
local length = #self.messageQueue
if (length > self.messageCount) then
self.messageQueue[length]:Destroy()
table.remove(self.messageQueue, 1)
end
end
function ChatZoomProxy:OutQueueHeadMessage()
end
function ChatZoomProxy:ClearMessageQueue()
self.messageQueue = {}
end
function ChatZoomProxy:ClearZoomInfo()
if(self.zoomInfo) then
self.zoomInfo:Destroy()
self.zoomInfo = nil
end
end
function ChatZoomProxy:InQueueTipMessage(data)
table.insert(self.messageQueue, data)
local length = #self.messageQueue
if (length > self.messageCount) then
table.remove(self.messageQueue, 1)
end
end
function ChatZoomProxy:Message()
-- local reverseTable = {}
-- for i = #self.messageQueue, 1, -1 do
-- table.insert(reverseTable, self.messageQueue[i])
-- end
-- return reverseTable
return self.messageQueue
end
function ChatZoomProxy:CacheZoomInfo(data)
if(self.zoomInfo==nil) then
self.zoomInfo = ChatZoneSummaryData.CreateAsTable(data)
else
self.zoomInfo:Update(data)
end
end
function ChatZoomProxy:CachedZoomInfo()
return self.zoomInfo
end
function ChatZoomProxy:GetMembers()
return self.zoomInfo.members
end
function ChatZoomProxy:UpdateMembers(members)
if (members == nil or #members <= 0) then
return
end
local cachedMembers = self.zoomInfo.members
for i = 1, #members do
local member = members[i]
local isCached = false
for j = 1, #cachedMembers do
local cachedMember = cachedMembers[j]
if (cachedMember.id == member.id) then
isCached = true
if (member.job == SceneChatRoom_pb.ECHATROOM_OWNER) then
self.zoomInfo.ownerid = member.id
local data = cachedMembers[j]
table.remove(cachedMembers, j)
data:SetData(member)
data:SetOwner(member.id)
table.insert(cachedMembers, 1, data)
else
cachedMembers[j]:SetData(member)
cachedMembers[j]:SetOwner(nil)
end
end
end
if (isCached == false) then
local data = ChatZoneMemberData.CreateAsTable(member)
data:SetOwner(self.zoomInfo.ownerid)
table.insert(cachedMembers, data)
end
end
end
function ChatZoomProxy:DeleteMembers(members)
if (members == nil or #members <= 0) then
return
end
local cachedMembers = self.zoomInfo.members
for i = 1, #members do
local member = members[i]
local isCached = false
for j = #cachedMembers,1,-1 do
local cachedMember = cachedMembers[j]
if (cachedMember.id == member) then
isCached = true
cachedMembers[j]:Destroy()
table.remove(cachedMembers, j)
end
end
end
end
function ChatZoomProxy:CacheCurrentHost(host)
self.currentHost = host
end
function ChatZoomProxy:CachedCurrentHost()
return self.currentHost
end
function ChatZoomProxy:SelfID()
return Game.Myself.data.id
end
function ChatZoomProxy:SelfIsHost()
return self:SelfID() == self:CachedZoomInfo().ownerid
end
function ChatZoomProxy:SomeoneIsInZoom(id)
local zoomInfo = self:CachedZoomInfo()
if (zoomInfo == nil) then
return false
end
local members = zoomInfo.members
for k, v in ipairs(members) do
if (v.id == id) then
return true
end
end
return false
end
function ChatZoomProxy:IsInChatZone()
return self:CachedZoomInfo() ~= nil
end