Skip to content

连接示例

点击按钮时连接控制器,注册消息回调接收推送。

cs
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate void RecvMsgCallbackDelegate(int cmd, IntPtr message);
private RecvMsgCallbackDelegate recvMsgbackDelegate;
private SWIGTYPE_p_f_int_p_q_const__char__void recvMsgCallback;

public void RecvMsgCallback(int messageType, IntPtr messagePtr)
{
    int length = 0;
    while (Marshal.ReadByte(messagePtr, length) != 0) ++length;
    byte[] buffer = new byte[length];
    Marshal.Copy(messagePtr, buffer, 0, length);
    string message = Encoding.UTF8.GetString(buffer);
    string messageTypeHex = messageType.ToString("X");
    string currentTime = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss.fff");
    Debug.WriteLine($"{currentTime}  {messageTypeHex} : {message}\n\n");
    AppendText($"{currentTime}  {messageTypeHex}  : {message}\n\n");
}

private void button1_Click(object sender, EventArgs e)
{
    AppendText("Connecting...");
    int temp = nrc_interface.connect_robot("192.168.1.13", "6001");
    if (temp > 0)
    {
        fd = temp;
        recvMsgbackDelegate = new RecvMsgCallbackDelegate(RecvMsgCallback);
        IntPtr recvCallbackPtr = Marshal.GetFunctionPointerForDelegate(recvMsgbackDelegate);
        recvMsgCallback = new SWIGTYPE_p_f_int_p_q_const__char__void(recvCallbackPtr, true);
        nrc_interface.recv_message(fd, recvMsgCallback);
        AppendText(textBox_ip.Text + " connect success.");
    }
    else
    {
        AppendText("Connect fail.");
    }
}