public bool InitAsMasterPeer(int _inPort, string _inName, PeerToPeerManager _p2p) { if (!InitSocket(_inPort, false)) { return(false); } mPeerToPeerManager = _p2p; mPeerToPeerManager.SetInLobby(true); mPlayerId = 1; mIsMasterPeer = true; mHighestPlayerId = mPlayerId; mName = _inName; mPlayerCount = 1; mState = NetworkState.Lobby; mPlayerIdToName.Add(mPlayerId, mName); return(true); }
/// <summary> /// Trường hợp xảy ra khi được chấp nhận kết nối từ master peer /// </summary> /// <param name="input"></param> private void HandleWelcomePacket(ref InputMemoryBitStream input) { // đọc player id được cấp phát int playerid = 0, masterPeerPlayerid = 0; input.Read(ref playerid); UpdateHighestPlayerId(playerid); mPlayerId = playerid; mPlayerIdToName.Add(mPlayerId, mName); // bây giờ đọc player id của master peer. input.Read(ref masterPeerPlayerid); UpdateHighestPlayerId(masterPeerPlayerid); mPlayerIdToEndpointDic.Add(masterPeerPlayerid, mMasterPeerEndP); mEndpointToPlayerIdDic.Add(mMasterPeerEndP, masterPeerPlayerid); // tiếp theo đọc thông tin của tất cả người chơi còn lại. int playerCount = 0; input.Read(ref playerCount); mPlayerCount = playerCount; EndPoint Endp = null; for (int i = 0; i < playerCount - 1; i++) { input.Read(ref playerid); UpdateHighestPlayerId(playerid); ReadIPv4(ref input, ref Endp); mPlayerIdToEndpointDic.Add(playerid, Endp); mEndpointToPlayerIdDic.Add(Endp, playerid); } // Đọc tên của tất cả người chơi đã tham gia trò chơi string name = " "; for (int i = 0; i < playerCount; i++) { input.Read(ref playerid); input.Read(ref name); mPlayerIdToName.Add(playerid, name); } mPlayerCount++; // Gửi 1 gói thông báo cho các player khác là tôi đã tham gia trò chơi OutputMemoryBitStream output = new OutputMemoryBitStream(); output.Write(kIntroCC); output.Write(mPlayerId); output.Write(mName); foreach (var pair in mPlayerIdToEndpointDic) { SendPacket(output, pair.Value); } mPeerToPeerManager.SetInLobby(true); // đã vào phòng đợi để sẵn sàng tham gia trò chơi mState = NetworkState.Lobby; }