1

我正在编写服务器代码,并且已经与所有客户端建立了 TCP 连接。现在,当客户端发送数据包时,我会检查数据包的操作码以便处理它。

目前,我有一个 OpcodeHandler 结构,该结构当前包含String name但我也希望它有一个 C++ 类型的函数指针,该指针调用另一个函数,这样当我创建一个以该结构为类型的数组并像这样初始化数组时:

opcodes = new OpcodeHandler[max_opcodes] 
{
  new OpcodeHandler("someopcodenamehere", Somefunctionname);
  // more new's..
}

构造函数的第二个参数中命名的函数:'Somefunctionname' 在调用函数指针时被调​​用。我听说委托可以做到这一点,因为它们的行为就像 C++ 中的函数指针,但我所有的尝试都是无用的。

4

2 回答 2

1

您说您有一个OpcodeHandler要创建数组的结构。

现在我不知道还有什么OpcodeHandler作用,但我会建议一些更简单的东西:

Dictionary<string, Action<PacketData>> OpcodeHandlers = new Dictionary<string, Action<PacketData>>();

这是一本代表字典。

您可以像这样向它添加功能:

OpcodeHandlers["someopcodenamehere"] = Somefunctionname;

并像这样调用函数:

OpcodeHandlers["someopcodenamehere"](packetData);


编辑:
您也可以像这样填写字典:

Dictionary<string, Action<PacketData>> OpcodeHandlers = new Dictionary<string, Action<PacketData>>
{
  { "functionName1", function1 },
  { "functionName2", function2 }
};
于 2013-08-02T12:15:05.960 回答
1
new OpcodeHandler("someopcodenamehere", packetData => 
        Somefunctionname(packetData))
于 2013-08-02T12:15:30.070 回答