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]); }
private void ProcessResponse(EventCaller eventCaller, MemoryMappedViewAccessor accessor) { byte[] data = new byte[eventCaller.MessageLength]; accessor.ReadArray(eventCaller.OffsetPosition, data, 0, eventCaller.MessageLength); _dataTestbasicHaywire = data.GetString(); }
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); } }
/// <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); }
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(); }
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(); })); }
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"); }
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); } }
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); }
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(); })); }
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))); }
/// <summary> /// 触发请求结束事件 /// </summary> /// <param name="context"></param> public void OnEndRequest(ApiCallContext context) => EventCaller.Invoke(GlobalEvents.OnBeginRequest, context);
/// <summary> /// 触发请求开始事件 /// </summary> public void OnBeginRequest() => EventCaller.Invoke(GlobalEvents.OnBeginRequest, null);
/// <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); } } } }