--网络连接管理器
require("network.PacketBuffer");
require("network.socketProcesser");
require("network.socketCmd");
local SimpleTCP = require("framework.SimpleTCP")
SocketManager = class("SocketManager")
SocketManager.getInstance = function()
printf("action", "SocketManager.getInstance ")
if not SocketManager.s_instance then
SocketManager.s_instance = SocketManager.new();
end
return SocketManager.s_instance;
end
SocketManager.releaseInstance = function()
printf("action", "SocketManager.releaseInstance ")
if SocketManager.s_instance then
SocketManager.s_instance:dtor();
end
SocketManager.s_instance = nil;
end
function SocketManager:ctor()
printLog("action", "SocketManager:ctor ")
self.m_socketProcessers = {};
self.buf = PacketBuffer.new();
end
function SocketManager:dtor()
printLog("action", "SocketManager:dtor ")
self.m_commonProcesser = nil;
if self._socket then
self._socket:close();
self._socket = nil;
end
end
--开始连接socket
function SocketManager:openSocket()
local host = SERVER_IP;
local port = SERVIER_PORT;
printLog("action SocketManager:openSocket", "------host ="..host);
printLog("action SocketManager:openSocket", "------port ="..port);
if not self._socket then
self._socket = SimpleTCP.new(host, port, handler(self, self.onTCPEvent));
self._socket:connect();
else
kLoginInfo:login();
end
end
function SocketManager:onTCPEvent( even, data )
if even == SimpleTCP.EVENT_DATA then
self:socket_data(data);
elseif even == SimpleTCP.EVENT_CONNECTING then
self:socket_connenting();
elseif even == SimpleTCP.EVENT_CONNECTED then
self:socket_connected();
-- self.stcp:send("Hello server, i'm SimpleTCP")
elseif even == SimpleTCP.EVENT_CLOSED then
self:socket_close();
elseif even == SimpleTCP.EVENT_FAILED then
self:socket_failed();
else
printLog("action", "SocketManager:onTCPEvent 类型匹配错误!!!!")
end
end
--socket 连接中
function SocketManager:socket_connenting()
printLog("action", "socket_connenting-------")
end
--socket 连接失败
function SocketManager:socket_failed()
printLog("action", "socket_failed-------")
end
--socket 连接成功
function SocketManager:socket_connected()
printLog("action", "scoket_connected-------")
--登录
kLoginInfo:login();
end
--socket 关闭
function SocketManager:socket_close()
printLog("action", "socket_close-------")
end
--socket发送消息
function SocketManager:send(code, subcode, msgContent)
if not self._socket then
return;
end
local data = (msgContent ~= nil) and json.encode(msgContent) or nil;
printLog("action", "客户端发送消息:".."code="..code.." subcode="..subcode);
if json.encode(msgContent) then
printLog("action", "客户端发送消息内容:"..json.encode(msgContent))
end
local buf = PacketBuffer.createMessage(code, subcode, data);
self._socket:send(buf:getPack());
end
--socket 接收到数据
function SocketManager:socket_data(data)
local msgs = self.buf:parseMessage(data);
for i=1,#msgs do
local msg = msgs[i];
for k, v in ipairs(self.m_socketProcessers) do
local info = json.decode(msg.content);
if v:onReceivePacket(msg.subcode, info) then
break;
end
end
end
end
--添加监听
function SocketManager:addSocketProcesser(socketProcesser)
if not self:checkExist(self.m_socketProcessers, socketProcesser) then
table.insert(self.m_socketProcessers, 1, socketProcesser);
end
end
--移除监听
function SocketManager:removeSocketProcesser(socketProcesser)
local index = self:getIndex(self.m_socketProcessers,socketProcesser);
if index ~= -1 then
table.remove(self.m_socketProcessers,index);
end
end
--监听index
function SocketManager:getIndex(vtable, value)
for k,v in pairs(vtable or {}) do
if v == value then
return k;
end
end
return -1;
end
function SocketManager:checkExist(vtable, value)
return self:getIndex(vtable,value) ~= -1;
end
网友评论