Пример #1
0
    private void Update()
    {
        var mPath = Application.dataPath;

        //Output the Game data path to the console
        Debug.Log("dataPath : " + mPath);

        if (_currentSpeech <= LastCurrentSpeech)
        {
            return;
        }

        LastCurrentSpeech = _currentSpeech;

        var speech = _dialogues.speeches[_currentSpeech];

        BackgroundImage.sprite = Service.LoadSpriteByName(speech.background);
        SpeakerImage.sprite    = Service.LoadSpriteByName(speech.speaker.portrait);
        SpeakerText.text       = speech.value;
        SpeakerName.text       = speech.speaker.name;

        if (speech.backgroundSound != null && !speech.backgroundSound.Equals(""))
        {
            BackgroundSoundManager.Play(speech.backgroundSound);
        }

        if ([email protected] == null || [email protected] == null)
        {
            return;
        }

        Service.Save(_currentSpeech);

        EventCaller.CallEvent([email protected], [email protected]);
    }
Пример #2
0
        private void ProcessResponse(EventCaller eventCaller, MemoryMappedViewAccessor accessor)
        {
            byte[] data = new byte[eventCaller.MessageLength];

            accessor.ReadArray(eventCaller.OffsetPosition, data, 0, eventCaller.MessageLength);

            _dataTestbasicHaywire = data.GetString();
        }
Пример #3
0
        private void InvokeEvent(EventCaller caller, object sender, EventArgs e)
        {
            if (!setUpYet)
            {
                return;
            }

            Invoke(caller, sender, e);
        }
 public virtual void Disable()
 {
     if (updates.HasFlag(UpdateEvents.BeforeRender) || updates.HasFlag(UpdateEvents.Once))
     {
         Application.onBeforeRender -= this.UpdateAction;
     }
     if (updates.HasFlag(UpdateEvents.FixedUpdate))
     {
         EventCaller.RemoveFixedUpdate(this.UpdateAction);
     }
 }
Пример #5
0
        /// <summary>
        /// 初始化容器
        /// </summary>
        /// <param name="provider">容器组件提供程序</param>
        ///
        public ApiContainer(IApiContainerProvider provider)
        {
            Provider = provider ?? throw new ArgumentNullException(nameof(provider));
            ID       = provider.ContainerId ?? throw new ArgumentNullException(nameof(provider.ContainerId));
            var filters       = new List <ApiFilterAttribute>();
            var validations   = new List <DataValidationAttribute>();
            var modifications = new List <DataModificationAttribute>();

            if (provider.GlobalFilters != null)
            {
                filters.AddRange(provider.GlobalFilters);
            }
            if (provider.GlobalValidations != null)
            {
                validations.AddRange(provider.GlobalValidations);
            }
            if (provider.GlobalModifications != null)
            {
                modifications.AddRange(provider.GlobalModifications);
            }

            var apiGlobalType = typeof(ApiGlobal).GetTypeInfo();
            var apiGlobals    = provider.DefinedTypes
                                .Select(t => t.GetTypeInfo())
                                .Where(t => t.IsAbstract == false)
                                .Where(t => apiGlobalType.IsAssignableFrom(t))
                                .Where(t => t.IsGenericType == false || t.IsGenericTypeDefinition == false)
                                .Select(t => t.DeclaredConstructors.FirstOrDefault(c => c.GetParameters().Length == 0))
                                .Where(c => c != null)
                                .Select(c => (ApiGlobal)c.Invoke(null))
                                .ToArray();

            foreach (var apiGlobal in apiGlobals)
            {
                apiGlobal.Initialization();
                if (apiGlobal.Filters != null)
                {
                    filters.AddRange(apiGlobal.Filters);
                }
                if (apiGlobal.Validations != null)
                {
                    validations.AddRange(apiGlobal.Validations);
                }
                if (apiGlobal.Modifications != null)
                {
                    modifications.AddRange(apiGlobal.Modifications);
                }
            }
            Filters       = filters.AsReadOnly();
            Validations   = validations.AsReadOnly();
            Modifications = modifications.AsReadOnly();
            ApiCollection = new ApiCollection(this);
            EventCaller   = new EventCaller(apiGlobals);
        }
