public LoadPlayerDataResponse(LoadPlayerDataRequest playerData)
        {
            using (CSSStatsDataContext statsDB = new CSSStatsDataContext())
            {
                using (CSSDataContext db = new CSSDataContext())
                {
                    var login = Login.FindLoginByUsernameOrCallsign(db, playerData.LoginUsername);

                    if (login == null)
                    {
                        Succeeded = false;
                        ErrorMessage = "Couldn't find player's login user id.";
                        return;
                    }

                    ScoreQueue scoreQueue = statsDB.ScoreQueues.FirstOrDefault(p => p.LoginId == login.Id && p.GameGuid == playerData.GameGuid);

                    if (scoreQueue == null)
                    {
                        statsDB.ScoreQueues.InsertOnSubmit(new ScoreQueue()
                        {
                            LoginId = login.Id,
                            GameGuid = playerData.GameGuid,
                            Score = playerData.Score,
                            PilotBaseKills = playerData.PilotBaseKills,
                            PilotBaseCaptures = playerData.PilotBaseCaptures,
                            WarpsSpotted = playerData.WarpsSpotted,
                            AsteroidsSpotted = playerData.AsteroidsSpotted,
                            MinerKills = playerData.MinerKills,
                            BuilderKills = playerData.BuilderKills,
                            LayerKills = playerData.LayerKills,
                            CarrierKills = playerData.CarrierKills,
                            PlayerKills = playerData.PlayerKills,
                            BaseKills = playerData.BaseKills,
                            BaseCaptures = playerData.BaseCaptures,
                            TechsRecovered = playerData.TechsRecovered,
                            Flags = playerData.Flags,
                            Artifacts = playerData.Artifacts,
                            Rescues = playerData.Rescues,
                            Kills = playerData.Kills,
                            Assists = playerData.Assists,
                            Deaths = playerData.Deaths,
                            Ejections = playerData.Ejections,
                            Win = playerData.Win,
                            Lose = playerData.Lose,
                            CommandWin = playerData.CommandWin,
                            CommandLose = playerData.CommandLose,
                            TimePlayed = playerData.TimePlayed,
                            TimeCommanded = playerData.TimeCommanded,
                            CommandCredit = playerData.CommandCredit,
                            CombatRating = playerData.CombatRating
                        });
                    }

                    statsDB.SubmitChanges();
                }
            }

            this.Succeeded = true;
        }
        public static List<IMessage> GetGroupMessages(CSSDataContext db, string callsign)
        {
            var messages = new List<IMessage>();
            var aliases     = Alias.ListAliases(db, callsign);

            foreach (var alias in aliases)
            {
                messages.AddRange(
                    alias.GroupMessage_Alias.Where(p => p.DateViewed == null).Select(p => (IMessage) p.GroupMessage).ToList()
                    );

                //messages.AddRange(alias.GroupMessages
                //    .Where(
                //        p => p.DateExpires <=  DateTime.Now
                //        &&	p.DateToSend >= DateTime.Now
                //        && p.GroupMessage_Alias
                //            .FirstOrDefault(r => r.Alias == alias && r.DateViewed == null) != null)
                //    .Select(q => (IMessage)q).ToList());

                foreach (var gma in alias.GroupMessage_Alias.Where(p => p.DateViewed == null && messages.Select(q => q.Id).Contains(p.GroupMessageId)))
                {
                    //if (messages.FirstOrDefault(p => p.Id == gma.GroupMessageId) != null)
                        gma.DateViewed = DateTime.Now;
                }

                db.SubmitChanges();
            }

            return messages;
        }
        protected void btnSaveNewGroup_Click(object sender, EventArgs e)
        {
            using(CSSDataContext db = new CSSDataContext())
            {
                if (db.Groups.FirstOrDefault(p => p.Name == txtName.Text.Trim()) != null)
                {
                    lblErrorText.Text = "The group or squad name you specified: " + txtName.Text + " already exists.";
                    return;
                }

                if (db.Groups.FirstOrDefault(p => p.Tag == txtTag.Text.Trim()) != null)
                {
                    lblErrorText.Text = "The tag name you specified: " + txtTag.Text + " already exists.";
                    return;
                }

                db.Groups.InsertOnSubmit(new Group()
                {
                    Name = txtName.Text.Trim(),
                    DateCreated = DateTime.Now,
                    IsSquad = chkIsSquad.Checked,
                    Tag = txtTag.Text
                });

                db.SubmitChanges();

                this.DataBind();
            }
        }
        public static bool Handle(HttpContext context, int lobbyId, string filename)
        {
            using (var db = new CSSDataContext())
            {
                if (filename.Contains(".."))
                    throw new Exception("Could not load path.");

                var lobby       = db.Lobbies.Single(p => p.IsEnabled && p.Id == lobbyId);
                var filepath    = Path.Combine(lobby.BasePath, filename);

                //If file is not found, attempt to send file from the default path
                var info = new FileInfo(filepath);

                if (!info.Exists)
                {
                    filepath    = Path.Combine(ConfigurationManager.AppSettings["DefaultLobbyPath"], filename);
                    info        = new FileInfo(filepath);

                    if (!info.Exists)
                        throw new FileNotFoundException();
                }

                //Transmit the file
                context.Response.Clear();
                context.Response.ContentType = "application/octet-stream";
                context.Response.AddHeader("Content-Length", info.Length.ToString());
                context.Response.AddHeader("Content-Disposition",
                    string.Format("attachment; filename=\"{0}\"",
                    Path.GetFileName(filename)));
                context.Response.TransmitFile(filepath);
            }

            return true;
        }
        protected void cvCaptcha_ServerValidate(object source, ServerValidateEventArgs args)
        {
            bool isValid = false;

            if (ViewState["captchaToken"] != null)
            {
                Guid captchaToken = (Guid)ViewState["captchaToken"];
                using (CSSDataContext db = new CSSDataContext())
                {
                    var captcha = db.Captchas.FirstOrDefault(p => p.Id == captchaToken);

                    //args.Value
                    //CustomValidator cvCaptcha = (CustomValidator)source;
                    //TextBox txtValidationCode = (TextBox) cvCaptcha.ControlToValidate;
                    if (captcha != null && args.Value.Equals(captcha.Answer, StringComparison.InvariantCultureIgnoreCase) == true)
                    {
                        isValid = true;
                    }
                }
            }

            if (isValid == false)
                ViewState["captchaToken"] = null;

            args.IsValid = isValid;
        }
        public static void CreateUser(string user, string password, string email)
        {
            using (var db = new CSSDataContext())
            {
                var identity = new Identity()
                {
                    DateLastLogin = DateTime.Now,
                    LastGlobalMessageDelivery = DateTime.Now
                };

                var login = new Login()
                {
                    Username    = user,
                    Password    = Hash(password),
                    Email       = email,
                    DateCreated = DateTime.Now,
                };

                var alias = new Alias()
                {
                    Callsign    = user,
                    DateCreated = DateTime.Now,
                    IsDefault   = true,
                    IsActive = true
                };

                login.Aliases.Add(alias);
                identity.Logins.Add(login);
                login.Lobby_Logins.Add(new Lobby_Login() { Lobby = db.Lobbies.First(p => p.Name == "Production") });

                db.Identities.InsertOnSubmit(identity);
                db.SubmitChanges();
            }
        }
        public void TestCheckForUpdates()
        {
            int lobbyId = 0;
            using (var db = new CSSDataContext())
            {
                //Create autoupdate files
                var file = new AutoUpdateFile() { Filename = "mdl", IsProtected = true };
                db.AutoUpdateFiles.InsertOnSubmit(file);

                var lobby   = db.Lobbies.FirstOrDefault();
                lobbyId     = lobby.Id;

                file.AutoUpdateFile_Lobbies.Add(new AutoUpdateFile_Lobby()
                {
                    CurrentVersion  = "1.0",
                    DateCreated     = DateTime.Now,
                    DateModified    = DateTime.Now,
                    Lobby           = lobby,
                    ValidChecksum   = "VALID"
                });

                db.SubmitChanges();
            }

            var clientService   = new ClientService();
            var files           = clientService.CheckForUpdates(lobbyId);
            var fileResult      = files.Files.FirstOrDefault();

            Assert.AreEqual(1, files.Files.Count);
            Assert.IsTrue(fileResult.IsProtected);
            Assert.AreEqual("mdl", fileResult.Filename);
            Assert.AreEqual("VALID", fileResult.ValidChecksum.Trim());
            Assert.AreEqual("1.0", fileResult.CurrentVersion);
            Assert.AreEqual(lobbyId, fileResult.LobbyId);
        }
        protected void btnSubmit_Click(object sender, EventArgs e)
        {
            using(CSSDataContext db = new CSSDataContext())
            {
                // If the page loaded, then don't worry about the date at this point, they'll get a free ride if
                // they camped on the page for a while. The date is just to keep the enemy from getting a hold
                // of an old email and coming back in with it.
                var logins = db.Logins.Where(p => p.PasswordResetGuid == new Guid(Request.Params["resetGuid"]));

                foreach(var login in logins)
                {
                    CssMembershipProvider cssMembershipProvider = new CssMembershipProvider();

                    string tempPassword = cssMembershipProvider.ResetPassword(login.Username, null);

                    cssMembershipProvider.ChangePassword(login.Username, tempPassword, txtPassword.Text);
                }

                db.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, logins);

                foreach (var login in logins)
                {
                    // Keep anyone from reusing an old password reset mail.
                    login.PasswordResetGuid = Guid.Empty;
                }

                db.SubmitChanges();
            }

            divResetPassword.Visible = false;
            divResetSuccess.Visible = true;
        }
        public static bool Write(CSSDataContext db, LogType type, string message, bool submit)
        {
            try
            {
                db.Logs.InsertOnSubmit(new Log()
                {
                    DateOccurred = DateTime.Now,
                    Message     = message,
                    Type        = (byte)type
                });

                if (submit)
                    db.SubmitChanges();

                Console.WriteLine(String.Format("{0}: {1} {2}", DateTime.Now, type.ToString(), message));

                return true;
            }
            catch(Exception error)
            {
                var errorMessage = new StringBuilder()
                    .AppendLine("Failed to write data to log:")
                    .Append("Type: ").AppendLine(type.ToString())
                    .Append("Message: ").AppendLine(message);

                Debug.WriteLine(errorMessage);

                Error.Write(db, new Exception(errorMessage.ToString(), error), submit);
                return false;
            }
        }
        /// <summary>
        /// Calls BlackboxServer module to verify login and retrieve blackbox information.
        /// </summary>
        internal LoginResult Verify(bool useDebugBlackbox)
        {
            byte[] data;

            var alias   = Alias;

            string ipAddress = "127.0.0.1";
            if (HttpContext.Current != null)
                ipAddress = HttpContext.Current.Request.UserHostAddress;

            var result = Validation.CreateSession(ipAddress, Username, Password, LobbyId, useDebugBlackbox, ref alias, out data);

            int rank = 0;

            using (CSSDataContext db = new CSSDataContext())
            {
                var rankDetail = DataAccess.Alias.GetRankForCallsign(db, alias);
                if (rankDetail != null)
                    rank = (int)rankDetail.Rank;
            }

            return new LoginResult()
            {
                Status          = result,
                BlackboxData    = data,
                AcceptedAlias   = alias,
                Rank			= rank
            };
        }
 private void BindData()
 {
     using (CSSDataContext db = new CSSDataContext())
     {
         gvPolls.DataSource = db.Polls.OrderByDescending(p => p.DateExpires);
         gvPolls.DataBind();
     }
 }
 public static void Clean()
 {
     using (var db = new CSSDataContext())
     {
         db.Logs.DeleteAllOnSubmit(db.Logs.Where(p => p.DateOccurred < DateTime.Now.AddDays(-30)));
         db.SubmitChanges();
     }
 }
 public static void Clean()
 {
     using (var db = new CSSDataContext())
     {
         db.LogIPs.DeleteAllOnSubmit(db.LogIPs.Where(p => p.LastAccessed < DateTime.Now.AddDays(-180)));
         db.SubmitChanges();
     }
 }
 internal static List<Ban> ListBans(string alias)
 {
     using (var db = new CSSDataContext())
     {
         var login = Login.FindLoginByUsernameOrCallsign(db, alias);
         return login.Identity.Bans.ToList();
     }
 }
        public static Login FindLoginByUsernameOrCallsign(CSSDataContext db, string usernameOrCallsign)
        {
            var login = FindLoginByUsername(db, usernameOrCallsign);

            if (login == null)
                login = FindLoginByCallsign(db, usernameOrCallsign);

            return login;
        }
        internal static ActiveKey GenerateBlackbox(CSSDataContext db, bool debugMode)
        {
            var key = Compiler.Build(debugMode);

            db.ActiveKeys.InsertOnSubmit(key);
            db.SubmitChanges();

            return key;
        }
 public static void MyClassInitialize(TestContext testContext)
 {
     using (var db = new CSSDataContext())
     {
         if (db.DatabaseExists() == false)
         {
             db.CreateDatabase();
         }
     }
 }
 public static List<Login_UnlinkedLogin> GetAllFromCache()
 {
     return CacheManager<List<Login_UnlinkedLogin>>.Get("DataAccessIdentity::AreIdentitiesPermanentlyUnlinked:Login_UnlinkedLogins", CacheSeconds.TenSeconds, delegate()
     {
         using (CSSDataContext db = new CSSDataContext())
         {
             return db.Login_UnlinkedLogins.ToList();
         }
     });
 }
 public static void RemoveExpiredCaptchas()
 {
     using (CSSDataContext db = new CSSDataContext())
     {
         var timeout = DateTime.Now.AddSeconds(-CaptchaExpirationTimeInSeconds);
         var oldCaptchas = db.Captchas.Where(p => p.DateCreated < timeout);
         db.Captchas.DeleteAllOnSubmit(oldCaptchas);
         db.SubmitChanges();
     }
 }
 public static List<Login> GetAllFromCache()
 {
     return CacheManager<List<Login>>.Get("Login::GetAll()", CacheSeconds.TenSeconds, delegate()
     {
         using (CSSDataContext db = new CSSDataContext())
         {
             return db.Logins.ToList();
         }
     });
 }
