public FSPSession CreateSession() { Debuger.Log(); uint sid = NewSessionID(); FSPSession session = new FSPSession(sid, HandleSessionSend); m_mapSession.Add(sid, session); return(session); }
public FSPSession GetSession(uint sid) { FSPSession session = null; lock (m_mapSession) { session = m_mapSession[sid]; } return(session); }
public void Release() { Debuger.Log(); if (m_session != null) { m_session.SetReceiveListener(null); m_session.Active(false); m_session = null; } }
//================================================================= public void Create(uint id, int authId, FSPSession session, Action <FSPPlayer, FSPMessage> listener) { Debuger.Log("id:{0}, authId:{1}, sid:{2}", id, authId, session.id); m_id = id; m_authId = authId; m_RecvListener = listener; m_session = session; m_session.SetReceiveListener(OnRecvFromSession); m_FrameCache = new Queue <FSPFrame>(); }
//=================================================================== public FSPPlayer AddPlayer(uint playerId, FSPSession session) { //Debuger.Log("playerId:{0}", playerId); if (m_State != FSPGameState.Create) { //Debuger.LogError("当前状态下无法AddPlayer! State = {0}", m_State); return(null); } FSPPlayer player = null; for (int i = 0; i < m_ListPlayer.Count; i++) { player = m_ListPlayer[i]; if (player.id == playerId) { //Debuger.LogWarning("PlayerId已经存在!用新的替代旧的! PlayerId = " + playerId); m_ListPlayer.RemoveAt(i); player.Release(); break; } } if (m_ListPlayer.Count >= MaxPlayerNum) { //Debuger.LogError("已经达到最大玩家数了! MaxPlayerNum = {0}", MaxPlayerNum); return(null); } player = new FSPPlayer(); player.Create(playerId, m_authId, session, OnRecvFromPlayer); m_ListPlayer.Add(player); return(player); }
private void DoReceiveInThread() { EndPoint remotePoint = IPUtils.GetIPEndPointAny(AddressFamily.InterNetwork, 0); int cnt = m_SystemSocket.ReceiveFrom(m_RecvBufferTemp, m_RecvBufferTemp.Length, SocketFlags.None, ref remotePoint); if (cnt > 0) { m_RecvBufferTempReader.Attach(m_RecvBufferTemp, cnt); byte[] m_32b = new byte[4]; m_RecvBufferTempReader.ReadBytes(m_32b, 0, 4); uint sid = BitConverter.ToUInt32(m_32b, 0); lock (m_mapSession) { FSPSession session = null; if (sid == 0) { Debuger.LogError("基于KCP的Sid为0,该包需要被丢掉"); } else { session = m_mapSession[sid]; } if (session != null) { session.Active(remotePoint as IPEndPoint); session.DoReceiveInGateway(m_RecvBufferTemp, cnt); } else { Debuger.LogWarning("无效的包! sid:{0}", sid); } } } }