Пример #6
0
 public Task <ProviderPackage> GetAsync(EventCaller caller, string inputContent)
 {
     return(Task.Run(() =>
     {
         var htmlTree = new HtmlDocument();
         htmlTree.LoadHtml(inputContent);
         var node = htmlTree.DocumentNode.QuerySelector(".b_anno");
         return node != null
             ? new ProviderPackage(node.InnerText, caller, Priority)
             : ProviderPackage.ReturnNotAvailablePackage();
     }));
 }
 public BasicAction(UpdateEvents _updates)
 {
     updates = _updates;
     if (updates.HasFlag(UpdateEvents.BeforeRender) || updates.HasFlag(UpdateEvents.Once))
     {
         Application.onBeforeRender += this.UpdateAction;
     }
     if (updates.HasFlag(UpdateEvents.FixedUpdate))
     {
         EventCaller.AddFixedUpdate(this.UpdateAction);
     }
     //UpdateAction();
 }
Пример #8
0
 public Task <ProviderPackage> GetAsync(EventCaller caller, string inputContent)
 {
     return(Task.Run(() =>
     {
         var htmlTree = new HtmlDocument();
         htmlTree.LoadHtml(inputContent);
         var node = htmlTree.DocumentNode.QuerySelector(".MSNJVData .b_imagePair");
         if (node != null)
         {
             return new ProviderPackage(string.Format("{0}", node.InnerText), caller, Priority);
         }
         return ProviderPackage.ReturnNotAvailablePackage();
     }));
 }
Пример #9
0
        public async Task TestBingReq()
        {
            var caller = new EventCaller()
            {
                Id              = 0,
                CallerId        = 0,
                CallerFirstName = "Ben"
            };
            var textContent = "你好";

            textContent = textContent.Substring(textContent.IndexOf(' ') + 1);
            var bingContent = await CortanaBot.Networking.BingContent.GetAsync(caller, textContent, RequestTemplate.Lang);

            Assert.AreNotEqual("", bingContent, "Request failed");
        }
Пример #10
0
    static void InstaceCheck(EventCaller _this = null)
    {
        if (instance == null)
        {
            instance = new GameObject("[vrtk0 event caller]").AddComponent <EventCaller>();

            instance.updateCallback      += instance.EventDump;
            instance.lateUpdateCallback  += instance.EventDump;
            instance.fixedUpdateCallback += instance.EventDump;
        }
        if (instance != _this)
        {
            Destroy(_this);
        }
    }
Пример #11
0
        public async static Task <string> GetAsync(EventCaller caller, string queryString, string lang)
        {
            // Send request to Bing
            var httpClient = new HttpClient();
            // Encode the content
            var reqContent = HttpUtility.UrlEncode(queryString);
            var requestUrl = string.Format(RequestTemplate.RequestUrl, reqContent, lang);

            // Remote header
            httpClient.DefaultRequestHeaders.Add("X-Search-MobileClientType", "Hose");
            httpClient.DefaultRequestHeaders.Add("X-Search-AppId", "D41D8CD98F00B204E9800998ECF8427E09AA4958");
            httpClient.DefaultRequestHeaders.Add("X-BM-Client", "BingWP/2.1/assistant");
            httpClient.DefaultRequestHeaders.Add("X-BM-Theme", "000000;1BA1E2");
            httpClient.DefaultRequestHeaders.Add("X-BM-DateFormat", "yyyy/M/d");
            httpClient.DefaultRequestHeaders.Add("X-BM-RegionalSettings", "zh-CN");
            httpClient.DefaultRequestHeaders.Add("X-BM-DeviceOrientation", "0");
            httpClient.DefaultRequestHeaders.Add("X-COMMON-PARTNERCODE", "NOKMSB");
            httpClient.DefaultRequestHeaders.Add("X-BM-MO", "000-HK");
            httpClient.DefaultRequestHeaders.Add("X-BM-CBT", "1435931517761");
            httpClient.DefaultRequestHeaders.Add("X-BM-Bandwidth", "High");
            httpClient.DefaultRequestHeaders.Add("X-BM-Theme", "000000;1BA1E2");
            httpClient.DefaultRequestHeaders.Add("X-Search-Location", "lat:30.281360;long:120.123233;ts:1435931517;re:124.000000");
            httpClient.DefaultRequestHeaders.Add("X-BM-DeviceDpi", "96");
            httpClient.DefaultRequestHeaders.Add("X-BM-DeviceScale", "1.000000");
            httpClient.DefaultRequestHeaders.Add("X-BM-DeviceDimensionsLogical", "480x800");
            httpClient.DefaultRequestHeaders.Add("X-DeviceId", "1CB009C462E00B208FAFE968E04058C07D2CD3DFC9E2DF7F0985563621B90E35");
            httpClient.DefaultRequestHeaders.Add("X-BM-NetworkType", "Wi-Fi");
            httpClient.DefaultRequestHeaders.Add("X-BM-BuildNumber", " Windows Phone 6.3.0.0.9651");
            httpClient.DefaultRequestHeaders.Add("X-BM-UserDisplayName", caller.CallerName);
            httpClient.DefaultRequestHeaders.Add("AppContext", "{\"Stores\":\"Zest:NOKIA\",\"CatalogCountry\":\"CN\",\"OverrideCountry\":\"CN\",\"DisplayLanguageLocale\":\"zh-CN\",\"DeviceConfig\":\"268481538\",\"DeviceTypeStr\":\"winphone8.10\",\"DeviceModel\":\"RM-1019_1027\",\"SafeSearchRating\":\"99:1\"}");
            httpClient.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Mobile; Windows Phone 8.1; Android 4.0; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 530 Dual SIM) like iPhone OS 7_0_3 Mac OS X AppleWebKit/537 (KHTML, like Gecko) Mobile Safari/537");
            httpClient.DefaultRequestHeaders.Add("UA-CPU", "ARM");
            // Get
            var bingContent = await httpClient.GetAsync(new Uri(requestUrl));

            httpClient.Dispose();
            if (bingContent.IsSuccessStatusCode)
            {
                return(await bingContent.Content.ReadAsStringAsync());
            }
            return(null);
        }
