public Entities.ActionResponses.VoteToKick Execute(Entities.GamePlayerKickVote userVote)
{
string cacheKey = string.Format("KickUser_{0}_FromGame_{1}", userVote.KickUserId, userVote.GameID);
Entities.User kickUser = _selectUser.Execute(userVote.KickUserId);
Entities.ActionResponses.VoteToKick response = _insert.Execute(userVote);
if (response.TotalVotes == 1 &&
response.ResponseCode == Entities.ActionResponses.Enums.VoteToKick.VoteSuccessful &&
userVote.Vote)
{
String jobId = BackgroundJob.Schedule(() => _checkVotes.Execute(userVote.GameID, userVote.KickUserId), TimeSpan.FromSeconds(30));
MemoryCache.Default.Set(cacheKey, jobId, new CacheItemPolicy { SlidingExpiration = TimeSpan.FromMinutes(1) });
}
if (response.AllVotesCasted)
{
var cachedJobId = MemoryCache.Default.Get(cacheKey);
if (cachedJobId != null && cachedJobId is String)
{
BackgroundJob.Delete(cachedJobId as String);
}
else
{
_checkVotes.Execute(userVote.GameID, userVote.KickUserId);
}
}
else
{
_sendMessage.Voted(userVote.GameID, kickUser, response.VotesToKick,
response.VotesToStay,
response.AlreadyVoted);
}
response.KickUser = kickUser;
return response;
}