public async Task <IHttpActionResult> DeleteTranscodeTemplateModel([FromUri] string id)
        {
            try
            {
                TranscodeTemplateModel transcodeTemplateModel = await TranscodeService.FindByIdAsync(ThreadStaticObject.UserId, id);

                if (transcodeTemplateModel == null)
                {
                    return(NotFound());
                }

                ServiceResultMessage result = await TranscodeService.RemoveAsync(ThreadStaticObject.UserId, id);

                return(Json(new DjLiveResponse <dynamic>(transcodeTemplateModel)));
            }
            catch (Exception e)
            {
                var errorId = Guid.NewGuid().Str();
                LogHelper.Error(errorId, e);
                return(Json(new DjLiveResponse <dynamic>()
                {
                    ApiCode = ApiCode.UnExceptError, Message = $@"发生未知错误,请联系管理员,错误代码:{errorId}"
                }));
            }
        }
Пример #2
0
        public static ServiceResultMessage DaoResult2ServiceResult(DaoResultMessage message)
        {
            var serviceMessage = new ServiceResultMessage();

            serviceMessage.Message = message.Message;
            serviceMessage.Para    = message.para;
            switch (message.Code)
            {
            case DaoResultCode.ItemNotExist:
            {
                serviceMessage.code = ServiceResultCode.ItemNotExist;
                break;
            }

            case DaoResultCode.Success:
            {
                serviceMessage.code = ServiceResultCode.Success;
                break;
            }

            case DaoResultCode.UnExpectError:
            {
                serviceMessage.code = ServiceResultCode.UnExceptError;
                break;
            }

            default:
            {
                serviceMessage.code = ServiceResultCode.UnDefineError;
                break;
            }
            }
            return(serviceMessage);
        }
Пример #3
0
        public async Task <IHttpActionResult> Register([FromBody] LoginModel model)
        {
            try
            {
                if (!ModelState.IsValid)
                {
                    return(BadRequest(ModelState));
                }
                ServiceResultMessage resultMessage = await AccountService.CreateAccountModel(model.UserName, model.Password);

                if (resultMessage.code == ServiceResultCode.Success)
                {
                    var message = await AccountService.CheckAccountVilidate(model.UserName, model.Password);

                    if (message.ResulType == ValidateType.None)
                    {
#if DEBUG
                        string header = JsonConvert.SerializeObject(message.Cookie);
#else
                        string header = AesEncryptHelper.DecryptAes(JsonConvert.SerializeObject(message.Cookie));
#endif
                        var result = new { authHeader = header, respMessage = message.Message };
                        return(Json(result));
                    }
                    return(BadRequest(message.Message));
                }
                return(BadRequest(resultMessage.Message));
            }
            catch (Exception e)
            {
                var errorId = Guid.NewGuid().Str();
                LogHelper.Error(errorId, e);
                return(Json(new { message = $@"发生未知错误,请联系管理员,错误代码:{errorId}" }));
            }
        }
Пример #4
0
        public async Task <ServiceResultMessage> CreateAccountModel(string userName, string password)
        {
            ServiceResultMessage result = new ServiceResultMessage();

            try
            {
                var id     = Guid.NewGuid().Str();
                var dbitem = await AccountDao.GetAccountEntityByUserName(userName);

                if (dbitem != null)
                {
                    result.code    = ServiceResultCode.ItemAlreadyExist;
                    result.Message = "帐号已经存在..";
                    result.Para    = new AccountModel()
                    {
                        UserName = userName,
                        Id       = id,
                        RoleType = "普通用户",
                        StatType = "正常",
                    };
                }
                else
                {
                    var daoresult = await AccountDao.CreateAccount(id, new AccountEntity()
                    {
                        UserName = userName,
                        Password = password,
                        Id       = id,
                        RoleType = (int)AccountRoleType.User,
                        StatType = (int)AccountStatType.Normal,
                        Token    = "",
                    });

                    if (daoresult.Code == DaoResultCode.Success)
                    {
                        result.code    = ServiceResultCode.Success;
                        result.Message = "帐号创建成功.";
                        result.Para    = new AccountModel()
                        {
                            UserName = userName,
                            Id       = id,
                            RoleType = "普通用户",
                            StatType = "正常",
                        };
                    }
                    else
                    {
                        result.code    = ServiceResultCode.UnExceptError;
                        result.Message = "创建失败,未知错误.";
                    }
                }
            }
            catch (Exception e)
            {
                LogHelper.Error(e.Message, e);
                result.code    = ServiceResultCode.UnExceptError;
                result.Message = "创建失败,未知错误.";
            }
            return(result);
        }
