コード例 #1
0
ファイル: Sync.cs プロジェクト: nonconforme/CarRacingGame
    Upcall.ccn_upcall_res WriteCallback(IntPtr selfp, Upcall.ccn_upcall_kind kind, IntPtr info)
    {
        print("WriteCallback... " + kind);
        Upcall.ccn_upcall_res ret = Upcall.ccn_upcall_res.CCN_UPCALL_RESULT_OK;

        Egal.ccn_upcall_info Info = new Egal.ccn_upcall_info();
        Info = (Egal.ccn_upcall_info)Marshal.PtrToStructure(info, typeof(Egal.ccn_upcall_info));
        IntPtr h = Info.h;

        Egal.ccn_closure Selfp = new Egal.ccn_closure();
        Selfp = (Egal.ccn_closure)Marshal.PtrToStructure(selfp, typeof(Egal.ccn_closure));
        NormalStruct Data = new NormalStruct();

        Data = (NormalStruct)Marshal.PtrToStructure(Selfp.data, typeof(NormalStruct));

        switch (kind)
        {
        case Upcall.ccn_upcall_kind.CCN_UPCALL_FINAL:
            // Marshal.FreeHGlobal(selfp); // this again, will make Unity crash
            break;

        case Upcall.ccn_upcall_kind.CCN_UPCALL_INTEREST:


            PutContent(h, Data);             // publish content
            ret = Upcall.ccn_upcall_res.CCN_UPCALL_RESULT_INTEREST_CONSUMED;
            break;

        case Upcall.ccn_upcall_kind.CCN_UPCALL_CONTENT:
            // repo first returns a content...
            // this is info of the repo...
            break;

        default:
            ret = Upcall.ccn_upcall_res.CCN_UPCALL_RESULT_ERR;
            break;
        }

        // print ("ref count: " + Selfp.refcount);
        // print ("WriteCallback returnning..." + ret);
        return(ret);
    }
コード例 #2
0
ファイル: AssetSync.cs プロジェクト: named-data/ndn-mog
    static Upcall.ccn_upcall_res ReadCallback(IntPtr selfp, Upcall.ccn_upcall_kind kind, IntPtr info)
    {
        print("ReadCallback! " + kind);
        Upcall.ccn_upcall_res res = Upcall.ccn_upcall_res.CCN_UPCALL_RESULT_OK;

        Egal.ccn_upcall_info Info = new Egal.ccn_upcall_info();
        Info = (Egal.ccn_upcall_info)Marshal.PtrToStructure(info, typeof(Egal.ccn_upcall_info));
        IntPtr h=Info.h;

        switch (kind) {
        case Upcall.ccn_upcall_kind.CCN_UPCALL_CONTENT:
            //print("ReadCallback: CCN_UPCALL_CONTENT");
            IntPtr source_ptr = Info.content_ccnb;

            Egal.ccn_parsed_ContentObject Pco = new Egal.ccn_parsed_ContentObject();
            Pco = (Egal.ccn_parsed_ContentObject)Marshal.PtrToStructure(Info.content_ccnb, typeof(Egal.ccn_parsed_ContentObject));

            UInt16 source_length = Pco.offset[(int)PCO.ccn_parsed_content_object_offsetid.CCN_PCO_E];

            IntPtr result_ptr = IntPtr.Zero;
            int result_length = 0;
            Egal.ccn_content_get_value(source_ptr, source_length, Info.pco, ref result_ptr, ref result_length);

            String content = Marshal.PtrToStringAnsi(result_ptr);
            print(content);

            break;
        case Upcall.ccn_upcall_kind.CCN_UPCALL_FINAL:
            //print("ReadCallback: CCN_UPCALL_FINAL");
            Egal.ccn_set_run_timeout(h, 0);
            break;
        default:
            break;
        }

        return res;
    }
コード例 #3
0
ファイル: AssetSync.cs プロジェクト: named-data/ndn-mog
    Upcall.ccn_upcall_res WriteCallback(IntPtr selfp, Upcall.ccn_upcall_kind kind, IntPtr info)
    {
        print("WriteCallback... " + kind);
        Upcall.ccn_upcall_res ret = Upcall.ccn_upcall_res.CCN_UPCALL_RESULT_OK;

        Egal.ccn_upcall_info Info = new Egal.ccn_upcall_info();
        Info = (Egal.ccn_upcall_info)Marshal.PtrToStructure(info, typeof(Egal.ccn_upcall_info));
        IntPtr h = Info.h;

        Egal.ccn_closure Selfp = new Egal.ccn_closure();
        Selfp = (Egal.ccn_closure)Marshal.PtrToStructure(selfp, typeof(Egal.ccn_closure));
        NormalStruct Data = new NormalStruct();
        Data = (NormalStruct) Marshal.PtrToStructure(Selfp.data, typeof(NormalStruct));

        switch(kind)
        {
        case Upcall.ccn_upcall_kind.CCN_UPCALL_FINAL:
           	// Marshal.FreeHGlobal(selfp); // this again, will make Unity crash
            break;

        case Upcall.ccn_upcall_kind.CCN_UPCALL_INTEREST:
            // print ("put content handle: " + h + ", content: " + Data.value);
            int res = PutContent(h, Data);
            if(res >= 0)
            {
                ret = Upcall.ccn_upcall_res.CCN_UPCALL_RESULT_INTEREST_CONSUMED;
                Egal.ccn_set_run_timeout(h, 0);
            }
            else
                print("put content error");

            break;

        case Upcall.ccn_upcall_kind.CCN_UPCALL_CONTENT:
            // repo first returns a content...
            // this is info of the repo...
            break;

        default:
            ret = Upcall.ccn_upcall_res.CCN_UPCALL_RESULT_ERR;
            break;
        }

        // print ("ref count: " + Selfp.refcount);
        // print ("WriteCallback returnning..." + ret);

        return ret;
    }
コード例 #4
0
ファイル: Egal.cs プロジェクト: ZeningQu/NDNMOG
 // GetInfo()
 // Marshal ccn_upcall_info
 public static ccn_upcall_info GetInfo(IntPtr info)
 {
     ccn_upcall_info Info = new Egal.ccn_upcall_info();
     Info = (ccn_upcall_info)Marshal.PtrToStructure(info, typeof(ccn_upcall_info));
     return Info;
 }