// ---------------------------------------------------------------- //
    // 패킷 수신 함수].

    // 동기 대기 패킷 수신.
    public void OnReceiveSyncPacket(int node, PacketId id, byte[] data)
    {
        Debug.Log("[CLIENT]OnReceiveSyncPacket");

        GameSyncPacket packet = new GameSyncPacket(data);
        GameSyncInfo   sync   = packet.GetPacket();

        GlobalParam.get().seed = sync.seed;

        // 초기 장비를 보존한다.
        for (int i = 0; i < sync.items.Length; ++i)
        {
            CharEquipment equip = sync.items[i];

            GlobalParam.get().shot_type[equip.globalId] = (SHOT_TYPE)equip.shotType;
            this.select_done_players[equip.globalId] = true;

            Debug.Log("[CLIENT] AccountID:" + equip.globalId + " ShotType:" + equip.shotType);
        }

        // 응답이 있는 쿼리를 검색.
        string            account_id = this.player.control.getAccountID();
        QuerySelectFinish query      = QueryManager.get().findQuery <QuerySelectFinish>(x => x.account_id == account_id);

        if (query != null)
        {
            Debug.Log("[CLIENT]QuerySelectDone done");
            query.set_done(true);
            query.set_success(true);
        }

        Debug.Log("[CLIENT]Recv seed:" + sync.seed);
    }
    // ================================================================ //

    public void OnReceiveGameSyncPacket(int node, PacketId id, byte[] data)
    {
        GameSyncPacket packet = new GameSyncPacket(data);
        GameSyncInfo   info   = packet.GetPacket();

        Debug.Log("[SERVER] Receive Init packet");

        // 게임서버에서 난수 동기화 작업
        TimeSpan ts      = new TimeSpan(DateTime.Now.Ticks);
        double   seconds = ts.TotalSeconds;

        info.seed = (int)((long)seconds - (long)(seconds / 1000.0) * 1000);
        Debug.Log("Seed: " + info.seed);

        // 세션 관리 정보와 플레이어 글로벌 ID를 연결
        info.members = new CharacterID[NetConfig.PLAYER_MAX];
        for (int i = 0; i < NetConfig.PLAYER_MAX; i++)
        {
            info.members[i].globalId = i;
            if (!m_nodes.ContainsKey(node))
            {
                m_nodes.Add(node, info.members[i].globalId);
            }
        }
    }
Example #3
0
    private void checkInitidalEquipment()
    {
        if (m_syncFlag == false)
        {
            return;
        }

        int equipFlag = 0;

        foreach (int index in m_equips.Keys)
        {
            equipFlag |= 1 << index;
        }

        // 수신한 패킷 데이터로부터 캐릭터 ID와 장비의 수신을 체크.
        equipFlag &= m_currentPartyMask;
        if (equipFlag == m_currentPartyMask)
        {
            // 전원의 무기 선택 정보가 모였으므로 던전 돌입.
            GameSyncInfo sync = new GameSyncInfo();

            // 게임 서버의 난수로 시드를 결정한다.
            TimeSpan ts      = new TimeSpan(DateTime.Now.Ticks);
            double   seconds = ts.TotalSeconds;
            sync.seed = (int)((long)seconds - (long)(seconds / 1000.0) * 1000);

            Debug.Log("Seed: " + sync.seed);

            // 장비 정보를 저장.
            sync.items = new CharEquipment[NetConfig.PLAYER_MAX];
            for (int i = 0; i < NetConfig.PLAYER_MAX; ++i)
            {
                sync.items[i].globalId = i;
                if (m_equips.ContainsKey(i))
                {
                    sync.items[i].shotType = m_equips[i];
                }
                else
                {
                    sync.items[i].shotType = 0;
                }
            }

            if (network_ != null)
            {
                // 각 단말에 알림.
                GameSyncPacket syncPacket = new GameSyncPacket(sync);
                network_.SendReliableToAll <GameSyncInfo>(syncPacket);
            }

            // 매칭 서버를 사용하지 않을 때의 테스트용으로 초기 장비 정보를 클리어해 둔다.
            m_equips.Clear();
            Debug.Log("[SERVER] Clear equipment info.");

            m_syncFlag = false;
        }
    }