Пример #5
0
        public async Task <IHttpActionResult> CreateRoom([FromBody] BoardCastRoomModel model)
        {
            try
            {
                if (!ModelState.IsValid)
                {
                    return(BadRequest(ModelState));
                }
                if (model.ExpireTime.Equals(new DateTime()))
                {
                    model.ExpireTime = DateTime.Now.AddDays(2);
                }
                var id = Guid.NewGuid().Str();
                try
                {
                    model.Id = id;
                    ServiceResultMessage result = await VhostService.CreateLiveRoom(ThreadStaticObject.UserId, model);

                    if (result.code == ServiceResultCode.Success)
                    {
                        string publishUrl  = $"rtmp://{model.Domain}/live/?{CreatePublishTokenAuth(ThreadStaticObject.UserId, model.StreamName,model.ExpireTime.Ticks)}/{model.StreamName}";
                        string audienceUrl = $"rtmp://{model.Domain}/live/?{CreateAudinceTokenAuth(ThreadStaticObject.UserId, model.StreamName, model.ExpireTime.Ticks)}/{model.StreamName}";
                        return(Json(new DjLiveResponse <dynamic>(new
                        {
                            PublishUrl = publishUrl,
                            PlayUrl = audienceUrl,
                        })));
                    }
                    return(Json(new DjLiveResponse <dynamic>()
                    {
                        ApiCode = ApiCode.UnExceptError, Message = $@"发生未知错误,请联系管理员,错误代码:{result.ErrorId} {result.Message}"
                    }));
                }
                catch (Exception e)
                {
                    //todo:判断异常原因
                    return(Json(new DjLiveResponse <dynamic>(model)
                    {
                        ApiCode = ApiCode.Conflict,
                        Message = "数据库中添加失败.",
                    }));
                }
            }
            catch (Exception e)
            {
                var errorId = Guid.NewGuid().Str();
                LogHelper.Error(errorId, e);
                return(Json(new DjLiveResponse <dynamic>()
                {
                    ApiCode = ApiCode.UnExceptError, Message = $@"发生未知错误,请联系管理员,错误代码:{errorId}"
                }));
            }
        }
Пример #6
0
        public async Task <ServiceResultMessage> UpdateSrsConf(string userId, string id = "")
        {
            ServiceResultMessage message = new ServiceResultMessage();

            try
            {
                List <ServerEntity> entitys;
                if (string.IsNullOrEmpty(id))
                {
                    entitys = await ServerDao.GetServerEntitys(userId);
                }
                else
                {
                    var entity = await ServerDao.GetServerEntityById(userId, id);

                    entitys = new List <ServerEntity>()
                    {
                        entity
                    };
                }
                foreach (ServerEntity entity in entitys)
                {
                    try
                    {
                        var domains = await ServerDao.GetServerDomainsById(entity.Id);

                        var hostOption = entity.Parse2Conf();
                        hostOption.VHostOptions.AddRange(domains.Parse2Conf());
                        var config      = JsonConvert.DeserializeObject <LiveServiceConfig>(entity.Option);
                        var liveService = new DjLiveService(config);
                        liveService.SetLiveServiceConf(hostOption, "test");
                    }
                    catch (Exception e)
                    {
                        message.code     = ServiceResultCode.Warning;
                        message.Message += $"更新Server配置失败,ServerId:{entity.Id}";
                        message.ErrorId += "   " + LogHelper.ErrorWithId($"更新Server配置失败,ServerId:{entity.Id}", e);
                    }
                }
                return(message);
            }
            catch (Exception e)
            {
                message.code    = ServiceResultCode.UpdateSrsError;
                message.Message = e.Message;
                message.ErrorId = LogHelper.ErrorWithId(e.Message, e);
                return(message);
            }
        }