Пример #12
0
        public Task <ProviderPackage> GetAsync(EventCaller caller, string inputContent)
        {
            return(Task.Run(() =>
            {
                var htmlTree = new HtmlDocument();
                htmlTree.LoadHtml(inputContent);
                var node = htmlTree.DocumentNode.QuerySelector(".b_anno");
                var stockNode = htmlTree.DocumentNode.QuerySelector(".b_hPanel");
                var trendMap = htmlTree.DocumentNode.QuerySelector("svg");

                if (node != null && stockNode != null)
                {
                    if (trendMap != null)
                    {
                        var w = trendMap.Attributes["width"];
                        var h = trendMap.Attributes["height"];
                        var trendMapContent = string.Format("<svg width=\"{0}\" height=\"{1}\">{2}</svg>", w.Value, h.Value, trendMap.InnerHtml);

                        var trendMapXml = new XmlDocument();
                        trendMapXml.LoadXml(trendMapContent);

                        var reader = new SvgReader(new StringReader(trendMapContent));
                        var graphic = reader.Graphic;
                        var c =
                            Platforms.Current.CreateImageCanvas(
                                new NGraphics.Size(double.Parse(w.Value), double.Parse(h.Value)), scale: 1);
                        graphic.Draw(c);
                        var trendMapImageStream = new MemoryStream();
                        c.GetImage().SaveAsPng(trendMapImageStream);

                        // Send Package
                        return new ProviderPackage(string.Format("{0} : {1}", node.InnerText, stockNode.InnerText)
                                                   , trendMapImageStream, caller, Priority);
                    }
                    return new ProviderPackage(string.Format("{0} : {1}", node.InnerText, stockNode.InnerText),
                                               caller, Priority);
                }

                return ProviderPackage.ReturnNotAvailablePackage();
            }));
        }
