小编sta*_*dAE的帖子

本地iOS-Android zeroconf ad-hoc网络

期望的功能:

用户A正在Android或iOS设备上运行您的应用.用户A可以自动查找并与附近的其他(<20米?)用户B和C(跨平台)进行通信,无论他们是在运行Android还是iOS,并且没有任何用户具有互联网连接(离线).

我相信这是一个常用的功能,对这个问题有一个明确的答案对移动开发社区来说是一个很大的好处.

根据重要性,您想要的其他要求/事项:

  • Android和iOS的单一代码库(或至少共享90%以上的代码),例如通过Xamarin或类似代码.
  • 自动选择要使用的最佳信号(可能是首选列表)信号,例如选择WiFi直接或蓝牙(类似于AllJoyn,Multipeer)
  • 仅使用Free(或对某些类用户而言)库

问题:

如何实现所需的功能?

子问题1

它甚至可能吗?

:是的.像Firechat和Spaceteam这样的应用程序可以做到这一点,因此它必须是可能的.

被拒绝的可能性:

Multipeer:仅限iOS,无法实现跨平台.

Alljoyn:iOS绑定只是Objective-C,没有实现Single Codebase.

Mono.Zeroconf:据说需要单独的平台实现,所以不要实现单一代码库

Open Garden SDK:将是一个很好的解决方案,除了它实际上还不存在.

我几天来一直在研究这个话题,但我还没有找到明确的答案.部分原因可能是人们使用了很多不同的术语,如网状网络,ad-hoc网络,zeroconf,DNS-SD等,这使得搜索变得困难.

如果你对我在stackoverflow和其他地方所做的一些研究感兴趣,这里有一些注释和链接(我在这篇文章中直接放入的链接数量有限).

networking android cross-platform zeroconf ios

9
推荐指数
1
解决办法
1431
查看次数

Mac上的Visual Studio Community 2017:如何在两列中查看同一文件?

我想在两个单独的列中并排查看相同C#代码文件的不同部分(编辑器的水平分割).我可以将编辑器置于两列模式,但我找不到在两列中同时查看文件的方法.

我通过搜索找到的相关解决方案似乎适用于以前版本的Visual Studio.他们引用了VS 2017中不存在的窗口 - >新窗口等菜单选项.

在Visual Studio 2017中,无法在两列中查看同一文件的不同部分吗?

我的窗口菜单是什么样的

c# macos visual-studio-2017

7
推荐指数
1
解决办法
744
查看次数

C# - 以类型安全的方式将输入对象映射到影响对象

我试图解决的问题在概念上非常简单。我将从游戏的角度解释它,但我相信这个概念适用于任何具有输入、效果关系的对象:

能力由输入对象列表和效果对象列表组成。输入对象定义了用户交互的类型(如选择地面瓦片或选择一个单元),每个输入对象将从用户那里获得某种类型的目标(例如瓦片或单元)。效果对象定义对特定类型目标的效果(例如移动到地面瓷砖或损坏一个单位)。

在代码中使用能力包括:

  • 依次提示用户输入对象(等待用户完成每个对象的输入,然后再进行下一个)
  • 按顺序执行效果(每个效果将从它映射到的输入对象中获取其数据)

因此,定义能力的示例可能是:

Ability: {
   Inputs: {
       Select Tile,
       Select Unit
   }

   Effects: {
       Move to (input 1),
       Deal 10 damage (input 2)
   }
}
Run Code Online (Sandbox Code Playgroud)

理想情况下,我想让从输入到效果类型安全的映射,因为每种类型的效果都有一种它所期望的目标数据类型(例如平铺或单元)。这是我编写的代码示例,用于表示代码中的动作、输入和效果对象:

    public class AbilityData
    {
        List<InputData<Target>> inputs;

        List<AbilityEffect> effects;

        public void exampleCreate()
        {
            BaseInputData<Tile> input = new TileSelectData();
            inputs.Add(input);

            effect = new List<AbilityEffect>();
            BaseAbilityEffect<Tile> effect = new BaseAbilityEffect<Tile>(new TileEffect(), input);
            effects.Add(effect);
        }
        public void exampleRun()
        {
            foreach (InputData<AbilityInput> input in inputs)
            {
                input.promptInput();
            }

            foreach (AbilityEffect effect in effects)
            {
                effect.execute();
            } …
Run Code Online (Sandbox Code Playgroud)

c# generics casting covariance type-safety

5
推荐指数
1
解决办法
135
查看次数