Esempio n. 1
0
    private void StartReceiving(Action <string> onReceived)
    {
        Debug.Log("start receiveing data.");
        ShowEditorLocalIP();

        // WS -> updateへのデータの転送を行うチャンネル。
        var chan = Chan <OnUpdatePayload> .Make();

        // updateでデータを受け取るブロック。
        chan.Receive(
            (data, ok) =>
        {
            if (!ok)
            {
                return;
            }

            onReceived(data.payload);
        }
            );

        var fp = new FilePersistence(Application.persistentDataPath);

        ws = new WebuSocket(
            "ws://" + "127.0.0.1" + ":1129",
            10240,
            () =>
        {
            // 接続できたipを保存
            fp.Update("connectionRecord", "latestIp", "127.0.0.1");

            // var data = new byte[1300];
            // // for (var i = 0; i < data.Length; i++)
            // // {
            // //     data[i] = (byte)UnityEngine.Random.Range(0, 100);
            // // }

            // try
            // {
            //     ws.Send(data);
            // }
            // catch (Exception e)
            // {
            //     Debug.Log("ここだ" + e);
            // }

            // do nothng.
        },
            segments =>
        {
            // データを受け取った。受け取りは非メインスレッドなので、メインスレッドに転送する必要がある。
            while (0 < segments.Count)
            {
                var data  = segments.Dequeue();
                var bytes = new byte[data.Count];
                Buffer.BlockCopy(data.Array, data.Offset, bytes, 0, data.Count);

                // updateブロックへと転送する
                var jsonPayload     = new OnUpdatePayload();
                jsonPayload.payload = Encoding.UTF8.GetString(bytes);
                chan.Send(jsonPayload);
            }
        },
            () => { },
            closedEnum =>
        {
            Debug.Log("closedEnum:" + closedEnum);
        },
            (error, reason) =>
        {
            Debug.Log("error:" + error + " reason:" + reason);
        },
            new Dictionary <string, string> {
            { "local", "" }
        }
            );
    }