Пример #7
0
        public async Task <IHttpActionResult> CreateDefaultDomain([FromBody] DomainModel model)
        {
            try
            {
                if (!ModelState.IsValid)
                {
                    return(BadRequest(ModelState));
                }
                var id = Guid.NewGuid().Str();
                try
                {
                    model.Id = id;
                    ServiceResultMessage result = await VhostService.CreateVhost(ThreadStaticObject.UserId, model);

                    model.SecurePolicyPair = new KeyNamePair("76eb7d3b40b64370939e02f04ad6b3a8", "");
                    model.ServerPair       = new KeyNamePair("fdd5659abd28416d91b7711581cfa6a0", "");
                    if (result.code == ServiceResultCode.Success)
                    {
                        return(Json(new DjLiveResponse <DomainModel>(model)));
                    }
                    return(Json(new DjLiveResponse <dynamic>()
                    {
                        ApiCode = ApiCode.UnExceptError, Message = $@"发生未知错误,请联系管理员,错误代码:{result.ErrorId} {result.Message}"
                    }));
                }
                catch (Exception e)
                {
                    //todo:判断异常原因
                    return(Json(new DjLiveResponse <dynamic>(model)
                    {
                        ApiCode = ApiCode.Conflict,
                        Message = "数据库中添加失败.",
                    }));
                }
            }
            catch (Exception e)
            {
                var errorId = Guid.NewGuid().Str();
                LogHelper.Error(errorId, e);
                return(Json(new DjLiveResponse <dynamic>()
                {
                    ApiCode = ApiCode.UnExceptError, Message = $@"发生未知错误,请联系管理员,错误代码:{errorId}"
                }));
            }
        }
        public async Task <IHttpActionResult> PutRecordTemplateModel([FromUri] string id, [FromBody] RecordTemplateModel model)
        {
            try
            {
                if (!ModelState.IsValid)
                {
                    return(BadRequest(ModelState));
                }
                if (id != model.Id)
                {
                    return(BadRequest("参数不匹配."));
                }
                try
                {
                    ServiceResultMessage result = await RecordService.UpdateLogeTemplate(ThreadStaticObject.UserId, id, model);

                    if (result.code == ServiceResultCode.Success)
                    {
                        return(Json(new DjLiveResponse <RecordTemplateModel>(model)));
                    }
                    return(Json(new DjLiveResponse <dynamic>()
                    {
                        ApiCode = ApiCode.UnExceptError, Message = $@"发生未知错误,请联系管理员,错误代码:{result.ErrorId}"
                    }));
                }
                catch (Exception dbE)
                {
                    if (!await RecordService.RecordTemplateModelExists(ThreadStaticObject.UserId, id))
                    {
                        return(NotFound());
                    }
                    throw;
                }
            }
            catch (Exception e)
            {
                var errorId = Guid.NewGuid().Str();
                LogHelper.Error(errorId, e);
                return(Json(new DjLiveResponse <dynamic>()
                {
                    ApiCode = ApiCode.UnExceptError,
                    Message = $@"发生未知错误,请联系管理员,错误代码:{errorId}"
                }));
            }
        }
