コード例 #1
0
    // вызывается из потока собыйти unity
    static private void setpos(PacketSetpos setpos)
    {
        if (!idnames.ContainsKey(setpos.idname))
        {
            return;
        }

        int id = idnames[setpos.idname];

        if (devices.ContainsKey(id))
        {
            switch (devices[id].GetType().ToString())
            {
            case "manipulator1":
            {
                manipulator1 manipulator = (manipulator1)devices[id];
                manipulator.SetPos(setpos.a0, setpos.a1, setpos.a2);
            }
            break;

            case "manipulator2":
            {
                manipulator2 manipulator = (manipulator2)devices[id];
                manipulator.SetPos(setpos.a0, setpos.a1, setpos.a2, setpos.a3, setpos.a4, setpos.a5, setpos.a6 != 0.0f);
            }
            break;

            default:
                return;
            }
        }

        if (things.ContainsKey(id))
        {
            things[id].SetPos(setpos.a0, setpos.a1, setpos.a2, setpos.a3, setpos.a4, setpos.a5, setpos.a6, setpos.a7 != 0.0f);
        }

        if (tables.ContainsKey(id))
        {
            tables[id].SetPos(setpos.a0, setpos.a1, setpos.a2, setpos.a3, setpos.a4, setpos.a5, setpos.a6, setpos.a7 != 0.0f);
        }

        return;
    }
コード例 #2
0
    static private Packet receive_packet(Context context, bool blocking = true)
    {
        var start = Process.GetCurrentProcess().TotalProcessorTime;

        try
        {
            byte[] bytes = new byte[1024];

            if (context.buffer.Length == 0)
            {
                if (blocking || context.client.GetStream().DataAvailable)
                {
                    while (true)
                    {
                        int r = context.client.GetStream().Read(bytes, 0, bytes.Length);

                        if (r > 0)
                        {
                            context.buffer += Encoding.ASCII.GetString(bytes, 0, r);
                        }

                        if (!context.client.GetStream().DataAvailable)
                        {
                            break;
                        }
                    }
                }
            }

            while (true)
            {
                int pos = 0;

                string packet = "";

                if (context.buffer.Length > 0 && context.buffer.Substring(pos, 4) == "json")
                {
                    int pos1 = context.buffer.IndexOf(":", pos);

                    if (pos1 != -1)
                    {
                        int size = Int32.Parse(context.buffer.Substring(pos + 4, pos1 - pos - 4));
                        pos1 += 1;
                        pos   = pos1 + size;

                        while (pos > context.buffer.Length)
                        {
                            if (!context.client.GetStream().DataAvailable)
                            {
                                break;
                            }

                            int r = context.client.GetStream().Read(bytes, 0, bytes.Length);

                            if (r > 0)
                            {
                                context.buffer += Encoding.ASCII.GetString(bytes, 0, r);
                            }
                        }

                        packet         = context.buffer.Substring(pos1, size);
                        context.buffer = context.buffer.Substring(pos);
                    }
                }

                if (packet.Length == 0)
                {
                    break;
                }

                PacketHeader header = UnityEngine.JsonUtility.FromJson <PacketHeader>(packet);
                header.json_data = packet;

                if (header.packet == "setpos")
                {
                    PacketSetpos setpos = UnityEngine.JsonUtility.FromJson <PacketSetpos>(header.json_data);
                    context.packetdict[setpos.idname] = setpos;
                }
                else
                {
                    context.packetdeque.Enqueue(header);
                }

                var check = Process.GetCurrentProcess().TotalProcessorTime;

                if ((check - start).Milliseconds >= 20)
                {
                    break;
                }
            }
        }
        catch (Exception e)
        {
            Log(e.ToString());
        }

        if (context.packetdeque.Count == 0)
        {
            if (context.packetdict.Count == 0)
            {
                return(null);
            }

            Random rand = new Random();
            int    r    = rand.Next(context.packetdict.Count);
            int    i    = 0;
            foreach (var item in context.packetdict)
            {
                if (i == r)
                {
                    context.packetdict.Remove(item.Key);
                    return(item.Value);
                }
                i++;
            }
        }

        Log("received " + ((PacketHeader)context.packetdeque.Peek()).json_data);

        return(context.packetdeque.Dequeue());
    }