Beispiel #21
0
        private void SaveTeams(Allegiance.CommunitySecuritySystem.DataAccess.CSSDataContext db, DataAccess.CSSStatsDataContext statsDB, Allegiance.CommunitySecuritySystem.Server.Data.GameDataset.GameRow gameRow, int gameIdentID)
        {
            foreach (Data.GameDataset.TeamRow teamRow in gameRow.GetTeamRows())
            {
                var commanderAlias   = DataAccess.Alias.GetAliasByCallsign(db, teamRow.Commander);
                int commanderLoginID = 0;

                if (commanderAlias != null)
                {
                    commanderLoginID = commanderAlias.Login.Id;
                }

                DataAccess.GameTeam team = new Allegiance.CommunitySecuritySystem.DataAccess.GameTeam()
                {
                    GameID                   = gameIdentID,
                    GameTeamCommander        = TrimString(teamRow.Commander, 49),
                    GameTeamCommanderLoginID = commanderLoginID,
                    GameTeamExpansion        = teamRow.ResearchedExpansion,
                    GameTeamFaction          = teamRow.Faction,
                    GameTeamID               = teamRow.TeamID,
                    GameTeamName             = TrimString(teamRow.TeamName, 49),
                    GameTeamNumber           = teamRow.TeamNumber,
                    GameTeamShipyard         = teamRow.ResearchedShipyard,
                    GameTeamStarbase         = teamRow.ResearchedStarbase,
                    GameTeamSupremacy        = teamRow.ResearchedSupremacy,
                    GameTeamTactical         = teamRow.ResearchedTactical,
                    GameTeamWinner           = teamRow.Won
                };

                statsDB.GameTeams.InsertOnSubmit(team);
                statsDB.SubmitChanges();

                foreach (Data.GameDataset.TeamMemberRow teamMemberRow in teamRow.GetTeamMemberRows())
                {
                    var teamMemberAlias = DataAccess.Alias.GetAliasByCallsign(db, teamMemberRow.Callsign);
                    int loginID         = 0;
                    if (teamMemberAlias != null)
                    {
                        loginID = teamMemberAlias.Login.Id;
                    }

                    DataAccess.GameTeamMember teamMember = new Allegiance.CommunitySecuritySystem.DataAccess.GameTeamMember()
                    {
                        GameTeamID             = team.GameTeamIdentID,
                        GameTeamMemberCallsign = TrimString(DataAccess.Alias.GetCallsignFromStringWithTokensAndTags(db, teamMemberRow.Callsign), 49),
                        GameTeamMemberDuration = teamMemberRow.Duration,
                        GameTeamMemberLoginID  = loginID
                    };

                    statsDB.GameTeamMembers.InsertOnSubmit(teamMember);
                }

                statsDB.SubmitChanges();
            }
        }
 public static AutoUpdateResult RetrieveFileList(int lobbyId)
 {
     using (var db = new CSSDataContext())
     {
         return new AutoUpdateResult()
         {
             AutoUpdateBaseAddress   = ConfigurationManager.AppSettings["autoupdateBaseAddress"],
             Files                   = db.FindAutoUpdateFiles(lobbyId).ToList()
         };
     }
 }
        private static TransformMethod PickTransformMethod()
        {
            using (var db = new CSSDataContext())
            {
                var random  = new Random();
                var methods = db.TransformMethods;
                var index   = random.Next(0, methods.Count() - 1);

                return methods.Skip(index).Take(1).FirstOrDefault();
            }
        }
        public static DataAccess.IPConverge GetIPConverge(CSSDataContext db, string apiCode, int productId)
        {
            var ipConverge = db.IPConverges.FirstOrDefault(p => p.ApiCode == apiCode && p.ProductId == productId);

            if (ipConverge == null)
                throw new Exception("Invalid API Code.");

                //throw new XmlRpcFaultException(500, "Invalid API Code.");

            return ipConverge;
        }
        public bool CheckLegacyAliasExists(string callsignWithTags)
        {
            // Prevent slamming on this call.
            System.Threading.Thread.Sleep(500);

            using (CSSDataContext db = new CSSDataContext())
            {
                string callsign = Alias.GetCallsignFromStringWithTokensAndTags(db, callsignWithTags);
                return Alias.CheckLegacyAliasExists(callsign);
            }
        }
        public static bool IsMachineInformationFromAVirtualMachine(CSSDataContext db, MachineInformation machineInformation, Login login)
        {
            var virtualMachineRecord = machineInformation.MachineValues.FirstOrDefault(p => db.VirtualMachineMarkers.Count(q => System.Data.Linq.SqlClient.SqlMethods.Like(p.Value, q.IdentifierMask) && (DeviceType) q.RecordTypeId == p.Type) > 0);
            if (virtualMachineRecord != null)
            {
                Log.Write(db, Enumerations.LogType.AuthenticationServer, "LoginID: " + login.Id + ", Name: " + login.Username + ", Virtual Machine Detected: name: " + virtualMachineRecord.Name + ", type: " + virtualMachineRecord.Type + ", value: " + virtualMachineRecord.Value + ".");
                return true;
            }

            return false;
        }
 public static void CreateGroup(CSSDataContext db, string name, bool isSquad, string tag)
 {
     var g = new Group()
     {
         DateCreated = DateTime.Now,
         Name        = name,
         IsSquad     = isSquad,
         Tag         = tag
     };
     db.Groups.InsertOnSubmit(g);
     db.SubmitChanges();
 }
        public ListMessageResult ListMessages(AuthenticatedData data)
        {
            try
            {
                if (!data.Authenticate())
                    return null;

                using (var db = new CSSDataContext())
                {
                    var messages = new List<IMessage>();
                    messages.AddRange(GroupMessage.GetGroupMessages(db, data.Username));
                    messages.AddRange(PersonalMessage.GetPrivateMessages(db, data.Username));
                    messages.AddRange(GroupMessage.GetGlobalMessages(db, data.Username));

                    //Re-insert messages into list since windows services
                    //don't seem to be able to handle objects wrapped in a baseclass.
                    //var result = messages
                    //    .OrderByDescending(p => p.DateToSend)
                    //    .Select(p => new BaseMessage()
                    //{
                    //    Id = p.Id,
                    //    Sender = p.Sender,
                    //    Subject = p.Subject,
                    //    Message = p.Message,
                    //    DateCreated = p.DateToSend,     //User doesn't actually have to know the date the message was created - only sent.
                    //    DateToSend = p.DateToSend,
                    //    DateExpires = p.DateExpires,
                    //}).ToList();

                    //return result;

                    ListMessageResult returnValue = new ListMessageResult();
                    returnValue.Messages = new List<ListMessageResult.ListMessage>();
                    messages.ForEach(p => returnValue.Messages.Add(new ListMessageResult.ListMessage()
                    {
                        DateCreated = p.DateCreated,
                        DateExpires = p.DateExpires,
                        DateToSend = p.DateToSend,
                        Id = p.Id,
                        Sender = p.Sender,
                        Subject = p.Subject,
                        Message = p.Message
                    }));

                    return returnValue;
                }
            }
            catch (Exception error)
            {
                Error.Write(error);
                throw;
            }
        }
        public static DataAccess.IPConverge GetIPConverge()
        {
            using (var db = new CSSDataContext())
            {
                var ipConverge = db.IPConverges.FirstOrDefault();

                if (ipConverge == null)
                    throw new Exception("IP.Converge Handshake has not been performed.");

                return ipConverge;
            }
        }
        protected void btnRecalculatePoll_Click(object sender, EventArgs e)
        {
            using (CSSDataContext db = new CSSDataContext())
            {
                var poll = db.Polls.FirstOrDefault(p => p.Id == PollID);
                poll.Recalculate();

                db.SubmitChanges();
            }

            BindData();
        }
        public static int GetAliasLimit(CSSDataContext db, Login login)
        {
            int aliasLimit = DefaultAliasLimit;

            if (login.HasRole(Common.Enumerations.RoleType.Administrator) == true || login.HasRole(Common.Enumerations.RoleType.SuperAdministrator) == true)
                aliasLimit = AdminAliasLimit;
            else if (login.HasRole(Common.Enumerations.RoleType.ZoneLeader) == true)
                aliasLimit = ZoneLeaderAliasLimit;
            else if (login.HasRole(Common.Enumerations.RoleType.Moderator) == true)
                aliasLimit = ModeratorAliasLimit;

            return aliasLimit;
        }
        public void GetCallsignFromStringWithTokensAndTags()
        {
            string noTags          = "BackTrak";
            string withTag         = "BackTrak@BS";
            string withToken       = "?BackTrak";
            string withTagAndToken = "*BackTrak@BS";

            using (DataAccess.CSSDataContext db = new Allegiance.CommunitySecuritySystem.DataAccess.CSSDataContext())
            {
                Assert.AreEqual(noTags, DataAccess.Alias.GetCallsignFromStringWithTokensAndTags(db, noTags));
                Assert.AreEqual(noTags, DataAccess.Alias.GetCallsignFromStringWithTokensAndTags(db, withTag));
                Assert.AreEqual(noTags, DataAccess.Alias.GetCallsignFromStringWithTokensAndTags(db, withToken));
                Assert.AreEqual(noTags, DataAccess.Alias.GetCallsignFromStringWithTokensAndTags(db, withTagAndToken));
            }
        }
