Пример #1
0
        void RegisterParty(RegData firstRegData)
        {
            MatchingData newMd = new MatchingData();

            newMd.members = new List <RegData>();
            newMd.members.Add(firstRegData);
            newMd.level      = firstRegData.Item1.stats[(int)StatType.Lev];
            newMd.difficulty = firstRegData.Item2;
            newMd.regTime    = Stopwatch.StartNew();

            waitingParties.Add(newMd);
            Program.form.UpdateWaitingParties(waitingParties.Count);
        }
Пример #2
0
        void MatchParty(MatchingData md)
        {
            Int64 curTime = Stopwatch.GetTimestamp();

            LogRecord.Write("[Party Matching Time : " + md.regTime.ElapsedMilliseconds + " ms]");
            foreach (var member in md.members)
            {
                LogRecord.Write("[Player : " + member.Item1.pId + "] [Matching Time : " + member.Item4.ElapsedMilliseconds + " ms]");
            }

            int partyLevel = (int)md.members.Average(each => each.Item1.stats[0]);

            partyLevel += md.difficulty;
            if (partyLevel < 1)
            {
                partyLevel = 1;
            }

            using (var connection = _connectionFactory.CreateConnection())
            {
                using (var channel = connection.CreateModel())
                {
                    channel.QueueDeclare("simulation_queue", true, false, false, null);

                    var newDic = new Dictionary <string, object>();
                    newDic.Add("level", partyLevel);
                    for (int idx = 0; idx < Config.MATCHING_PARTY_MEMBERS_NUM; ++idx)
                    {
                        newDic.Add("char_" + idx, md.members[idx].Item1.pId);
                    }

                    var message = JsonMapper.ToJson(newDic);
                    var body    = Encoding.UTF8.GetBytes(message);

                    var properties = channel.CreateBasicProperties();
                    properties.SetPersistent(true);

                    channel.BasicPublish("", "simulation_queue", properties, body);
                    Console.WriteLine(" [x] Sent {0}", message);
                }
            }
        }
Пример #3
0
        void DeregisterParty(MatchingData md)
        {
            waitingParties.Remove(md);
            Program.form.UpdateWaitingParties(waitingParties.Count);

            // 파티에 있는 유저 모두 inPartyPlayers와 waitingParties에서 제거
            md.members.ForEach(mem => {
                inPartyPlayers.Remove(mem);
                Program.form.UpdateInPartyPlayers(inPartyPlayers.Count);

                waitingParties.ForEach(tMd =>
                {
                    tMd.members.Remove(mem);

                    // 유저를 제거후 파티가 비었다면 파티 삭제
                    if (tMd.members.Count == 0)
                    {
                        waitingParties.Remove(md);
                        Program.form.UpdateWaitingParties(waitingParties.Count);
                    }
                });
            });
        }