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(len(test_inventory)) 130 131 Monster.MonsterStartTest4Vector(b, 2) 132 Test.CreateTest(b, 10, 20) 133 Test.CreateTest(b, 30, 40) 134 test4 = b.EndVector(2) 135 136 Monster.MonsterStartTestarrayofstringVector(b, 1) 137 b.PrependUOffsetTRelative(test1) 138 test_array_of_string = b.EndVector(1) 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() 175