Пример #9
0
        public async Task <IHttpActionResult> CreateDomain([FromBody] DomainModel model)
        {
            try
            {
                if (!ModelState.IsValid)
                {
                    return(BadRequest(ModelState));
                }
                var id = Guid.NewGuid().Str();
                try
                {
                    model.Id = id;
                    ServiceResultMessage result = await VhostService.CreateVhost(ThreadStaticObject.UserId, model);

                    if (result.code == ServiceResultCode.Success)
                    {
                        return(Json(new DjLiveResponse <DomainModel>(model)));
                    }
                    return(Json(new DjLiveResponse <dynamic>()
                    {
                        ApiCode = ApiCode.UnExceptError, Message = $@"发生未知错误,请联系管理员,错误代码:{result.ErrorId} {result.Message}"
                    }));
                }
                catch (Exception e)
                {
                    //todo:判断异常原因
                    return(Json(new DjLiveResponse <dynamic>(model)
                    {
                        ApiCode = ApiCode.Conflict,
                        Message = "数据库中添加失败.",
                    }));
                }
            }
            catch (Exception e)
            {
                var errorId = Guid.NewGuid().Str();
                LogHelper.Error(errorId, e);
                return(Json(new DjLiveResponse <dynamic>()
                {
                    ApiCode = ApiCode.UnExceptError, Message = $@"发生未知错误,请联系管理员,错误代码:{errorId}"
                }));
            }
        }
        public async Task <IHttpActionResult> PostTranscodeTemplateModel([FromBody] TranscodeTemplateModel model)
        {
            try
            {
                if (!ModelState.IsValid)
                {
                    return(BadRequest(ModelState));
                }
                var id = Guid.NewGuid().Str();
                try
                {
                    ServiceResultMessage result = await TranscodeService.AddLogeTemplate(ThreadStaticObject.UserId, id, model);

                    if (result.code == ServiceResultCode.Success)
                    {
                        model.Id = id;
                        return(Json(new DjLiveResponse <dynamic>(model)));
                    }
                    return(Json(new DjLiveResponse <dynamic>()
                    {
                        ApiCode = ApiCode.UnExceptError, Message = $@"发生未知错误,请联系管理员,错误代码:{result.ErrorId}"
                    }));
                }
                catch (Exception)
                {
                    if (await TranscodeService.TranscodeTemplateModelExists(ThreadStaticObject.UserId, model.Id))
                    {
                        return(Conflict());
                    }
                    throw;
                }
            }
            catch (Exception e)
            {
                var errorId = Guid.NewGuid().Str();
                LogHelper.Error(errorId, e);
                return(Json(new DjLiveResponse <dynamic>()
                {
                    ApiCode = ApiCode.UnExceptError, Message = $@"发生未知错误,请联系管理员,错误代码:{errorId}"
                }));
            }
        }
        public async Task <ServiceResultMessage> RemoveAsync(string userId, string id)
        {
            ServiceResultMessage message = new ServiceResultMessage();

            try
            {
                var daoResult = await LogoDao.DeleteLogoTemplate(id);

                if (daoResult.Code == DaoResultCode.Success)
                {
                    var logo = daoResult.para as LogoTemplateEntity;
                    if (logo != null && File.Exists(logo.FilePath))
                    {
                        try
                        {
                            File.Delete(logo.FilePath);
                        }
                        catch (Exception e)
                        {
                            LogHelper.Error($"删除Logo文件失败: 路径:{logo.FilePath}");
                        }
                    }
                    var serverEntities = await ServerDao.GetServerEntitys(userId);

                    foreach (ServerEntity entity in serverEntities)
                    {
                        try
                        {
                            var config      = JsonConvert.DeserializeObject <LiveServiceConfig>(entity.Option);
                            var liveService = new DjLiveService(config);
                            liveService.RemoveLogoFile(id);
                        }
                        catch (Exception e)
                        {
                            message.ErrorId +=
                                ("  " + LogHelper.ErrorWithId($"删除服务器Logo文件失败,ServerId{entity.Id},LogoId:{id}", e));
                            message.Message += $"删除服务器Logo文件失败,ServerId{entity.Id},LogoId:{id}";
                        }
                    }
                    var updateResult = await ServerNodeService.UpdateSrsConf(userId);

                    message = updateResult;
                    if (updateResult.code == ServiceResultCode.Warning)
                    {
                        message.code = ServiceResultCode.Success;
                    }
                    await ServerNodeService.UpdateSrsConf(userId);
                }
                else
                {
                    message = ServiceResultBase.DaoResult2ServiceResult(daoResult);
                }
                return(message);
            }
            catch (Exception e)
            {
                message.code    = ServiceResultCode.UnExceptError;
                message.Message = e.Message;
                message.ErrorId = LogHelper.ErrorWithId(e.Message, e);
                return(message);
            }
        }
        public async Task <ServiceResultMessage> AddLogeTemplate(string userId, string id, LogoTemplateModel logoTemplateModel)
        {
            ServiceResultMessage message = new ServiceResultMessage();

            try
            {
                string filePath = string.Concat(ConfigurationValue.TempLogoPath, $"{id}");
                var    options  = JsonConvert.SerializeObject(new LogoOption()
                {
                    Height = logoTemplateModel.Height,
                    Width  = logoTemplateModel.Width,
                });
                var path = EncryptUtils.Base64SaveImg(logoTemplateModel.Base64String, filePath);
                if (path == null)
                {
                    message.code    = ServiceResultCode.ImageTranscodeError;
                    message.Message = "base64转 图片失败.";
                    return(message);
                }
                var daoresult = await LogoDao.Add2Account(userId, new LogoTemplateEntity()
                {
                    Id         = id,
                    Name       = logoTemplateModel.Name,
                    Base64Vale = logoTemplateModel.Base64String,
                    FilePath   = path,
                    Option     = options,
                });

                if (daoresult.Code == DaoResultCode.Success)
                {
                    var serverEntities = await ServerDao.GetServerEntitys(userId);

                    foreach (ServerEntity entity in serverEntities)
                    {
                        try
                        {
                            var config      = JsonConvert.DeserializeObject <LiveServiceConfig>(entity.Option);
                            var liveService = new DjLiveService(config);
                            liveService.UploadLogoFile(id, path);
                        }
                        catch (Exception e)
                        {
                            message.ErrorId +=
                                ("  " + LogHelper.ErrorWithId($"上传服务器Logo文件失败,ServerId{entity.Id},LogoId:{id}", e));
                            message.Message += $"上传服务器Logo文件失败,ServerId{entity.Id},LogoId:{id}";
                        }
                    }
                    await ServerNodeService.UpdateSrsConf(userId);

                    return(message);
                }
                else
                {
                    message = ServiceResultBase.DaoResult2ServiceResult(daoresult);
                }
                return(message);
            }
            catch (NullReferenceException e)
            {
                message.code    = ServiceResultCode.SaveFileError;
                message.Message = e.Message;
                message.ErrorId = LogHelper.ErrorWithId(e.Message, e);
                return(message);
            }
            catch (Exception e)
            {
                message.code    = ServiceResultCode.UnExceptError;
                message.Message = e.Message;
                message.ErrorId = LogHelper.ErrorWithId(e.Message, e);
                return(message);
            }
        }
