]> rtime.felk.cvut.cz Git - orte.git/blob - orte/libjorte/temp.c
improved JAVA interface from Lukas, update makefiles from msvc from Jan
[orte.git] / orte / libjorte / temp.c
1
2   do
3   {
4     // get class MessageData
5     cls_msg = (*env)->GetObjectClass(env, obj_msg);
6     if(cls_msg == 0)
7     {
8       #ifdef TEST_STAGE
9          printf(":!c: cls_msg = NULL \n");
10       #endif
11       break;
12     }
13     //
14     if (obj_bb == 0)
15     {
16       // get buff's fieldID
17       fid = (*env)->GetFieldID(env,
18                                cls_msg,
19                                "buffer",
20                                "Ljava/nio/ByteBuffer;");
21       if (fid == NULL)
22       {
23         #ifdef TEST_STAGE
24            printf(":!c: fid = NULL \n");
25         #endif
26         break;
27       }
28       // get buff's object
29       obj_bb = (*env)->GetObjectField(env, obj_msg, fid);
30       if(obj_bb == NULL)
31       {
32         #ifdef TEST_STAGE
33            printf(":!c: obj_bb = NULL \n");
34         #endif
35         break;
36       }
37       // create global reference
38       callback_cont->bbuff = (*env)->NewGlobalRef(env, obj_bb);
39       if (callback_cont->bbuff == 0)
40       {
41         #ifdef TEST_STAGE
42            printf(":!c: callback_cont->bbuff = NULL \n");
43         #endif
44         break;
45       }
46       #ifdef TEST_STAGE
47          printf(":c: global reference created.. \n");
48       #endif
49     }
50     // get class ByteBuffer
51     cls_bb = (*env)->GetObjectClass(env, obj_bb);
52     if(cls_bb == 0)
53     {
54       #ifdef TEST_STAGE
55          printf(":!c: cls_bb = NULL \n");
56       #endif
57       break;
58     }
59     // get buff's length
60     mid = (*env)->GetMethodID(env,
61                               cls_msg,
62                               "getMaxDataLength",
63                               "()I");
64     if(mid == 0)
65     {
66       #ifdef TEST_STAGE
67          printf(":!c: mid = NULL \n");
68       #endif
69       break;
70     }
71     buff_length = (*env)->CallIntMethod(env,
72                                         obj_msg,
73                                         mid);
74
75     // rewind buffer (needs cls Buffer not ByteBuffer!)
76     // get class Buffer
77     cls_tmp = (*env)->FindClass(env, "java/nio/Buffer");
78     if(cls_tmp == 0)
79     {
80       #ifdef TEST_STAGE
81          printf(":!c: cls_tmp = NULL \n");
82       #endif
83       break;
84     }
85     // methodID
86     mid = (*env)->GetMethodID(env,
87                             cls_tmp,
88                             "rewind",
89                             "()Ljava/nio/Buffer;");
90     if(mid == 0)
91     {
92       #ifdef TEST_STAGE
93          printf(":!c: mid = NULL \n");
94       #endif
95       break;
96     }
97     // call method
98     (*env)->CallObjectMethod(env,
99                              obj_bb,
100                              mid);
101     #ifdef TEST_STAGE
102        printf(":c: buffer successfully rewind..\n");
103     #endif
104     // methodID
105     mid = (*env)->GetMethodID(env,
106                               cls_bb,
107                               "put",
108                               "(B)Ljava/nio/ByteBuffer;");
109     if(mid == 0)
110     {
111       #ifdef TEST_STAGE
112          printf(":!c: mid = NULL \n");
113       #endif
114       break;
115     }
116     // copy the bytes from C to JAVA buffer
117     // //////////////////////////////////////////////////////////
118     buffer = (char *) vinstance;
119     //
120     for(i = 0; i < buff_length; i++)
121     {
122       #ifdef TEST_STAGE
123         printf(":c: i = %d kopirovany znak = %c [%d] \n",
124                i,*buffer,*buffer);
125       #endif
126       // call method
127       obj_bb = (*env)->CallObjectMethod(env,
128                                         obj_bb,
129                                         mid,
130                                         *buffer);
131       // next char
132       buffer++;
133     }
134     // //////////////////////////////////////////////////////////
135     // methodID
136     mid = (*env)->GetMethodID(env,
137                               cls_msg,
138                               "read",
139                               "()V");
140     if(mid == 0)
141     {
142       #ifdef TEST_STAGE
143          printf(":!c: mid = NULL \n");
144       #endif
145       break;
146     }
147     // call method
148     (*env)->CallVoidMethod(env,
149                            obj_msg,
150                            mid);