Mercurial > hg > Members > kono > Cerium
annotate Renderer/Test/aquarium.cc @ 875:157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
author | kazz <kazz@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 06 Jul 2010 09:51:35 +0900 |
parents | 58b4fb8ad77c |
children | 65f0c4c7f381 |
rev | line source |
---|---|
858 | 1 #include <stdio.h> |
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 | 8 #include "SceneGraphRoot.h" |
9 #include "lindaapi.h" | |
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 | 12 |
863 | 13 #define GET_SERIAL_ID 65535 |
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 | 19 linda_t aquarium::linda_addr = { "localhost", 10000 }; |
20 int aquarium::linda; | |
863 | 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 | 25 |
859 | 26 const char *usr_help_str = "Usage: ./aquarium -linda LINDA_SERVER_NAME\n"; |
858 | 27 void TMend(TaskManager *manager); |
28 | |
29 extern void task_initialize(); | |
30 extern int init(TaskManager *manager, int argc, char *argv[]); | |
31 extern Application * | |
32 application() { | |
33 return new aquarium(); | |
34 } | |
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 |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
45 static void |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
46 set_position(SceneGraphPtr node, unsigned char *reply) { |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
47 } |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
48 |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
49 static void |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
50 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
|
51 { |
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 SceneGraphRoot *sgroot = (SceneGraphRoot *)sgroot_; |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
54 // LindaServerから座標データを取得してオブジェクトに反映させる。 |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
55 |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
56 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
|
57 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
|
58 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
|
59 set_position(node, reply_rd); |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
60 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
|
61 return; |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
62 } |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
63 } |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
64 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
|
65 if (reply != NULL) { |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
66 set_position(node, reply); |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
67 free(reply); |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
68 node->seq = psx_wait_rd(sgroot->tid, node->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
|
69 node->resend_flag = true; |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
70 } else if (node->resend_flag) { |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
71 node->seq_rd = psx_rd(sgroot->tid, node->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
|
72 node->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
|
73 } |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
74 } |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
75 |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
76 SceneGraphPtr |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
77 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
|
78 { |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
79 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
|
80 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
|
81 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
|
82 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
|
83 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
|
84 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
|
85 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
|
86 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
|
87 return child; |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
88 } |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
89 |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
90 |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
91 static void |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
92 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
|
93 { |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
94 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
|
95 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
|
96 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
|
97 //int xml_len = *(int *)(reply_rd + LINDA_DATA_LENGTH_OFFSET); |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
98 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
|
99 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
|
100 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
|
101 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
|
102 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
|
103 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
|
104 } |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
105 // 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
|
106 } |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
107 |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
108 void * |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
109 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
|
110 int fd; |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
111 void *addr; |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
112 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
|
113 |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
114 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
|
115 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
|
116 perror(NULL); |
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 (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
|
119 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
|
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 *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
|
123 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
|
124 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
|
125 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
|
126 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
|
127 } |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
128 close(fd); |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
129 |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
130 return addr; |
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 |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
133 void |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
134 aquarium::create_my_sg(Viewer *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
|
135 { |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
136 SceneGraphPtr root = sgroot->createSceneGraph(); |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
137 root->set_move_collision(null_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
|
138 |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
139 int size; |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
140 void *addr = file_map(xml_file_name, &size); |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
141 SceneGraphPtr sgp = sgroot->createSceneGraph(); |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
142 sgroot->createFromXMLmemory(sgp, (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
|
143 sgp->set_move_collision(null_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
|
144 |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
145 root->addChild(sgp); |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
146 |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
147 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
|
148 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
|
149 printf("%d", size); |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
150 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
|
151 |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
152 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
|
153 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
|
154 pos->set_y(0.0f); |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
155 unsigned char *msg = (unsigned char *) sgroot->manager->allocate(sizeof(unsigned char *) * size); |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
156 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
|
157 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
|
158 delete pos; |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
159 root->seq = 0; |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
160 root->resend_flag = 0; |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
161 } |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
162 |
858 | 163 MainLoopPtr |
164 aquarium::init(Viewer *sgroot, int screen_w, int screen_h) | |
165 { | |
875
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
166 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
|
167 width = screen_w; |
875
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
168 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
|
169 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
|
170 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
|
171 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
|
172 |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
173 create_my_sg(sgroot, screen_w, screen_h); |
157f2ffeb526
[Renderer/Test/aquarium] sendable xml object by psx_out()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
868
diff
changeset
|
174 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
|
175 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
|
176 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
|
177 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
|
178 sgroot->setSceneData(parent); |
858 | 179 return sgroot; |
180 } | |
181 | |
859 | 182 void |
183 aquarium::linda_connect() { | |
184 init_linda(); // セレクタの初期化 | |
185 linda = open_linda_java(linda_addr.hostname, linda_addr.port); | |
863 | 186 // serial_id の取得 |
187 int seq = psx_in(linda, GET_SERIAL_ID); | |
188 unsigned char *data = NULL; | |
189 do { | |
190 psx_sync_n(); | |
191 data = psx_reply(seq); | |
192 } while (data == NULL); | |
193 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
|
194 psx_free(data); |
863 | 195 printf("Get serial_id: %d\n", serial_id); |
859 | 196 } |
858 | 197 |
868
58b4fb8ad77c
[aquarium]: update screen scope on linda with protobuf
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
863
diff
changeset
|
198 void |
58b4fb8ad77c
[aquarium]: update screen scope on linda with protobuf
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
863
diff
changeset
|
199 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
|
200 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
|
201 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
|
202 do { |
58b4fb8ad77c
[aquarium]: update screen scope on linda with protobuf
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
863
diff
changeset
|
203 psx_sync_n(); |
58b4fb8ad77c
[aquarium]: update screen scope on linda with protobuf
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
863
diff
changeset
|
204 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
|
205 } while (data == NULL); |
58b4fb8ad77c
[aquarium]: update screen scope on linda with protobuf
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
863
diff
changeset
|
206 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
|
207 w->ParseFromArray(data + LINDA_HEADER_SIZE, *(int *)(data + LINDA_DATA_LENGTH_OFFSET)); |
58b4fb8ad77c
[aquarium]: update screen scope on linda with protobuf
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
863
diff
changeset
|
208 start_x = w->width(); // 現在の全長を取得 |
58b4fb8ad77c
[aquarium]: update screen scope on linda with protobuf
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
863
diff
changeset
|
209 w->set_width(start_x + width); // 自分の横幅を足す |
58b4fb8ad77c
[aquarium]: update screen scope on linda with protobuf
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
863
diff
changeset
|
210 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
|
211 unsigned char *msg = (unsigned char *) sgroot->manager->allocate(sizeof(char) * size); |
868
58b4fb8ad77c
[aquarium]: update screen scope on linda with protobuf
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
863
diff
changeset
|
212 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
|
213 delete w; |
868
58b4fb8ad77c
[aquarium]: update screen scope on linda with protobuf
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
863
diff
changeset
|
214 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
|
215 psx_sync_n(); |
58b4fb8ad77c
[aquarium]: update screen scope on linda with protobuf
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
863
diff
changeset
|
216 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
|
217 } |
58b4fb8ad77c
[aquarium]: update screen scope on linda with protobuf
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
863
diff
changeset
|
218 |
858 | 219 int |
220 TMmain(TaskManager *manager, int argc, char *argv[]) | |
221 { | |
222 task_initialize(); | |
223 manager->set_TMend(TMend); | |
224 | |
225 for (int i = 0; i < argc; i++) { | |
226 if (strcmp(argv[i],"-linda") == 0 && i + 1 <= argc) { | |
859 | 227 aquarium::linda_addr.hostname = argv[i+1]; |
228 } else if (strcmp(argv[i],"-port") == 0 && i + 1 <= argc) { | |
229 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
|
230 } 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
|
231 aquarium::xml_file_name = argv[i+1]; |
859 | 232 } |
858 | 233 } |
234 return init(manager, argc, argv); | |
235 } | |
236 | |
237 void | |
238 TMend(TaskManager *manager) | |
239 { | |
240 printf("aquarium end\n"); | |
241 } | |
242 | |
243 /* end */ |