Example #4
0
    // ================================================================ //

    private void SendGameSyncInfo()
    {
        Debug.Log("[CLIENT]SendGameSyncInfo");

        GameSyncInfo data = new GameSyncInfo();

        data.seed  = 0;
        data.items = new CharEquipment[NetConfig.PLAYER_MAX];

        GameSyncPacket packet = new GameSyncPacket(data);

        if (m_network != null)
        {
            int serverNode = m_network.GetServerNode();
            m_network.SendReliable <GameSyncInfo>(serverNode, packet);
        }
    }
    // ================================================================ //
    public void OnReceiveGameSyncPacket(int node, PacketId id, byte[] data)
    {
        GameSyncPacket packet = new GameSyncPacket(data);
        GameSyncInfo info = packet.GetPacket();

        Debug.Log("[SERVER] Receive Init packet");

        // 게임서버에서 난수 동기화 작업
        TimeSpan ts = new TimeSpan(DateTime.Now.Ticks);
        double seconds = ts.TotalSeconds;
        info.seed = (int)((long)seconds - (long)(seconds / 1000.0) * 1000);
        Debug.Log("Seed: " + info.seed);

        // 세션 관리 정보와 플레이어 글로벌 ID를 연결
        info.members = new CharacterID[NetConfig.PLAYER_MAX];
        for(int i = 0; i < NetConfig.PLAYER_MAX; i++)
        {
            info.members[i].globalId = i;
            if (!m_nodes.ContainsKey(node))
            {
                m_nodes.Add(node, info.members[i].globalId);
            }
        }
    }
	// ---------------------------------------------------------------- //
	// 패킷 수신 함수].

	// 동기 대기 패킷 수신.
	public void OnReceiveSyncPacket(int node, PacketId id, byte[] data)
	{
		Debug.Log("[CLIENT]OnReceiveSyncPacket");
		
		GameSyncPacket packet = new GameSyncPacket(data);
		GameSyncInfo sync = packet.GetPacket();

		GlobalParam.get().seed = sync.seed;

		// 초기 장비를 보존한다.
		for (int i = 0; i < sync.items.Length; ++i) {

			CharEquipment equip = sync.items[i];

			GlobalParam.get().shot_type[equip.globalId] = (SHOT_TYPE)equip.shotType;
			this.select_done_players[equip.globalId] = true;

			Debug.Log("[CLIENT] AccountID:" + equip.globalId + " ShotType:" + equip.shotType);
		}

		// 응답이 있는 쿼리를 검색.
		string account_id = this.player.control.getAccountID();
		QuerySelectFinish	query = QueryManager.get().findQuery<QuerySelectFinish>(x => x.account_id == account_id);

		if (query != null) {
			Debug.Log("[CLIENT]QuerySelectDone done");
			query.set_done(true);
			query.set_success(true);
		}
		
		Debug.Log("[CLIENT]Recv seed:" + sync.seed);
	}
Example #7
0
	private void checkInitidalEquipment() 
	{
		if (m_syncFlag == false) {
			return;
		}

		int equipFlag = 0;
		foreach (int index in m_equips.Keys) {
			equipFlag |= 1 << index;
		}

		// 수신한 패킷 데이터로부터 캐릭터 ID와 장비의 수신을 체크.
		equipFlag &= m_currentPartyMask;
		if (equipFlag == m_currentPartyMask) {

			// 전원의 무기 선택 정보가 모였으므로 던전 돌입.
			GameSyncInfo sync = new GameSyncInfo();

			// 게임 서버의 난수로 시드를 결정한다.
			TimeSpan ts = new TimeSpan(DateTime.Now.Ticks);
			double seconds = ts.TotalSeconds;
			sync.seed = (int) ((long)seconds - (long)(seconds/1000.0)*1000);

			Debug.Log("Seed: " + sync.seed);

			// 장비 정보를 저장.
			sync.items = new CharEquipment[NetConfig.PLAYER_MAX];
			for (int i = 0; i < NetConfig.PLAYER_MAX; ++i) {
				sync.items[i].globalId = i;
				if (m_equips.ContainsKey(i)) {
					sync.items[i].shotType = m_equips[i];
				}
				else {
					sync.items[i].shotType = 0;
				}
			}
			
			if (network_ != null) {
				// 각 단말에 알림.
				GameSyncPacket syncPacket = new GameSyncPacket(sync);
				network_.SendReliableToAll<GameSyncInfo>(syncPacket);
			}

			// 매칭 서버를 사용하지 않을 때의 테스트용으로 초기 장비 정보를 클리어해 둔다.
			m_equips.Clear();
			Debug.Log("[SERVER] Clear equipment info.");

			m_syncFlag = false;
		}
	}