Пример #13
0
        public async Task <IHttpActionResult> Post([FromBody] ApiReqContent jsonRpcValue)
        {
            // Prep sender
            var caller = new EventCaller
            {
                CallerName = jsonRpcValue.message.from.first_name,
                CallerId   = jsonRpcValue.message.chat.id,
                Id         = jsonRpcValue.message.message_id
            };

            // Scenario fix
            // 1. Add bot
            if (jsonRpcValue.message.text == null)
            {
                var r = await Networking.Sender.SendMessagePackageAsync(new ProviderPackage("Hey!", caller, 65535));

                if (r)
                {
                    return(new OkResult(new HttpRequestMessage(HttpMethod.Post, RequestTemplate.WebHookUrl)));
                }
                return(new InternalServerErrorResult(new HttpRequestMessage(HttpMethod.Post, RequestTemplate.WebHookUrl)));
            }
            // 2. Initial
            if (jsonRpcValue.message.text.Contains("/start"))
            {
                var r =
                    await Networking.Sender.SendMessagePackageAsync(new ProviderPackage("Hi, I am Cortana, your truly digital personal assistant.", caller, 65535));

                if (r)
                {
                    return(new OkResult(new HttpRequestMessage(HttpMethod.Post, RequestTemplate.WebHookUrl)));
                }
                return(new InternalServerErrorResult(new HttpRequestMessage(HttpMethod.Post, RequestTemplate.WebHookUrl)));
            }


            // Ask Bing
            // Encode the content
            var textContent = jsonRpcValue.message.text;

            if (textContent.StartsWith("/cortana"))
            {
                textContent = textContent.Substring(textContent.IndexOf(' ') + 1);
            }
            if (textContent.EndsWith("?") || textContent.EndsWith("?"))
            {
                textContent = textContent.Remove(textContent.Length - 1);
            }
            if (textContent.EndsWith("!") || textContent.EndsWith("!"))
            {
                textContent = textContent.Remove(textContent.Length - 1);
            }
            if (textContent.EndsWith(".") || textContent.EndsWith("。"))
            {
                textContent = textContent.Remove(textContent.Length - 1);
            }
            if (textContent.EndsWith("~") || textContent.EndsWith("/"))
            {
                textContent = textContent.Remove(textContent.Length - 1);
            }
            var bingContent = await Networking.BingContent.GetAsync(caller, textContent, RequestTemplate.Lang);

            // Normal mode

            var availPlugins = Utils.InterfaceHelper.TypesImplementingInterface <IContentProvider>();
            var results      = new List <ProviderPackage>();

            foreach (var contentProvider in availPlugins.Select(pluginType => (IContentProvider)Activator.CreateInstance(pluginType)).Where(contentProvider => contentProvider != null && contentProvider.Bcp47LangTag == RequestTemplate.Lang))
            {
                var resultPkg = await contentProvider.GetAsync(caller, bingContent);

                results.Add(resultPkg);
            }

            var query = from c in results
                        where c.Type != ContentType.Error && c.Type != ContentType.NotAvailable
                        orderby c.Priority descending
                        select c;

            // Determind return type.
            if (query.Any())
            {
                // Send the first one.
                var succResult = await Networking.Sender.SendMessagePackageAsync(query.FirstOrDefault());

                if (succResult)
                {
                    return(new OkResult(new HttpRequestMessage(HttpMethod.Post, RequestTemplate.WebHookUrl)));
                }
                return(new InternalServerErrorResult(new HttpRequestMessage(HttpMethod.Post, RequestTemplate.WebHookUrl)));
            }

            // Nothing, return search result
            var nResult = await Networking.Sender.SendMessagePackageAsync(
                new ProviderPackage(string.Format(RequestTemplate.RequestUrl, WebUtility.UrlEncode(textContent), RequestTemplate.Lang),
                                    caller, 65535));

            if (nResult)
            {
                return(new OkResult(new HttpRequestMessage(HttpMethod.Post, RequestTemplate.WebHookUrl)));
            }
            return(new InternalServerErrorResult(new HttpRequestMessage(HttpMethod.Post, RequestTemplate.WebHookUrl)));
        }
Пример #14
0
 /// <summary>
 /// 触发请求结束事件
 /// </summary>
 /// <param name="context"></param>
 public void OnEndRequest(ApiCallContext context) => EventCaller.Invoke(GlobalEvents.OnBeginRequest, context);
Пример #15
0
 /// <summary>
 /// 触发请求开始事件
 /// </summary>
 public void OnBeginRequest() => EventCaller.Invoke(GlobalEvents.OnBeginRequest, null);