Пример #13
0
        public async Task <ServiceResultMessage> CreateVhost(string userId, DomainModel model)
        {
            ServiceResultMessage result = new ServiceResultMessage();
            var id = string.IsNullOrEmpty(model.Id) ? Guid.NewGuid().Str() : model.Id;

            try
            {
                var daomainResult = await DomainDao.Add2Account(userId, model.ServerPair.Key, new DomainEntity()
                {
                    Id             = id,
                    SourceDomain   = model.SourceDomain,
                    Description    = model.Description,
                    SourceType     = (int)model.SourceType,
                    StateType      = 1,
                    RtmpPlayDomain = model.RtmpPlayDomain,
                    FlvPlayDomain  = model.FlvPlayDomain,
                    HlsPlayDomain  = model.HlsPlayDomain
                });

                if (daomainResult.Code == DaoResultCode.Success)
                {
                    var secureAppendtask    = DomainDao.AppendSecure(id, model.SecurePolicyPair.Key);
                    var transcodeAppendtask = DomainDao.AppendTranscode(id, model.TranscodeIdPair?.Select(item => item.Key).ToList());
                    var resultsMessages     = await Task.WhenAll(secureAppendtask, transcodeAppendtask);

                    if (resultsMessages.Count(item => item.Code != DaoResultCode.Success) > 0)
                    {
                        var rollbackResult = await DomainDao.DeleteDomainById(id);

                        result.code = ServiceResultCode.AppendItemError;
                    }
                    else
                    {
                        try
                        {
                            var updateConfResult = await ServerNodeService.UpdateSrsConf(userId, model.ServerPair.Key);

                            if (updateConfResult.code != ServiceResultCode.Success)
                            {
                                var rollbackResult = await DomainDao.DeleteDomainById(id);

                                result.code    = ServiceResultCode.UpdateSrsError;
                                result.Message = updateConfResult.Message;
                                result.ErrorId = updateConfResult.ErrorId;
                            }
                        }
                        catch (Exception e)
                        {
                            var rollbackResult = await DomainDao.DeleteDomainById(id);

                            result.code    = ServiceResultCode.UpdateSrsError;
                            result.ErrorId = LogHelper.ErrorWithId(e.Message, e);
                            result.Message = "更新Srs服务器失败,请联系管理员,错误代码:" + result.ErrorId;
                        }
                    }
                }
                else
                {
                    result.code = ServiceResultCode.UnExceptError;
                }
            }
            catch (Exception e)
            {
                var rollbackResult = await DomainDao.DeleteDomainById(id);

                LogHelper.Error(e.Message, e);
                result.code    = ServiceResultCode.UnExceptError;
                result.ErrorId = LogHelper.ErrorWithId(e.Message, e);
                result.Message = "发生未知错误,请联系管理员,错误代码:" + result.ErrorId;
            }
            return(result);
        }