Beispiel #33
0
        private void SaveChatLog(Allegiance.CommunitySecuritySystem.DataAccess.CSSDataContext db, DataAccess.CSSStatsDataContext statsDB, Allegiance.CommunitySecuritySystem.Server.Data.GameDataset.GameRow gameRow, int gameIdentID)
        {
            foreach (Data.GameDataset.ChatLogRow chatLogRow in gameRow.GetChatLogRows())
            {
                DataAccess.GameChatLog chatLog = new Allegiance.CommunitySecuritySystem.DataAccess.GameChatLog()
                {
                    GameChatSpeakerName = TrimString(DataAccess.Alias.GetCallsignFromStringWithTokensAndTags(db, chatLogRow.SpeakerName), 49),
                    GameChatTargetName  = TrimString(DataAccess.Alias.GetCallsignFromStringWithTokensAndTags(db, chatLogRow.TargetName), 49),
                    GameChatText        = TrimString(chatLogRow.Text, 2063),
                    GameChatTime        = chatLogRow.ChatTime,
                    GameID = gameIdentID
                };

                statsDB.GameChatLogs.InsertOnSubmit(chatLog);
            }
        }
Beispiel #34
0
        private void UpdateLeaderboard(int gameIdentID)
        {
            using (DataAccess.CSSDataContext db = new Allegiance.CommunitySecuritySystem.DataAccess.CSSDataContext())
            {
                using (DataAccess.CSSStatsDataContext statsDB = new Allegiance.CommunitySecuritySystem.DataAccess.CSSStatsDataContext())
                {
                    var game = statsDB.Games.FirstOrDefault(p => p.GameIdentID == gameIdentID);

                    if (game == null)
                    {
                        throw new Exception("Couldn't get game for ID: " + gameIdentID);
                    }

                    if (IsGameEligibleForLogging(game) == false)
                    {
                        return;
                    }

                    bool isDrawGame = IsDrawGame(game);

                    foreach (DataAccess.GameTeam team in game.GameTeams)
                    {
                        var commanderAlias = DataAccess.Alias.GetAliasByCallsign(db, team.GameTeamCommander);

                        foreach (DataAccess.GameTeamMember teamMember in team.GameTeamMembers)
                        {
                            int shipKills       = 0;
                            int stationKills    = 0;
                            int stationCaptures = 0;
                            int droneKills      = 0;
                            int ejects          = 0;
                            int defection       = 0;
                            int score           = 0;

                            var alias = DataAccess.Alias.GetAliasByCallsign(db, teamMember.GameTeamMemberCallsign);

                            if (alias == null)
                            {
                                continue;
                            }

                            // Check current team member for defections.
                            foreach (DataAccess.GameTeam otherTeam in game.GameTeams)
                            {
                                if (otherTeam.GameTeamID == team.GameTeamID)
                                {
                                    continue;
                                }

                                foreach (DataAccess.GameTeamMember otherTeamMember in otherTeam.GameTeamMembers)
                                {
                                    var otherLogin = DataAccess.Alias.GetAliasByCallsign(db, otherTeamMember.GameTeamMemberCallsign);

                                    if (otherLogin != null && otherLogin.LoginId == alias.LoginId)
                                    {
                                        defection = 1;
                                        break;
                                    }
                                }

                                if (defection != 0)
                                {
                                    break;
                                }
                            }

                            var primaryMemberEvents = game.GameEvents.Where
                                                      (
                                p => p.GameEventPerformerID != 1
                                &&
                                (
                                    p.GameEventPerformerLoginID == alias.Login.Id &&
                                    (
                                        p.EventID == (int)AllegianceEventIDs.StationDestroyed ||
                                        p.EventID == (int)AllegianceEventIDs.StationCaptured ||
                                        p.EventID == (int)AllegianceEventIDs.ShipKilled
                                    )
                                )
                                ||
                                (
                                    p.GameEventTargetLoginID == alias.Login.Id &&
                                    p.EventID == (int)AllegianceEventIDs.ShipKilled
                                )
                                                      );

                            foreach (var primaryMemberEvent in primaryMemberEvents)
                            {
                                switch (primaryMemberEvent.EventID)
                                {
                                case (int)Common.Enumerations.AllegianceEventIDs.ShipKilled:
                                    if (primaryMemberEvent.GameEventPerformerName.StartsWith(".") == true)
                                    {
                                        droneKills++;
                                        score += DroneKillPoints;
                                    }
                                    else
                                    {
                                        if (primaryMemberEvent.GameEventPerformerLoginID == teamMember.GameTeamMemberLoginID)
                                        {
                                            ejects++;
                                        }
                                        else
                                        {
                                            shipKills++;
                                            score += ShipKillPoints;
                                        }
                                    }
                                    break;

                                case (int)Common.Enumerations.AllegianceEventIDs.StationCaptured:
                                {
                                    stationCaptures++;
                                    score += StationCapturePoints;
                                }
                                break;

                                case (int)Common.Enumerations.AllegianceEventIDs.StationDestroyed:
                                {
                                    stationKills++;
                                    score += StationKillPoints;
                                }
                                break;
                                }
                            }

                            if (alias != null)
                            {
                                var leaderboard = statsDB.StatsLeaderboards.FirstOrDefault(p => p.LoginID == alias.Login.Id);

                                if (leaderboard == null)
                                {
                                    leaderboard = new Allegiance.CommunitySecuritySystem.DataAccess.StatsLeaderboard()
                                    {
                                        CommandDraws    = 0,                               // Value filled in by ASGSServiceUpdateASRankings stored proc during AllegSkill calculation.
                                        CommandLosses   = 0,                               // Value filled in by ASGSServiceUpdateASRankings stored proc during AllegSkill calculation.
                                        CommandMu       = 25D,
                                        CommandRank     = 0,                               // Value filled in by ASGSServiceUpdateASRankings stored proc during AllegSkill calculation.
                                        CommandSigma    = 25D / 3D,
                                        CommandWins     = 0,                               // Value filled in by ASGSServiceUpdateASRankings stored proc during AllegSkill calculation.
                                        Defects         = 0,                               // Value filled in by ASGSServiceUpdateASRankings stored proc during AllegSkill calculation.
                                        Draws           = 0,                               // Value filled in by ASGSServiceUpdateASRankings stored proc during AllegSkill calculation.
                                        DroneKills      = 0,                               // Value filled in by ASGSServiceUpdateASRankings stored proc during AllegSkill calculation.
                                        Ejects          = 0,                               // Value filled in by ASGSServiceUpdateASRankings stored proc during AllegSkill calculation.
                                        HoursPlayed     = 0,                               // Value filled in by ASGSServiceUpdateASRankings stored proc during AllegSkill calculation.
                                        Kills           = 0,                               // Value filled in by ASGSServiceUpdateASRankings stored proc during AllegSkill calculation.
                                        LoginUsername   = alias.Login.Username,
                                        LoginID         = alias.Login.Id,
                                        Losses          = 0,                              // Value filled in by ASGSServiceUpdateASRankings stored proc during AllegSkill calculation.
                                        Mu              = 25D,
                                        Rank            = 0,                              // Value filled in by ASGSServiceUpdateASRankings stored proc during AllegSkill calculation.
                                        Sigma           = 25D / 3D,
                                        StackRating     = 0,                              // Value filled in by ASGSServiceUpdateASRankings stored proc during AllegSkill calculation.
                                        StationCaptures = 0,                              // Value filled in by ASGSServiceUpdateASRankings stored proc during AllegSkill calculation.
                                        StationKills    = 0,                              // Value filled in by ASGSServiceUpdateASRankings stored proc during AllegSkill calculation.
                                        Wins            = 0,                              // Value filled in by ASGSServiceUpdateASRankings stored proc during AllegSkill calculation.
                                        DateModified    = DateTime.Now



                                                          //CommandDraws = commanderAlias.LoginId == alias.LoginId && isDrawGame == true && defection == 0 ? 1 : 0,
                                                          //CommandLosses = commanderAlias.LoginId == alias.LoginId && team.GameTeamWinner == false && isDrawGame == false && defection == 0 ? 1 : 0,
                                                          //CommandMu = 25D,
                                                          //CommandRank = 0,
                                                          //CommandSigma = 25D / 3D,
                                                          //CommandWins = commanderAlias.LoginId == alias.LoginId && team.GameTeamWinner == true && defection == 0 ? 1 : 0,
                                                          //Defects = defection,
                                                          //Draws = isDrawGame == true && defection == 0 ? 1 : 0,
                                                          //DroneKills = droneKills,
                                                          //Ejects = ejects,
                                                          //HoursPlayed = teamMember.GameTeamMemberDuration / 60.0 / 60.0,
                                                          //Kills = shipKills,
                                                          //LoginUsername = alias.Login.Username,
                                                          //LoginID = alias.Login.Id,
                                                          //Losses = team.GameTeamWinner == false && isDrawGame == false && defection == 0 ? 1 : 0,
                                                          //Mu = 25D,
                                                          //Rank = 0,
                                                          //Sigma = 25D / 3D,
                                                          //StackRating = 0,
                                                          //StationCaptures = stationCaptures,
                                                          //StationKills = stationKills,
                                                          //Wins = team.GameTeamWinner == true && defection == 0 ? 1 : 0,
                                                          //DateModified = DateTime.Now
                                    };

                                    statsDB.StatsLeaderboards.InsertOnSubmit(leaderboard);
                                }
                                else
                                {
                                    // These values are all set by ASGSServiceUpdateASRankings stored proc during AllegSkill calculation.

                                    //leaderboard.CommandDraws += commanderAlias.LoginId == alias.LoginId && isDrawGame == true && defection == 0 ? 1 : 0;
                                    //leaderboard.CommandLosses += commanderAlias.LoginId == alias.LoginId && team.GameTeamWinner == false && isDrawGame == false && defection == 0 ? 1 : 0;
                                    //leaderboard.CommandWins += commanderAlias.LoginId == alias.LoginId && team.GameTeamWinner == true && defection == 0 ? 1 : 0;
                                    //leaderboard.Defects += defection;
                                    //leaderboard.Draws += isDrawGame == true && defection == 0 ? 1 : 0;
                                    //leaderboard.DroneKills += droneKills;
                                    //leaderboard.Ejects += ejects;
                                    //leaderboard.HoursPlayed += teamMember.GameTeamMemberDuration / 60.0 / 60.0;
                                    //leaderboard.Kills += shipKills;
                                    //leaderboard.Losses += team.GameTeamWinner == false && isDrawGame == false && defection == 0 ? 1 : 0;
                                    //leaderboard.StationCaptures += stationCaptures;
                                    //leaderboard.StationKills += stationKills;
                                    //leaderboard.Wins += team.GameTeamWinner == true && defection == 0 ? 1 : 0;
                                    //leaderboard.DateModified = DateTime.Now;
                                }

                                teamMember.Score = score;

                                statsDB.SubmitChanges();
                                db.SubmitChanges();
                            }
                        }
                    }
                }
            }
        }
