如何创建只有一个模型,并通过web应用程序在MVC?



我有一个连接到物理硬件(ATEM Mini)的模型,然后是控制器和视图。我的问题是,每次我在视图上按下按钮来改变硬件模型上的东西时,都会再次创建并再次连接到硬件。

编辑:这是一个问题,因为在调用switcher. changeinput (switcher)几次之后,模型正在创建并再次连接到硬件,并且在几次连接之后,它开始拒绝它。是否有可能通过视图传递一个连接的模型?

模型:

private IBMDSwitcher switcher;
private IBMDSwitcherMixEffectBlock me0;
public int camera { get; set; }
public AtemSwitcher()
{
// Connect to switcher
IBMDSwitcherDiscovery discovery = new CBMDSwitcherDiscovery();
discovery.ConnectTo("192.168.0.10", out IBMDSwitcher switcher, out _BMDSwitcherConnectToFailure failureReason);
this.switcher = switcher;
me0 = this.MixEffectBlocks.First();
}
static long GetInputId(IBMDSwitcherInput input)
{
input.GetInputId(out long id);
return id;
}
private static IBMDSwitcherInput getSwitcherInput(AtemSwitcher sw, int cam)
{
return sw.SwitcherInputs
.Where((i, ret) => {
i.GetPortType(out _BMDSwitcherPortType type);
return type == _BMDSwitcherPortType.bmdSwitcherPortTypeExternal;
})
.ElementAt(cam);
}
public void changeInput(AtemSwitcher sw)
{ 
me0.SetProgramInput(GetInputId(getSwitcherInput(sw, camera)));
}

控制器:

public IActionResult Atem()
{
AtemSwitcher sw = new AtemSwitcher();
return View("Connection", sw);
}
[HttpPost]
public IActionResult Connection(AtemSwitcher switcher)
{
if (ModelState.IsValid)
{
i = 10;
switcher.changeInput(switcher);
}
return View();
}

视图:

@model pokus222.Models.AtemSwitcher
<h1>Atem control</h1>
<div class="row">
<div class="col-md-4">
<form asp-action="Connection">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="camera" class="control-label"></label>
<br />
<input asp-for="camera" class="form-control" />
<span asp-validation-for="camera" class="text-danger"></span>
</div>
<div class="form-group">
<input type="submit" value="Přepni" class="btn btn-default" />
</div>
</form>
</div>
</div>

我需要回答一个问题switch . changeinput()做什么?它只是改变模型,还是建立联系,还是两者兼而有之?

我想这是有联系的。如果是,它应该使用与discovery.ConnectTo()相同的连接。您一次只能有一个连接。在switch . changeinput()之前打开连接,在discovery.ConnectTo()之后关闭连接。或者两个方法在完成时关闭连接。

您发布的代码是客户端的控制器。控制器可以位于客户端和服务器端。控制器与HTTP一起使用,您发送一个请求并获得一个响应,然后连接关闭。HTTP使用TCP作为传输层。您正在使用IBMDSwitcherDiscovery (TCP)连接到硬件。每次你发送一个请求,你都在建立一个新的连接,但从来没有关闭连接。

你所做的通常被称为"HTTP over ip"。您正在使用HTTP协议,您发送请求并获得响应。您正在使用TCP作为传输层。您的请求正在通过switch . changeinput()完成。您的响应正在使用discovery.ConnectTo()完成。

下面是客户机

中应该发生的事情的高级描述
  1. 需要初始化硬件或获取当前设置
  2. 在视图中显示初始设置
  3. 改变设置(s)a)更改模型(更改开关设置)并使用switcher. changeinput (switcher)更新模型b)发送请求(打开连接)和发送模型c)获取Response,即从discovery.ConnectTo()中返回的模型。d)在视图中显示新的设置e)关闭连接

IActionResult是HTTP请求/响应的主体。对于控制器,它是序列化的主体数据。

你的视图正在获取IActionResult并显示结果。

你有一个模型。在请求和响应中都使用的切换器。首先更改交换机设置。然后使用discovery.ConnectTo()发送带有模型切换器的请求。响应是您随后查看的OUT切换器。

OUT开关应该是你发送的下一个请求,因为它是开关的当前设置。

相关内容

  • 没有找到相关文章

最新更新