1from __future__ import print_function
2
3import os
4import sys
5import grpc
6import flatbuffers
7
8from concurrent import futures
9
10sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'tests'))
11import MyGame.Example.Monster as Monster
12import MyGame.Example.Stat as Stat
13import MyGame.Example.Vec3 as Vec3
14import MyGame.Example.Test as Test
15import MyGame.Example.monster_test_grpc_fb as monster_grpc_fb
16
17
18test_stat_id = "test_stat_id"
19test_stat_val = 8
20test_stat_count = 1
21
22test_monster_name1 = "test_monster_name1"
23test_monster_name2 = "test_monster_name2"
24test_string = "test_string"
25test_color = 2
26test_X = 3.0
27test_Y = 2.0
28test_Z = 6.0
29test_test1 = 4.0
30test_a = 8
31test_b = 5
32test_hp = 67
33test_inventory = [1, 1, 2, 3, 5, 8]
34test_testtype = 4
35
36test_monsters_name_retrieve = ["big_monster", "small_monster"]
37test_no_of_monsters = 2
38
39
40class MonsterStorage(monster_grpc_fb.MonsterStorageServicer):
41
42 def Store(self, request, context):
43
44 m = Monster.Monster().GetRootAsMonster(request, 0)
45
46 assert m.Name().decode("utf-8") == test_monster_name1
47
48 assert m.Pos().X() == test_X
49 assert m.Pos().Y() == test_Y
50 assert m.Pos().Z() == test_Z
51 assert m.Pos().Test1() == test_test1
52 assert m.Pos().Test2() == test_color
53 test3 = Test.Test()
54 assert m.Pos().Test3(test3).A() == test_a
55 assert m.Pos().Test3(test3).B() == test_b
56
57 assert m.Hp() == test_hp
58
59 assert m.Color() == test_color
60
61 assert m.InventoryLength() == len(test_inventory)
62 for i in range(0, len(test_inventory)):
63 assert m.Inventory(i) == test_inventory[len(test_inventory)-i -1]
64
65 assert m.TestType() == test_testtype
66
67 assert m.Test() is not None
68 table = m.Test()
69
70 m2 = Monster.Monster()
71 m2.Init(table.Bytes, table.Pos)
72 assert m2.Name().decode("utf-8") == test_monster_name2
73
74 m3 = m.Enemy()
75 assert m3.Name().decode("utf-8") == test_monster_name2
76
77 assert m.Testarrayofstring(0).decode("utf-8") == test_string
78
79 b = flatbuffers.Builder(0)
80 i = b.CreateString(test_stat_id)
81 Stat.StatStart(b)
82 Stat.StatAddId(b, i)
83 Stat.StatAddVal(b, test_stat_val)
84 Stat.StatAddCount(b, test_stat_count)
85 b.Finish(Stat.StatEnd(b))
86 return bytes(b.Output())
87
88 def Retrieve(self, request, context):
89
90 s = Stat.Stat().GetRootAsStat(request, 0)
91
92 no_of_monsters = test_no_of_monsters
93 for i in range(0, no_of_monsters):
94 b = flatbuffers.Builder(0)
95 i = b.CreateString(test_monsters_name_retrieve[i])
96 Monster.MonsterStart(b)
97 Monster.MonsterAddName(b, i)
98 b.Finish(Monster.MonsterEnd(b))
99 yield bytes(b.Output())
100
101
102def serve():
103
104 server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
105 monster_grpc_fb.add_MonsterStorageServicer_to_server(MonsterStorage(), server)
106 server.add_insecure_port('[::]:50051')
107
108 server.start()
109
110 run()
111
112
113def run():
114
115 channel = grpc.insecure_channel('127.0.0.1:50051')
116 stub = monster_grpc_fb.MonsterStorageStub(channel)
117
118 b = flatbuffers.Builder(0)
119 name2 = b.CreateString(test_monster_name2)
120 name1 = b.CreateString(test_monster_name1)
121 Monster.MonsterStart(b)
122 Monster.MonsterAddName(b, name2)
123 monster2 = Monster.MonsterEnd(b)
124 test1 = b.CreateString(test_string)
125
126 Monster.MonsterStartInventoryVector(b, len(test_inventory))
127 for i in range(0, len(test_inventory)):
128 b.PrependByte(test_inventory[i])
129 inv = b.EndVector()
130
131 Monster.MonsterStartTest4Vector(b, 2)
132 Test.CreateTest(b, 10, 20)
133 Test.CreateTest(b, 30, 40)
134 test4 = b.EndVector()
135
136 Monster.MonsterStartTestarrayofstringVector(b, 1)
137 b.PrependUOffsetTRelative(test1)
138 test_array_of_string = b.EndVector()
139
140 Monster.MonsterStart(b)
141
142 Monster.MonsterAddHp(b, test_hp)
143 Monster.MonsterAddName(b, name1)
144 Monster.MonsterAddColor(b, test_color)
145 pos = Vec3.CreateVec3(b, test_X, test_Y, test_Z, test_test1, test_color, test_a, test_b)
146 Monster.MonsterAddPos(b, pos)
147 Monster.MonsterAddInventory(b, inv)
148 Monster.MonsterAddTestType(b, test_testtype)
149 Monster.MonsterAddTest(b, monster2)
150 Monster.MonsterAddTest4(b, test4)
151 Monster.MonsterAddEnemy(b, monster2)
152 Monster.MonsterAddTestarrayofstring(b, test_array_of_string)
153 monster = Monster.MonsterEnd(b)
154
155 b.Finish(monster)
156
157 stat_response = stub.Store(bytes(b.Output()))
158
159 s = Stat.Stat().GetRootAsStat(stat_response, 0)
160
161 assert s.Id().decode("utf-8") == test_stat_id
162 assert s.Val() == test_stat_val
163 assert s.Count() == test_stat_count
164
165 monster_reponses = stub.Retrieve(stat_response)
166 count = 0
167 for monster_reponse in monster_reponses:
168 m = Monster.Monster().GetRootAsMonster(monster_reponse, 0)
169 assert m.Name().decode("utf-8") == test_monsters_name_retrieve[count]
170 count = count + 1
171
172
173if __name__ == '__main__':
174 serve()
View as plain text