Пример #16
0
        /// <summary>
        /// 创建上下文
        /// </summary>
        /// <param name="apiDescriptor"> api描述 </param>
        /// <param name="dataProvider"> 数据提供程序 </param>
        /// <param name="resultUpdater"> 返回值更新程序 </param>
        /// <returns>如果编译失败,返回异常信息</returns>
        public ApiCallContext CreateContext(ApiDescriptor apiDescriptor, IApiDataProvider dataProvider, out IResultUpdater resultUpdater)
        {
            if (ApiCollection.Apis.Contains(apiDescriptor ?? throw new ArgumentNullException(nameof(apiDescriptor))) == false)
            {
                throw new ArgumentException("API描述不属于当前容器", nameof(apiDescriptor));
            }
            var            logger  = Provider.Logger.GetUsableService(false); //获取日志服务
            ApiCallContext context = null;

            try
            {
                var instance = apiDescriptor.Method.IsStatic
                    ? null
                    : dataProvider.GetApiInstance(apiDescriptor) ??
                               Activator.CreateInstance(apiDescriptor.ApiClass.Type);
                resultUpdater = Provider.CreateResultUpdater() ?? new ResultProvider();
                var session = dataProvider.GetSession();
                context = new ApiCallContext(instance, apiDescriptor.Method, resultUpdater, session, logger);
                context.Data["$ResultProvider"] = resultUpdater;
                context.Data["$ApiContainer"]   = this;
                context.Data["$ApiDescriptor"]  = apiDescriptor;

                logger?.Append(new LogItem()
                {
                    Context = context,
                    Level   = LogLevel.Debug,
                    Message = "创建上下文",
                    Title   = "系统",
                });

                if (session != null)
                {
                    EventCaller.Invoke(GlobalEvents.OnBeginRequest, context);
                }

                var parameters = context.Parameters;
                var properties = context.Properties;

                //属性
                if (apiDescriptor.Method.IsStatic == false)
                {
                    foreach (var p in apiDescriptor.Properties)
                    {
                        var result = dataProvider.GetProperty(p);

                        if (result.Error != null && result.Exists)
                        {
                            properties.Add(p.Name, result.Error);
                            resultUpdater.SetException(result.Error);
                            return(context);
                        }

                        if (result.Exists || p.HasDefaultValue == false)
                        {
                            var value = result.Exists ? result.Value : null;
                            if (p.DataModifications.Count > 0)
                            {
                                p.DataModifications.ForEach(it => it.Modifies(ref value, context)); //变更数据
                            }
                            Modifier.Modifies(value, context);
                            if (result.Exists)
                            {
                                properties.Add(p.Name, value);
                                p.Setter(instance, value);
                            }
                            if (p.DataValidations.Count > 0)
                            {
                                var ex = p.DataValidations.FirstOrDefault(it => it.IsValid(value, context) == false)?
                                         .GetException(p.Name, value, context)
                                         ?? Validator.IsValid(value, context, true); //数据验证
                                if (ex != null)
                                {
                                    resultUpdater.SetException(ex);
                                    return(context);
                                }
                            }
                        }
                        else
                        {
                            properties.Add(p.Name, p.DefaultValue);
                            p.Setter(instance, p.DefaultValue);
                        }
                    }
                }

                //参数
                foreach (var p in apiDescriptor.Parameters)
                {
                    if (p.ParameterType == typeof(ISession))
                    {
                        parameters.Add(p.Name, session);
                        continue;
                    }
                    if (p.ParameterType == typeof(ApiCallContext))
                    {
                        parameters.Add(p.Name, context);
                        continue;
                    }
                    if (p.ParameterType == typeof(ILogger))
                    {
                        parameters.Add(p.Name, logger);
                        continue;
                    }

                    var result = dataProvider.GetParameter(p);

                    if (result.Error != null && result.Exists)
                    {
                        parameters.Add(p.Name, result.Error);
                        resultUpdater.SetException(result.Error);
                        return(context);
                    }

                    if (result.Exists)
                    {
                        var value = result.Value;
                        if (p.DataModifications.Count > 0)
                        {
                            p.DataModifications.ForEach(it => it.Modifies(ref value, context)); //变更数据
                        }
                        Modifier.Modifies(value, context);
                        parameters.Add(p.Name, value);
                        if (p.DataValidations.Count > 0)
                        {
                            var ex = p.DataValidations.FirstOrDefault(it => it.IsValid(value, context) == false)?.GetException(p.Name, value, context)
                                     ?? Validator.IsValid(value, context, true); //数据验证
                            if (ex != null)
                            {
                                resultUpdater.SetException(ex);
                                return(context);
                            }
                        }
                    }
                    else if (p.HasDefaultValue)
                    {
                        parameters.Add(p.Name, p.DefaultValue);
                    }
                    else
                    {
                        var ex = ApiException.ArgumentMissing(p.Name);
                        parameters.Add(p.Name, ex);
                        resultUpdater.SetException(ex);
                        return(context);
                    }
                }

                EventCaller.Invoke(GlobalEvents.OnApiDataParsed, context);
                return(context);
            }
            catch (Exception ex)
            {
                logger?.Append(new LogItem()
                {
                    Context   = context,
                    Exception = ex,
                    Level     = LogLevel.Critical,
                    Message   = "未处理异常",
                    Title     = "系统",
                });
                EventCaller.Invoke(GlobalEvents.OnUnprocessException, context);
                throw;
            }
            finally
            {
                if (context?.IsError == true)
                {
                    var ex = context.Exception.GetRealException();
                    if (ex is ApiException e)
                    {
                        context.Warning(e.Message, "逻辑异常");
                        if (e.InnerException != null)
                        {
                            context.Warning(e.InnerException, "内部逻辑异常");
                        }
                        EventCaller.Invoke(GlobalEvents.OnApiException, context);
                    }
                    else
                    {
                        context.Error(context.Exception, "服务器内部错误");
                        EventCaller.Invoke(GlobalEvents.OnUnprocessException, context);
                    }
                }
            }
        }