public SortedSetEntry[] GET(string sid, long startRank, long endRank) /// @todo not a good idea getting sid from usermode { // Get the sid or memberID of the current user. var claimsPrincipal = this.User as ClaimsPrincipal; sid = CBAuth.getMemberID(sid, claimsPrincipal); /// logging purpose Logging.CBLoggers logMessage = new Logging.CBLoggers(); string jsonParam = JsonConvert.SerializeObject(sid); try { /// fetch redis list by rank range SortedSetEntry[] se = CBRedis.GetSortedSetRankByRange(startRank, endRank); return(se); } catch (Exception ex) { // error log logMessage.memberID = sid; // server autenticated sid logMessage.Level = "ERROR"; logMessage.Logger = "CBRankController-RankerListByRange"; logMessage.Message = jsonParam; logMessage.Exception = ex.ToString(); Logging.RunLog(logMessage); throw; } }
public MemberRankNumber Get(string sid) { MemberRankNumber result = new MemberRankNumber(); // Get the sid or memberID of the current user. var claimsPrincipal = this.User as ClaimsPrincipal; sid = CBAuth.getMemberID(sid, claimsPrincipal); /// logging purpose Logging.CBLoggers logMessage = new Logging.CBLoggers(); string jsonParam = JsonConvert.SerializeObject(sid); try { /// fetch redis value by member sid result.rank = CBRedis.GetSortedSetRank(sid); return(result); } catch (Exception ex) { // error log logMessage.memberID = sid; // authenricated server sid logMessage.Level = "ERROR"; logMessage.Logger = "CBRankController-MemberRankNumber"; logMessage.Message = jsonParam; logMessage.Exception = ex.ToString(); Logging.RunLog(logMessage); throw; } }
/// Set redis rank by member public MemberRankNumber POST(InputParams p) { MemberRankNumber result = new MemberRankNumber(); // Get the sid or memberID of the current user. var claimsPrincipal = this.User as ClaimsPrincipal; p.sid = CBAuth.getMemberID(p.sid, claimsPrincipal); /// logging purpose Logging.CBLoggers logMessage = new Logging.CBLoggers(); string jsonParam = JsonConvert.SerializeObject(p.sid); try { /// set redis point and return CBRedis.SetSortedSetRank(p.sid, p.point); result.rank = CBRedis.GetSortedSetRank(p.sid); return(result); } catch (Exception ex) { // error log logMessage.memberID = p.sid; // requested value. Not redis data value. logMessage.Level = "ERROR"; logMessage.Logger = "CBRankController-SetMemberPoint"; logMessage.Message = jsonParam; logMessage.Exception = ex.ToString(); Logging.RunLog(logMessage); throw; } }
public SortedSetEntry[] GET(string sid, int countnum) { // Get the sid or memberID of the current user. var claimsPrincipal = this.User as ClaimsPrincipal; sid = CBAuth.getMemberID(sid, claimsPrincipal); /// logging purpose Logging.CBLoggers logMessage = new Logging.CBLoggers(); string jsonParam = JsonConvert.SerializeObject(sid); try { /// fetch redis list by top countnum rankers SortedSetEntry[] sse = CBRedis.GetTopSortedSetRank(countnum); return(sse); } catch (Exception ex) { // error log logMessage.memberID = sid; // server authenticated value logMessage.Level = "ERROR"; logMessage.Logger = "CBRankController-TopRankerList"; logMessage.Message = jsonParam; logMessage.Exception = ex.ToString(); Logging.RunLog(logMessage); throw; } }
// GET api/CBSocketAuth public Payload Get() { Payload payload = new Payload(); /// Get the sid or memberID of the current user. string sid = CBAuth.getMemberID("debug", this.User as ClaimsPrincipal); // only for log payload.sid = sid; /// logging purpose Logging.CBLoggers logMessage = new Logging.CBLoggers(); string jsonParam = JsonConvert.SerializeObject(sid); try { /// return token object Token t = new Token(); /// generate paylod payload.guid = Guid.NewGuid().ToString(); payload.genDateUTC = DateTimeOffset.UtcNow.ToString("yyyy-MM-ddTHH:mm:ss.fffffffZ");; /// token Serialize and encrypt t.token = JsonConvert.SerializeObject(payload); /// save to Rdis CBRedis.SetRedisKey(payload.guid, t.token, 30); // 30 min for socket suth TTL payload.sid = ""; payload.genDateUTC = ""; /// @brief chagned for plain processing - token encrypt //t.token = Crypto.AES_encrypt(t.token, globalVal.CloudBreadSocketKeyText, globalVal.CloudBreadSocketKeyIV); return(payload); //changed } catch (Exception ex) { // error log logMessage.memberID = sid; logMessage.Level = "ERROR"; logMessage.Logger = "CBSocketAuth"; logMessage.Message = "SocketAuth error"; logMessage.Exception = ex.ToString(); Logging.RunLog(logMessage); throw; } }
// GET api/CBSocketTokenValidCheck public Result POST(Token token) { // return Result r = new Result(); string redisResult = ""; /// logging purpose Logging.CBLoggers logMessage = new Logging.CBLoggers(); string jsonParam = JsonConvert.SerializeObject(token); try { /// fetch redis value by requested token.guid redisResult = CBRedis.GetRedisKeyValue(token.guid); if (redisResult == null) { // does not exist on Redis r.guid = ""; r.sid = ""; r.genDateUTC = ""; } else { // Deserialize json r = JsonConvert.DeserializeObject <Result>(redisResult); } return(r); } catch (Exception ex) { // error log logMessage.memberID = r.sid; // requested value. Not redis data value. logMessage.Level = "ERROR"; logMessage.Logger = "CBSocketTokenValidCheck"; logMessage.Message = jsonParam; logMessage.Exception = ex.ToString(); Logging.RunLog(logMessage); throw; } }
protected void Application_Start(object sender, EventArgs e) { try { /// On start up, CreateIfNotExists CloudBreadLog table on Azure Table Storage /// On start up, CreateIfNotExists messagestolog table on Azure Queue Service if (globalVal.StorageConnectionString != "") { /// this table is used for CloudBread game log saving /// Azure Storage connection retry policy var retryPolicy = new ExponentialRetry(TimeSpan.FromSeconds(2), 10); CloudStorageAccount storageAccount = CloudStorageAccount.Parse(globalVal.StorageConnectionString); CloudTableClient tableClient = storageAccount.CreateCloudTableClient(); tableClient.DefaultRequestOptions.RetryPolicy = retryPolicy; var cloudTable = tableClient.GetTableReference("CloudBreadLog"); cloudTable.CreateIfNotExists(); cloudTable = tableClient.GetTableReference("CloudBreadErrorLog"); cloudTable.CreateIfNotExists(); /// this queue is used for CloudBread queue method game log saving CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient(); queueClient.DefaultRequestOptions.RetryPolicy = retryPolicy; CloudQueue queue = queueClient.GetQueueReference("messagestolog"); /// must be lowercase queue.CreateIfNotExists(); /// this queue is used for CloudBread queue method game log saving queue = queueClient.GetQueueReference("cloudbread-batch"); /// must be lowercase queue.CreateIfNotExists(); } // Regarding to configuration, check startup fill or not if (globalVal.CloudBreadFillRedisRankSetOnStartup) { // execute redis rank fill task CBRedis.FillAllRankFromDB(); } } catch (System.Exception ex) { throw ex; } }
/** * @brief Save log task processor. \n */ public static bool RunLog(CBLoggers message) { if (globalVal.CloudBreadLoggerSetting != "") { if (string.IsNullOrEmpty(message.memberID)) { message.memberID = ""; /// in case of non-member triggered job } /// critical error case, save in ATS CloudBreadErrorLog if (message.Level.ToUpper() == "ERROR") { try { /// Save error log on Azure Table Storage { /// Azure Table Storage connection retry policy var tableStorageRetryPolicy = new ExponentialRetry(TimeSpan.FromSeconds(2), 10); CloudStorageAccount storageAccountT = CloudStorageAccount.Parse(globalVal.StorageConnectionString); CloudTableClient tableClient = storageAccountT.CreateCloudTableClient(); tableClient.DefaultRequestOptions.RetryPolicy = tableStorageRetryPolicy; CloudTable table = tableClient.GetTableReference("CloudBreadErrorLog"); CBATSMessageEntity Message = new CBATSMessageEntity(message.memberID, Guid.NewGuid().ToString()); Message.jobID = message.jobID; Message.Date = DateTimeOffset.UtcNow.ToString("yyyy-MM-ddTHH:mm:ss.fffffffZ"); Message.Thread = message.Thread; Message.Level = message.Level; Message.Logger = message.Logger; Message.Message = message.Message; Message.Exception = message.Exception; TableOperation insertOperation = TableOperation.Insert(Message); table.Execute(insertOperation); } } catch (Exception) { /// Catch fail to log on database. Most case database connection or login fail issue. throw; } } else { /// Regarding to web.config logger settting, save logs on specific storage try { switch (globalVal.CloudBreadLoggerSetting) { case "SQL": /// Save log on SQL string strQuery = string.Format("insert into dbo.CloudBreadLog(memberid, jobID, [Thread], [Level], [Logger], [Message], [Exception]) values('{0}','{1}','{2}','{3}','{4}','{5}','{6}')", message.memberID, message.jobID, message.Thread, message.Level, message.Logger, message.Message, message.Exception ); /// Database connection retry policy RetryPolicy retryPolicy = new RetryPolicy <SqlAzureTransientErrorDetectionStrategy>(globalVal.conRetryCount, TimeSpan.FromSeconds(globalVal.conRetryFromSeconds)); SqlConnection connection = new SqlConnection(globalVal.DBConnectionString); { connection.OpenWithRetry(retryPolicy); SqlCommand command = new SqlCommand(strQuery, connection); int rowcount = command.ExecuteNonQueryWithRetry(retryPolicy); connection.Close(); break; } case "ATS": /// Save log on Azure Table Storage { /// Azure Table Storage connection retry policy var tableStorageRetryPolicy = new ExponentialRetry(TimeSpan.FromSeconds(2), 10); CloudStorageAccount storageAccountT = CloudStorageAccount.Parse(globalVal.StorageConnectionString); CloudTableClient tableClient = storageAccountT.CreateCloudTableClient(); tableClient.DefaultRequestOptions.RetryPolicy = tableStorageRetryPolicy; CloudTable table = tableClient.GetTableReference("CloudBreadLog"); CBATSMessageEntity Message = new CBATSMessageEntity(message.memberID, Guid.NewGuid().ToString()); Message.jobID = message.jobID; Message.Date = DateTimeOffset.UtcNow.ToString("yyyy-MM-ddTHH:mm:ss.fffffffZ"); //Message.Date = DateTimeOffset.UtcNow.ToString("yyyy-MM-ddTHH:mm:ssZ"); Message.Thread = message.Thread; Message.Level = message.Level; Message.Logger = message.Logger; Message.Message = message.Message; Message.Exception = message.Exception; TableOperation insertOperation = TableOperation.Insert(Message); table.Execute(insertOperation); break; } case "AQS": /// Save log on Azure Queue Storage { /// Azure Queue Storage connection retry policy var queueStorageRetryPolicy = new ExponentialRetry(TimeSpan.FromSeconds(2), 10); CloudStorageAccount storageAccount = CloudStorageAccount.Parse(globalVal.StorageConnectionString); CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient(); queueClient.DefaultRequestOptions.RetryPolicy = queueStorageRetryPolicy; CloudQueue queue = queueClient.GetQueueReference("messagestolog"); /// must be lower case CBATSMessageEntity Message = new CBATSMessageEntity(message.memberID, Guid.NewGuid().ToString()); Message.jobID = message.jobID; Message.Date = DateTimeOffset.UtcNow.ToString("yyyy-MM-ddTHH:mm:ss.fffffffZ"); Message.Thread = message.Thread; Message.Level = message.Level; Message.Logger = message.Logger; Message.Message = message.Message; Message.Exception = message.Exception; CloudQueueMessage Qmessage = new CloudQueueMessage(JsonConvert.SerializeObject(Message)); queue.AddMessage(Qmessage); break; } case "redis": /// todolist - save log on Azure Redis Cache /// yyyymmdd:memberid:Controller:GUID { string redisKey = ""; string redisVal = ""; message.Date = DateTimeOffset.UtcNow.ToString("yyyy-MM-ddTHH:mm:ss.fffffffZ");; redisKey = DateTime.Now.ToUniversalTime().ToString("yyyyMMddHHmm") + ":" + message.memberID + ":" + message.Logger + ":" + Guid.NewGuid().ToString(); // guid - too long key size redisVal = JsonConvert.SerializeObject(message); CBRedis.saveRedisLog(redisKey, redisVal, globalVal.CloudBreadGameLogExpTimeDays); } break; //case "DocDB": // /// @todo save log data on Azure DocumentDB // break; default: /// case do nothing break; } } catch (Exception) { /// catch save log error here. throw; } } } return(true); }