//================================================================== private void DispatchProtocol(uint pid, uint index, object ptlObj) { PTLListenerHelper helper = null; if (index > 0) { int i = 0; for (i = 0; i < m_lstRspListener.Count; i++) { helper = m_lstRspListener[i]; if (helper.index == index) { m_lstRspListener.RemoveAt(i); helper.Dispatch(ptlObj); break; } } if (i == m_lstRspListener.Count) { Debuger.LogWarning(TAG, "DispatchProtocol() pid:{0}, index:{1} 重复收到!", pid, index); } } helper = m_mapPID2Listener[pid]; if (helper != null) { helper.Dispatch(ptlObj); } else { Debuger.LogWarning(TAG, "DispatchProtocol() pid:{0} 没有监听者!", pid); } }
//================================================================== private void DispatchProtocol(uint pid, uint index, object ptlObj) { PTLListenerHelper helper = null; if (index > 0) { int i = 0; for (i = 0; i < m_lstRspListener.Count; i++) { helper = m_lstRspListener[i]; if (helper.index == index) { m_lstRspListener.RemoveAt(i); helper.Dispatch(ptlObj); break; } } if (i == m_lstRspListener.Count) { MyLogger.LogWarning(TAG, "DispatchProtocol() pid:{0}, index:{1} duplicated msg!", pid.ToString(), index); } } helper = m_mapPID2Listener[pid]; if (helper != null) { helper.Dispatch(ptlObj); } else { MyLogger.LogWarning(TAG, "DispatchProtocol() pid:{0} no active listner!", pid.ToString()); } }
public void RemoveListener(uint pid, ProtocolListener listener) { PTLListenerHelper helper = m_mapPID2Listener[pid]; if (helper != null) { helper.listener -= listener; } }
//================================================================== public void AddListener(uint pid, ProtocolListener listener) { PTLListenerHelper helper = m_mapPID2Listener[pid]; if (helper == null) { helper = new PTLListenerHelper(); helper.pid = pid; m_mapPID2Listener[pid] = helper; } helper.listener -= listener; helper.listener += listener; }
//================================================================== void Update() { float currTime = UnityEngine.Time.realtimeSinceStartup; for (int i = 0; i < m_lstRspListener.Count; i++) { PTLListenerHelper helper = m_lstRspListener[i]; if (currTime - helper.timestamp >= PTLTimeoutValue) { m_lstRspListener.RemoveAt(i); --i; helper.DispatchError(NetErrorCode.Timeout); } } }
public void Send(uint pid, object req, uint connId, Type rspType, ProtocolListener listener, ErrorListener errorListener) { //regist rspType if (rspType != null) { Register(pid + 1, rspType); } //record listner uint index = 0; if (listener != null || errorListener != null) { index = ++m_index; PTLListenerHelper helper = new PTLListenerHelper(); helper.listener = listener; helper.errorListener = errorListener; helper.timestamp = UnityEngine.Time.realtimeSinceStartup; helper.pid = pid + 1;//this is a rule helper.index = index; m_lstRspListener.Add(helper); } //serialize protocol byte[] dataBuffer = SerializeProtocol(req); //protocol header ProtocolHeader head = new ProtocolHeader(); head.pid = pid; head.index = index; head.dataSize = dataBuffer.Length; head.checksum = SGFEncoder.CheckSum(dataBuffer, dataBuffer.Length); //serilize protocol header m_sendBufferTemp.Position = 0; head.Serialize(m_sendBufferTemp); //combine buffer of the protocol m_sendBufferTemp.AddBytes(dataBuffer); ConnectManager.Instance.Send(connId, m_sendBufferTemp.GetBytes(), m_sendBufferTemp.Length); }
public void Send(uint pid, object req, uint connId, Type rspType, ProtocolListener listener, ErrorListener errorListener) { //注册Rsp类 if (rspType != null) { Register(pid + 1, rspType); } //记录Listener uint index = 0; if (listener != null || errorListener != null) { index = ++m_index; PTLListenerHelper helper = new PTLListenerHelper(); helper.listener = listener; helper.errorListener = errorListener; helper.timestamp = UnityEngine.Time.realtimeSinceStartup; helper.pid = pid + 1;//这是一个规则 helper.index = index; m_lstRspListener.Add(helper); } //序列化协议数据 byte[] dataBuffer = SerializeProtocol(req); //协议头 ProtocolHead head = new ProtocolHead(); head.pid = pid; head.index = index; head.dataSize = dataBuffer.Length; head.checksum = SGFEncoding.CheckSum(dataBuffer, dataBuffer.Length); //序列化协议头 m_sendBufferTemp.Position = 0; head.Serialize(m_sendBufferTemp); //组合整个协议Buffer m_sendBufferTemp.AddBytes(dataBuffer); ConnectManager.Instance.Send(connId, m_sendBufferTemp.GetBytes(), m_sendBufferTemp.Length); }