public static void Handle(string timestamp, string data, ParserState state) { data = data.Trim(); var match = Regexes.OptionsEntityRegex.Match(data); if(match.Success) { var id = match.Groups[1].Value; state.Options = new Options {Id = int.Parse(id), OptionList = new List<Option>()}; if(state.Node.Type == typeof(Game)) ((Game)state.Node.Object).Data.Add(state.Options); else throw new Exception("Invalid node " + state.Node.Type + " -- " + data); return; } match = Regexes.OptionsOptionRegex.Match(data); if(match.Success) { var index = match.Groups[1].Value; var rawType = match.Groups[2].Value; var rawEntity = match.Groups[3].Value; var entity = Helper.ParseEntity(rawEntity, state); var type = Helper.ParseEnum<OPTION_TYPE>(rawType); var option = new Option {Entity = entity, Index = int.Parse(index), Type = type, OptionItems = new List<OptionItem>()}; state.Options.OptionList.Add(option); state.CurrentOption = option; state.LastOption = option; return; } match = Regexes.OptionsSuboptionRegex.Match(data); if(match.Success) { var subOptionType = match.Groups[1].Value; var index = match.Groups[2].Value; var rawEntity = match.Groups[3].Value; var entity = Helper.ParseEntity(rawEntity, state); if(subOptionType == "subOption") { var subOption = new SubOption {Entity = entity, Index = int.Parse(index), Targets = new List<Target>()}; state.CurrentOption.OptionItems.Add(subOption); state.LastOption = subOption; } else if(subOptionType == "target") { var target = new Target {Entity = entity, Index = int.Parse(index)}; var lastOption = state.LastOption as Option; if(lastOption != null) { lastOption.OptionItems.Add(target); return; } var lastSubOption = state.LastOption as SubOption; if(lastSubOption != null) lastSubOption.Targets.Add(target); } else throw new Exception("Unexpected suboption type: " + subOptionType); } }
public static void Handle(string timestamp, string data, ParserState state) { data = data.Trim(); var match = Regexes.OptionsEntityRegex.Match(data); if (match.Success) { var id = match.Groups[1].Value; state.Options = new Options { Id = int.Parse(id), OptionList = new List <Option>(), TimeStamp = timestamp }; if (state.Node.Type == typeof(Game)) { ((Game)state.Node.Object).Data.Add(state.Options); } else { throw new Exception("Invalid node " + state.Node.Type + " -- " + data); } return; } match = Regexes.OptionsOptionRegex.Match(data); if (match.Success) { var index = match.Groups[1].Value; var rawType = match.Groups[2].Value; var rawEntity = match.Groups[3].Value; var entity = Helper.ParseEntity(rawEntity, state); var type = Helper.ParseEnum <OptionType>(rawType); var option = new Option { Entity = entity, Index = int.Parse(index), Type = type, OptionItems = new List <OptionItem>() }; state.Options.OptionList.Add(option); state.CurrentOption = option; state.LastOption = option; return; } match = Regexes.OptionsSuboptionRegex.Match(data); if (match.Success) { var subOptionType = match.Groups[1].Value; var index = match.Groups[2].Value; var rawEntity = match.Groups[3].Value; var entity = Helper.ParseEntity(rawEntity, state); if (subOptionType == "subOption") { var subOption = new SubOption { Entity = entity, Index = int.Parse(index), Targets = new List <Target>() }; state.CurrentOption.OptionItems.Add(subOption); state.LastOption = subOption; } else if (subOptionType == "target") { var target = new Target { Entity = entity, Index = int.Parse(index) }; var lastOption = state.LastOption as Option; if (lastOption != null) { lastOption.OptionItems.Add(target); return; } var lastSubOption = state.LastOption as SubOption; if (lastSubOption != null) { lastSubOption.Targets.Add(target); } } else { throw new Exception("Unexpected suboption type: " + subOptionType); } } }
/// <summary> /// 获取对应模块的文件夹 /// </summary> /// <param name="folderOption">根文件夹类型</param> /// <param name="subOption">子文件夹类型</param> /// <returns>返回对应模块的文件夹</returns> public static async Task <StorageFolder> getFolder(FolderOption folderOption, SubOption subOption) { StorageFolder folder = null; switch (folderOption) { case FolderOption.Motion: folder = await ApplicationData.Current.LocalFolder.CreateFolderAsync(MOTION, CreationCollisionOption.OpenIfExists); break; case FolderOption.Im: folder = await ApplicationData.Current.LocalFolder.CreateFolderAsync(IM, CreationCollisionOption.OpenIfExists); break; default: return(null); } StorageFolder sub = null; switch (subOption) { case SubOption.HeadImg: sub = await folder.CreateFolderAsync(HEADIMG, CreationCollisionOption.OpenIfExists); break; case SubOption.Emoji: sub = await folder.CreateFolderAsync(EMOJI, CreationCollisionOption.OpenIfExists); break; case SubOption.Bubble: sub = await folder.CreateFolderAsync(BUBBLE, CreationCollisionOption.OpenIfExists); break; case SubOption.db: sub = await folder.CreateFolderAsync(DB, CreationCollisionOption.OpenIfExists); break; default: return(null); } return(sub); }