Unity在RestSharp的Get-Call中崩溃

时间:2015-06-29 08:49:25

标签: c# unity3d get restsharp

我使用RestSharp发送帖子并获取对机器人的调用,该机器人通过LAN与我的计算机通过交换机连接。我的来电:

public Vector3 getEffectorPos() 
{
    var c = new RestClient("http://" + robotIP);
    var r = new RestRequest("/present/effector_position.json", Method.GET);
    List<String> queryResult = c.Execute<List<String>>(r).Data;
    string[] tmp = queryResult[0].Split('[', ']');
    Vector4 x = parseStringToFloat4(tmp[2]);
    Vector4 y = parseStringToFloat4(tmp[4]);
    Vector4 z = parseStringToFloat4(tmp[6]);
    Vector3 pos = new Vector3(x.w, y.w, z.w);
    effPos.setPos(x.w, y.w, z.w);
    effPos.cos = x.x;
    effPos.sin = -x.y;
    return pos;
}

因为机器人有静态IP 192.168.200.99我每次想要运行项目时都必须切换到.200子网中的静态IP地址。当我第一次启动项目时,如果未连接机器人,我会收到NullReference或Bad Gateway等错误。

但是现在如果我忘记从动态ip切换到静态ip并且程序无法连接到机器人Unity崩溃。然后,即使我切换回静态IP,Unity也会崩溃,看起来似乎没有任何帮助,但等待一段时间之后,如果没有我做任何事情,它将再次工作。

似乎我对帖子调用没有同样的问题:

    public bool postEffectroPos(Vector3 pos, float speed_n)
    {
        var client = new RestClient("http://" + robotIP);
        var request = new RestRequest("/present/effector_position_with_speed.json", Method.POST) { RequestFormat = RestSharp.DataFormat.Json };
        effectorPos a = new effectorPos();
        a.x = pos.x;
        a.y = pos.y;
        a.z = pos.z;
        a.speed = speed_n;
        request.AddBody(a);
        bool move = false;
        try
        {
            client.ExecuteAsync(request, response =>
                {
                    if (response.StatusCode == HttpStatusCode.OK)
                    {
                        string[] tmp = response.Content.Split(':');
                        string t = tmp[1].Remove(tmp[1].Length - 1);
                        move = bool.Parse(t);
                        //Debug.Log(move);
                    }
                    else
                    {
                        Debug.Log(response.StatusCode);
                    }
                });
        }
        catch (Exception error)
        {
            Debug.Log(error);
        }
        return move;
    }

post调用是异步但我还没弄清楚如何使用async返回一个值(总是返回零或false,具体取决于类型),我需要get调用的返回值。

0 个答案:

没有答案