Пример #14
0
        //todo:UnFinish
        public async Task <ServiceResultMessage> UpdateDomain(string userId, string id, DomainModel model)
        {
            ServiceResultMessage result = new ServiceResultMessage();

            try
            {
                //todo:1.保存设置  3.重新生成配置文件 4.上传配置文件 5.重启SRS服务
                var daoresult = await DomainDao.UpdataDomain(id, new DomainEntity()
                {
                    Id           = model.Id,
                    SourceDomain = model.SourceDomain,
                    Description  = model.Description,
                    SourceType   = (int)model.SourceType,
                    StateType    = (int)model.StateType,

                    RtmpPlayDomain = model.RtmpPlayDomain,
                    FlvPlayDomain  = model.FlvPlayDomain,
                    HlsPlayDomain  = model.HlsPlayDomain,
                });

                if (daoresult.Code == DaoResultCode.Success)
                {
                    var secureAppendtask    = DomainDao.AppendSecure(id, model?.SecurePolicyPair.Key);
                    var transcodeAppendtask = DomainDao.AppendTranscode(id, model?.TranscodeIdPair?.Select(item => item.Key).ToList());
                    var resultsMessages     = await Task.WhenAll(secureAppendtask, transcodeAppendtask);

                    if (resultsMessages.Count(item => item.Code != DaoResultCode.Success) > 0)
                    {
                        result.code = ServiceResultCode.AppendItemError;
                    }
                    else
                    {
                        try
                        {
                            var updateConfResult = await ServerNodeService.UpdateSrsConf(userId, model.ServerPair.Key);

                            if (updateConfResult.code != ServiceResultCode.Success)
                            {
                                var rollbackResult = await DomainDao.DeleteDomainById(id);

                                result.code    = ServiceResultCode.UpdateSrsError;
                                result.Message = updateConfResult.Message;
                                result.ErrorId = updateConfResult.ErrorId;
                            }
                        }
                        catch (Exception e)
                        {
                            var rollbackResult = await DomainDao.DeleteDomainById(id);

                            result.code    = ServiceResultCode.UpdateSrsError;
                            result.ErrorId = LogHelper.ErrorWithId(e.Message, e);
                            result.Message = "更新Srs服务器失败,请联系管理员,错误代码:" + result.ErrorId;
                        }
                    }
                }
                else
                {
                    result.code = ServiceResultCode.UnExceptError;
                }
                return(result);
            }
            catch (Exception e)
            {
                LogHelper.Error(e.Message, e);
                result.code    = ServiceResultCode.UnExceptError;
                result.ErrorId = LogHelper.ErrorWithId(e.Message, e);
                result.Message = "发生未知错误,请联系管理员,错误代码:" + result.ErrorId;
                return(result);
            }
        }