Beispiel #35
0
        private void SaveGameEvents(Allegiance.CommunitySecuritySystem.DataAccess.CSSDataContext db, DataAccess.CSSStatsDataContext statsDB, Allegiance.CommunitySecuritySystem.Server.Data.GameDataset.GameRow gameRow, int gameIdentID)
        {
            foreach (Data.GameDataset.GameEventRow gameEventRow in gameRow.GetGameEventRows())
            {
                int performerLoginID = 0;
                int targetLoginID    = 0;

                try
                {
                    var performerAlias = DataAccess.Alias.GetAliasByCallsign(db, gameEventRow.PerformerName);

                    if (performerAlias != null)
                    {
                        performerLoginID = performerAlias.Login.Id;
                    }

                    var targetAlias = DataAccess.Alias.GetAliasByCallsign(db, gameEventRow.TargetName);

                    if (targetAlias != null)
                    {
                        targetLoginID = targetAlias.Login.Id;
                    }

                    DataAccess.GameEvent gameEvent = new DataAccess.GameEvent()
                    {
                        GameEventTime             = gameEventRow.EventTime,
                        GameID                    = gameIdentID,
                        GameEventIndirectID       = gameEventRow.IndirectID,
                        GameEventIndirectName     = TrimString(DataAccess.Alias.GetCallsignFromStringWithTokensAndTags(db, gameEventRow.IndirectName), 254),
                        GameEventPerformerID      = gameEventRow.PerformerID,
                        GameEventPerformerName    = TrimString(DataAccess.Alias.GetCallsignFromStringWithTokensAndTags(db, gameEventRow.PerformerName), 254),
                        GameEventPerformerLoginID = performerLoginID,
                        GameEventTargetID         = gameEventRow.TargetID,
                        GameEventTargetName       = TrimString(DataAccess.Alias.GetCallsignFromStringWithTokensAndTags(db, gameEventRow.TargetName), 254),
                        GameEventTargetLoginID    = targetLoginID,
                        EventID                   = gameEventRow.EventID
                    };

                    statsDB.GameEvents.InsertOnSubmit(gameEvent);

                    statsDB.SubmitChanges();
                }
                catch (Exception ex)
                {
                    string errorDetails = String.Format(@"SaveGameEvents(): Insert error! 
		gameIdentID = {0},
		gameEventRow.EventID = {1},
		gameEventRow.EventTime = {2},
		gameEventRow.GameID = {3},
		gameEventRow.IndirectID = {4},
		gameEventRow.IndirectName = {5},
		gameEventRow.PerformerID = {6},
		gameEventRow.PerformerName = {7},
		gameEventRow.TargetID = {8},
		gameEventRow.TargetName = {9},
		performerLoginID = {10},
		targetLoginID = {11},
		DataAccess.Alias.GetCallsignFromStringWithTokensAndTags(db, gameEventRow.IndirectName) = {12},
		DataAccess.Alias.GetCallsignFromStringWithTokensAndTags(db, gameEventRow.PerformerName) = {13},
		DataAccess.Alias.GetCallsignFromStringWithTokensAndTags(db, gameEventRow.TargetName) = {14}
		===================================================
{15}
",
                                                        gameIdentID,
                                                        gameEventRow.EventID,
                                                        gameEventRow.EventTime,
                                                        gameEventRow.GameID,
                                                        gameEventRow.IndirectID,
                                                        gameEventRow.IndirectName,
                                                        gameEventRow.PerformerID,
                                                        gameEventRow.PerformerName,
                                                        gameEventRow.TargetID,
                                                        gameEventRow.TargetName,
                                                        performerLoginID,
                                                        targetLoginID,
                                                        DataAccess.Alias.GetCallsignFromStringWithTokensAndTags(db, gameEventRow.IndirectName),
                                                        DataAccess.Alias.GetCallsignFromStringWithTokensAndTags(db, gameEventRow.PerformerName),
                                                        DataAccess.Alias.GetCallsignFromStringWithTokensAndTags(db, gameEventRow.TargetName),
                                                        ex.ToString());

                    if (String.IsNullOrEmpty(Settings.Default.TagExceptionLogFileName) == false)
                    {
                        File.AppendAllText(Settings.Default.TagExceptionLogFileName, DateTime.Now.ToString() + ": " + errorDetails + "\n\n\n");
                    }
                }
            }
        }