Ejemplo n.º 1
0
        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;
            }
        }
Ejemplo n.º 2
0
        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;
            }
        }
Ejemplo n.º 3
0
        /// 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;
            }
        }
Ejemplo n.º 4
0
        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;
            }
        }
Ejemplo n.º 5
0
        // 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;
            }
        }
Ejemplo n.º 6
0
        // 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;
            }
        }
Ejemplo n.º 7
0
        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;
            }
        }
Ejemplo n.º 8
0
        /**
         * @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);
        }