annotate Renderer/Test/aquarium.cc @ 879:596009c66065

[Renderer/Test/aquarium] sync object
author kazz <kazz@cr.ie.u-ryukyu.ac.jp>
date Tue, 06 Jul 2010 19:25:52 +0900
parents 65f0c4c7f381
children f4bdf2b0d7da
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
858
fdc24fbeaedc Renderer/Test/aquarium init
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 #include <stdio.h>
fdc24fbeaedc Renderer/Test/aquarium init
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 #include <string.h>
875
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
3 #include <fcntl.h>
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
4 #include <sys/types.h>
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
5 #include <sys/mman.h>
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
6 #include <sys/stat.h>
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
7 #include <unistd.h>
858
fdc24fbeaedc Renderer/Test/aquarium init
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 #include "SceneGraphRoot.h"
fdc24fbeaedc Renderer/Test/aquarium init
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 #include "lindaapi.h"
fdc24fbeaedc Renderer/Test/aquarium init
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 #include "aquarium.h"
868
58b4fb8ad77c [aquarium]: update screen scope on linda with protobuf
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 863
diff changeset
11 #include "aquarium.pb.h"
858
fdc24fbeaedc Renderer/Test/aquarium init
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
12
863
c26aa4e52258 get serial id
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 859
diff changeset
13 #define GET_SERIAL_ID 65535
c26aa4e52258 get serial id
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 859
diff changeset
14
875
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
15 int aquarium::last_player_id = 1;
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
16
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
17 Viewer *aquarium::sgroot;
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
18 SceneGraphPtr aquarium::parent;
859
e39f320c4411 linda connection init
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 858
diff changeset
19 linda_t aquarium::linda_addr = { "localhost", 10000 };
e39f320c4411 linda connection init
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 858
diff changeset
20 int aquarium::linda;
863
c26aa4e52258 get serial id
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 859
diff changeset
21 int aquarium::serial_id;
868
58b4fb8ad77c [aquarium]: update screen scope on linda with protobuf
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 863
diff changeset
22 int aquarium::width;
58b4fb8ad77c [aquarium]: update screen scope on linda with protobuf
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 863
diff changeset
23 int aquarium::start_x;
875
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
24 char *aquarium::xml_file_name;
863
c26aa4e52258 get serial id
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 859
diff changeset
25
859
e39f320c4411 linda connection init
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 858
diff changeset
26 const char *usr_help_str = "Usage: ./aquarium -linda LINDA_SERVER_NAME\n";
858
fdc24fbeaedc Renderer/Test/aquarium init
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 void TMend(TaskManager *manager);
fdc24fbeaedc Renderer/Test/aquarium init
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
28
fdc24fbeaedc Renderer/Test/aquarium init
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 extern void task_initialize();
fdc24fbeaedc Renderer/Test/aquarium init
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 extern int init(TaskManager *manager, int argc, char *argv[]);
fdc24fbeaedc Renderer/Test/aquarium init
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 extern Application *
fdc24fbeaedc Renderer/Test/aquarium init
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 application() {
fdc24fbeaedc Renderer/Test/aquarium init
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 return new aquarium();
fdc24fbeaedc Renderer/Test/aquarium init
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 }
fdc24fbeaedc Renderer/Test/aquarium init
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
35
875
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
36 static void
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
37 null_move(SceneGraphPtr node, void *sgroot_, int screen_w, int screen_h)
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
38 {
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
39 }
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
40 static void
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
41 null_collision(SceneGraphPtr node, void *sgroot_, int screen_w, int screen_h, SceneGraphPtr tree)
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
42 {
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
43 }
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
44
879
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
45 void
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
46 aquarium::set_position(SceneGraphPtr node, unsigned char *reply) {
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
47 aqua::Position *pos = new aqua::Position();
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
48 pos->ParseFromArray(reply + LINDA_HEADER_SIZE, psx_get_datalength(reply));
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
49 node->xyz[0] = pos->x();
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
50 node->xyz[1] = pos->y();
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
51 delete pos;
875
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
52 }
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
53
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
54 static void
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
55 update_position_move(SceneGraphPtr node, void *sgroot_, int screen_w, int screen_h)
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
56 {
879
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
57 //SceneGraphRoot *sgroot = (SceneGraphRoot *)sgroot_;
877
65f0c4c7f381 [Renderer/Test/aquarium] changed euc to utf8
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 875
diff changeset
58 // LindaServerから座標データを取得してオブジェクトに反映させる。
875
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
59 if (!node->resend_flag || node->seq_rd != node->seq) {
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
60 unsigned char *reply_rd = psx_reply(node->seq_rd);
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
61 if (reply_rd != NULL) {
879
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
62 aquarium::set_position(node, reply_rd);
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
63 psx_free(reply_rd);
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
64 printf("rd get\n");
875
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
65 return;
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
66 }
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
67 }
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
68 unsigned char *reply = psx_reply(node->seq);
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
69 if (reply != NULL) {
879
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
70 aquarium::set_position(node, reply);
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
71 psx_free(reply);
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
72 node->seq = psx_wait_rd(aquarium::linda, node->id * 10 + 1);
875
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
73 node->resend_flag = true;
879
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
74 printf("wait_rd get\n");
875
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
75 } else if (node->resend_flag) {
879
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
76 node->seq_rd = psx_rd(aquarium::linda, node->id * 10 + 1);
875
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
77 node->resend_flag = false;
879
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
78 printf("re rd get\n");
875
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
79 }
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
80 }
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
81
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
82 SceneGraphPtr
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
83 create_sg(Viewer *viewer, SceneGraphPtr parent, unsigned char *data, int len, int serial_id)
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
84 {
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
85 SceneGraphPtr child = viewer->sgroot->createSceneGraph();
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
86 parent->addChild(child);
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
87 viewer->sgroot->createFromXMLmemory(viewer->sgroot->tmanager, child, (char *)data, len);
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
88 child->set_move_collision(update_position_move, null_collision); // TODO:
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
89 child->id = serial_id;
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
90 child->seq = psx_wait_rd(aquarium::linda, serial_id * 10 + 1);
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
91 child->seq_rd = psx_rd(aquarium::linda, serial_id * 10 + 1);
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
92 child->resend_flag = false;
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
93 return child;
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
94 }
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
95
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
96 static void
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
97 check_new_player_move(SceneGraphPtr node, void *sgroot_, int screen_w, int screen_h)
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
98 {
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
99 unsigned char *reply_rd = psx_reply(node->seq_rd);
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
100 if (reply_rd != NULL) {
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
101 unsigned char *xml_data = reply_rd + LINDA_HEADER_SIZE;
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
102 int xml_len = psx_get_datalength(reply_rd);
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
103 create_sg(aquarium::sgroot, node, xml_data, xml_len, aquarium::last_player_id);
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
104 psx_free(reply_rd);
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
105 aquarium::last_player_id++;
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
106 int tuple_id = aquarium::last_player_id * 10;
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
107 aquarium::parent->seq_rd = psx_rd(aquarium::linda, tuple_id);
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
108 }
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
109 // printf("rd id: %d\n", aquarium::last_player_id);
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
110 }
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
111
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
112 void *
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
113 file_map(const char *filename, int *size) {
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
114 int fd;
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
115 void *addr;
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
116 struct stat sb;
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
117
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
118 if ((fd = open(filename, O_RDONLY)) == -1) {
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
119 fprintf(stderr, "Can't open %s\n", filename);
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
120 perror(NULL);
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
121 }
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
122 if (fstat(fd, &sb) == -1) {
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
123 fprintf(stderr, "Can't fstat %s\n", filename);
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
124 perror(NULL);
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
125 }
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
126 *size = sb.st_size;
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
127 addr = mmap(NULL, *size, PROT_READ, MAP_PRIVATE, fd, 0);
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
128 if (addr == MAP_FAILED) {
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
129 perror("mmap error\n");
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
130 exit(EXIT_FAILURE);
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
131 }
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
132 close(fd);
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
133
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
134 return addr;
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
135 }
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
136
879
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
137 void callback_free(unsigned char *tuple, void *arg) {
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
138 psx_free(tuple);
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
139 }
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
140
875
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
141 void
879
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
142 aquarium::send_position(SceneGraphPtr node) {
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
143 int pos_id = serial_id * 10 + 1;
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
144 psx_callback_in(linda, pos_id, callback_free, NULL);
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
145 aqua::Position *pos = new aqua::Position();
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
146 pos->set_x(node->xyz[0]);
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
147 pos->set_y(node->xyz[1]);
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
148 int size = pos->ByteSize();
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
149 unsigned char *msg = (unsigned char *) sgroot->manager->allocate(sizeof(char) * size);
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
150 pos->SerializeToArray(msg, size); // 更新したデータを再度シリアライズ
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
151 delete pos;
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
152 psx_out(linda, pos_id, msg, size);
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
153 }
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
154
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
155 void
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
156 my_move(SceneGraphPtr node, void *sgroot_, int w, int h)
875
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
157 {
879
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
158 SceneGraphRoot *sgroot = (SceneGraphRoot *)sgroot_;
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
159 Pad *pad = sgroot->getController();
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
160 int flag = 0;
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
161 if (pad->right.isHold() || pad->left.isHold()) {
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
162 if (pad->right.isHold()) {
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
163 node->xyz[0] += 5.0f;
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
164 flag = 1;
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
165 } else if (pad->left.isHold()) {
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
166 node->xyz[0] -= 5.0f;
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
167 flag = 1;
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
168 }
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
169 }
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
170
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
171 if (pad->down.isHold() || pad->up.isHold() ) {
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
172 if (pad->down.isHold()) {
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
173 node->xyz[1] += 5.0f;
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
174 flag = 1;
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
175 } else if (pad->up.isHold()) {
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
176 node->xyz[1] -= 5.0f;
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
177 flag = 1;
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
178 }
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
179 }
875
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
180
879
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
181 /* ここで座標を送信 */
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
182 if (flag || node->resend_flag) {
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
183 aquarium::send_position(node);
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
184 }
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
185 }
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
186
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
187 void
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
188 aquarium::create_my_sg(Viewer *viewer, SceneGraphPtr parent, int screen_w, int screen_h)
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
189 {
875
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
190 int size;
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
191 void *addr = file_map(xml_file_name, &size);
879
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
192 SceneGraphPtr sgp = viewer->createSceneGraph();
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
193 viewer->createFromXMLmemory(sgp, (char *)addr, size);
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
194 sgp->set_move_collision(my_move, null_collision); // TODO: input from the controller
875
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
195
879
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
196 parent->addChild(sgp);
875
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
197
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
198 int xml_id = serial_id * 10;
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
199 psx_out(linda, xml_id, (unsigned char *)addr, size);
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
200 int pos_id = serial_id * 10 + 1;
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
201
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
202 aqua::Position *pos = new aqua::Position();
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
203 pos->set_x(0.0f);
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
204 pos->set_y(0.0f);
879
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
205 unsigned char *msg = (unsigned char *) viewer->manager->allocate(sizeof(unsigned char *) * size);
875
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
206 pos->SerializeToArray(msg, size);
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
207 psx_out(linda, pos_id, (unsigned char *)msg, pos->ByteSize());
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
208 delete pos;
879
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
209 sgp->seq = 0;
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
210 sgp->resend_flag = 0;
875
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
211 }
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
212
858
fdc24fbeaedc Renderer/Test/aquarium init
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
213 MainLoopPtr
fdc24fbeaedc Renderer/Test/aquarium init
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
214 aquarium::init(Viewer *sgroot, int screen_w, int screen_h)
fdc24fbeaedc Renderer/Test/aquarium init
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
215 {
875
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
216 this->sgroot = sgroot;
868
58b4fb8ad77c [aquarium]: update screen scope on linda with protobuf
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 863
diff changeset
217 width = screen_w;
877
65f0c4c7f381 [Renderer/Test/aquarium] changed euc to utf8
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 875
diff changeset
218 linda_connect(); // 接続に合わせて serial_id も取得
868
58b4fb8ad77c [aquarium]: update screen scope on linda with protobuf
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 863
diff changeset
219 update_screen_scope();
875
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
220 parent = sgroot->createSceneGraph();
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
221 parent->set_move_collision(check_new_player_move, null_collision);
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
222
879
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
223 create_my_sg(sgroot, parent, screen_w, screen_h);
875
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
224 if (serial_id == last_player_id)
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
225 last_player_id++;
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
226 int tuple_id = aquarium::last_player_id * 10;
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
227 parent->seq_rd = psx_rd(linda, tuple_id);
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
228 sgroot->setSceneData(parent);
858
fdc24fbeaedc Renderer/Test/aquarium init
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
229 return sgroot;
fdc24fbeaedc Renderer/Test/aquarium init
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
230 }
fdc24fbeaedc Renderer/Test/aquarium init
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
231
859
e39f320c4411 linda connection init
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 858
diff changeset
232 void
e39f320c4411 linda connection init
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 858
diff changeset
233 aquarium::linda_connect() {
877
65f0c4c7f381 [Renderer/Test/aquarium] changed euc to utf8
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 875
diff changeset
234 init_linda(); // セレクタの初期化
859
e39f320c4411 linda connection init
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 858
diff changeset
235 linda = open_linda_java(linda_addr.hostname, linda_addr.port);
877
65f0c4c7f381 [Renderer/Test/aquarium] changed euc to utf8
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 875
diff changeset
236 // serial_id の取得
863
c26aa4e52258 get serial id
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 859
diff changeset
237 int seq = psx_in(linda, GET_SERIAL_ID);
c26aa4e52258 get serial id
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 859
diff changeset
238 unsigned char *data = NULL;
c26aa4e52258 get serial id
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 859
diff changeset
239 do {
c26aa4e52258 get serial id
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 859
diff changeset
240 psx_sync_n();
c26aa4e52258 get serial id
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 859
diff changeset
241 data = psx_reply(seq);
c26aa4e52258 get serial id
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 859
diff changeset
242 } while (data == NULL);
879
596009c66065 [Renderer/Test/aquarium] sync object
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 877
diff changeset
243 data[LINDA_HEADER_SIZE + psx_get_datalength(data)] = '\0';
863
c26aa4e52258 get serial id
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 859
diff changeset
244 serial_id = atoi((char *)data + LINDA_HEADER_SIZE);
868
58b4fb8ad77c [aquarium]: update screen scope on linda with protobuf
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 863
diff changeset
245 psx_free(data);
863
c26aa4e52258 get serial id
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 859
diff changeset
246 printf("Get serial_id: %d\n", serial_id);
859
e39f320c4411 linda connection init
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 858
diff changeset
247 }
858
fdc24fbeaedc Renderer/Test/aquarium init
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
248
868
58b4fb8ad77c [aquarium]: update screen scope on linda with protobuf
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 863
diff changeset
249 void
58b4fb8ad77c [aquarium]: update screen scope on linda with protobuf
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 863
diff changeset
250 aquarium::update_screen_scope() {
58b4fb8ad77c [aquarium]: update screen scope on linda with protobuf
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 863
diff changeset
251 int seq = psx_in(linda, 1);
58b4fb8ad77c [aquarium]: update screen scope on linda with protobuf
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 863
diff changeset
252 unsigned char *data = NULL;
58b4fb8ad77c [aquarium]: update screen scope on linda with protobuf
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 863
diff changeset
253 do {
58b4fb8ad77c [aquarium]: update screen scope on linda with protobuf
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 863
diff changeset
254 psx_sync_n();
58b4fb8ad77c [aquarium]: update screen scope on linda with protobuf
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 863
diff changeset
255 data = psx_reply(seq);
58b4fb8ad77c [aquarium]: update screen scope on linda with protobuf
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 863
diff changeset
256 } while (data == NULL);
58b4fb8ad77c [aquarium]: update screen scope on linda with protobuf
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 863
diff changeset
257 aqua::Width *w = new aqua::Width();
58b4fb8ad77c [aquarium]: update screen scope on linda with protobuf
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 863
diff changeset
258 w->ParseFromArray(data + LINDA_HEADER_SIZE, *(int *)(data + LINDA_DATA_LENGTH_OFFSET));
877
65f0c4c7f381 [Renderer/Test/aquarium] changed euc to utf8
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 875
diff changeset
259 start_x = w->width(); // 現在の全長を取得
65f0c4c7f381 [Renderer/Test/aquarium] changed euc to utf8
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 875
diff changeset
260 w->set_width(start_x + width); // 自分の横幅を足す
868
58b4fb8ad77c [aquarium]: update screen scope on linda with protobuf
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 863
diff changeset
261 int size = w->ByteSize();
875
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
262 unsigned char *msg = (unsigned char *) sgroot->manager->allocate(sizeof(char) * size);
877
65f0c4c7f381 [Renderer/Test/aquarium] changed euc to utf8
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 875
diff changeset
263 w->SerializeToArray(msg, size); // 更新したデータを再度シリアライズ
875
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
264 delete w;
868
58b4fb8ad77c [aquarium]: update screen scope on linda with protobuf
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 863
diff changeset
265 psx_out(linda, 1, msg, size);
58b4fb8ad77c [aquarium]: update screen scope on linda with protobuf
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 863
diff changeset
266 psx_sync_n();
58b4fb8ad77c [aquarium]: update screen scope on linda with protobuf
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 863
diff changeset
267 printf("start_x = %d, width = %d\n", start_x, width);
58b4fb8ad77c [aquarium]: update screen scope on linda with protobuf
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 863
diff changeset
268 }
58b4fb8ad77c [aquarium]: update screen scope on linda with protobuf
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 863
diff changeset
269
858
fdc24fbeaedc Renderer/Test/aquarium init
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
270 int
fdc24fbeaedc Renderer/Test/aquarium init
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
271 TMmain(TaskManager *manager, int argc, char *argv[])
fdc24fbeaedc Renderer/Test/aquarium init
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
272 {
fdc24fbeaedc Renderer/Test/aquarium init
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
273 task_initialize();
fdc24fbeaedc Renderer/Test/aquarium init
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
274 manager->set_TMend(TMend);
fdc24fbeaedc Renderer/Test/aquarium init
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
275
fdc24fbeaedc Renderer/Test/aquarium init
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
276 for (int i = 0; i < argc; i++) {
fdc24fbeaedc Renderer/Test/aquarium init
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
277 if (strcmp(argv[i],"-linda") == 0 && i + 1 <= argc) {
859
e39f320c4411 linda connection init
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 858
diff changeset
278 aquarium::linda_addr.hostname = argv[i+1];
e39f320c4411 linda connection init
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 858
diff changeset
279 } else if (strcmp(argv[i],"-port") == 0 && i + 1 <= argc) {
e39f320c4411 linda connection init
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 858
diff changeset
280 aquarium::linda_addr.port = atoi(argv[i+1]);
875
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
281 } else if (strcmp(argv[i],"-xml") == 0 && i + 1 <= argc) {
157f2ffeb526 [Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 868
diff changeset
282 aquarium::xml_file_name = argv[i+1];
859
e39f320c4411 linda connection init
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 858
diff changeset
283 }
858
fdc24fbeaedc Renderer/Test/aquarium init
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
284 }
fdc24fbeaedc Renderer/Test/aquarium init
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
285 return init(manager, argc, argv);
fdc24fbeaedc Renderer/Test/aquarium init
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
286 }
fdc24fbeaedc Renderer/Test/aquarium init
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
287
fdc24fbeaedc Renderer/Test/aquarium init
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
288 void
fdc24fbeaedc Renderer/Test/aquarium init
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
289 TMend(TaskManager *manager)
fdc24fbeaedc Renderer/Test/aquarium init
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
290 {
fdc24fbeaedc Renderer/Test/aquarium init
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
291 printf("aquarium end\n");
fdc24fbeaedc Renderer/Test/aquarium init
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
292 }
fdc24fbeaedc Renderer/Test/aquarium init
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
293
fdc24fbeaedc Renderer/Test/aquarium init
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
294 /* end */