| from __future__ import print_function |
| |
| import os |
| import sys |
| import grpc |
| import flatbuffers |
| |
| from concurrent import futures |
| |
| sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'tests')) |
| import MyGame.Example.Monster as Monster |
| import MyGame.Example.Stat as Stat |
| import MyGame.Example.Vec3 as Vec3 |
| import MyGame.Example.Test as Test |
| import MyGame.Example.monster_test_grpc_fb as monster_grpc_fb |
| |
| |
| test_stat_id = "test_stat_id" |
| test_stat_val = 8 |
| test_stat_count = 1 |
| |
| test_monster_name1 = "test_monster_name1" |
| test_monster_name2 = "test_monster_name2" |
| test_string = "test_string" |
| test_color = 2 |
| test_X = 3.0 |
| test_Y = 2.0 |
| test_Z = 6.0 |
| test_test1 = 4.0 |
| test_a = 8 |
| test_b = 5 |
| test_hp = 67 |
| test_inventory = [1, 1, 2, 3, 5, 8] |
| test_testtype = 4 |
| |
| test_monsters_name_retrieve = ["big_monster", "small_monster"] |
| test_no_of_monsters = 2 |
| |
| |
| class MonsterStorage(monster_grpc_fb.MonsterStorageServicer): |
| |
| def Store(self, request, context): |
| |
| m = Monster.Monster().GetRootAsMonster(request, 0) |
| |
| assert m.Name().decode("utf-8") == test_monster_name1 |
| |
| assert m.Pos().X() == test_X |
| assert m.Pos().Y() == test_Y |
| assert m.Pos().Z() == test_Z |
| assert m.Pos().Test1() == test_test1 |
| assert m.Pos().Test2() == test_color |
| test3 = Test.Test() |
| assert m.Pos().Test3(test3).A() == test_a |
| assert m.Pos().Test3(test3).B() == test_b |
| |
| assert m.Hp() == test_hp |
| |
| assert m.Color() == test_color |
| |
| assert m.InventoryLength() == len(test_inventory) |
| for i in range(0, len(test_inventory)): |
| assert m.Inventory(i) == test_inventory[len(test_inventory)-i -1] |
| |
| assert m.TestType() == test_testtype |
| |
| assert m.Test() is not None |
| table = m.Test() |
| |
| m2 = Monster.Monster() |
| m2.Init(table.Bytes, table.Pos) |
| assert m2.Name().decode("utf-8") == test_monster_name2 |
| |
| m3 = m.Enemy() |
| assert m3.Name().decode("utf-8") == test_monster_name2 |
| |
| assert m.Testarrayofstring(0).decode("utf-8") == test_string |
| |
| b = flatbuffers.Builder(0) |
| i = b.CreateString(test_stat_id) |
| Stat.StatStart(b) |
| Stat.StatAddId(b, i) |
| Stat.StatAddVal(b, test_stat_val) |
| Stat.StatAddCount(b, test_stat_count) |
| b.Finish(Stat.StatEnd(b)) |
| return bytes(b.Output()) |
| |
| def Retrieve(self, request, context): |
| |
| s = Stat.Stat().GetRootAsStat(request, 0) |
| |
| no_of_monsters = test_no_of_monsters |
| for i in range(0, no_of_monsters): |
| b = flatbuffers.Builder(0) |
| i = b.CreateString(test_monsters_name_retrieve[i]) |
| Monster.MonsterStart(b) |
| Monster.MonsterAddName(b, i) |
| b.Finish(Monster.MonsterEnd(b)) |
| yield bytes(b.Output()) |
| |
| |
| def serve(): |
| |
| server = grpc.server(futures.ThreadPoolExecutor(max_workers=10)) |
| monster_grpc_fb.add_MonsterStorageServicer_to_server(MonsterStorage(), server) |
| server.add_insecure_port('[::]:50051') |
| |
| server.start() |
| |
| run() |
| |
| |
| def run(): |
| |
| channel = grpc.insecure_channel('127.0.0.1:50051') |
| stub = monster_grpc_fb.MonsterStorageStub(channel) |
| |
| b = flatbuffers.Builder(0) |
| name2 = b.CreateString(test_monster_name2) |
| name1 = b.CreateString(test_monster_name1) |
| Monster.MonsterStart(b) |
| Monster.MonsterAddName(b, name2) |
| monster2 = Monster.MonsterEnd(b) |
| test1 = b.CreateString(test_string) |
| |
| Monster.MonsterStartInventoryVector(b, len(test_inventory)) |
| for i in range(0, len(test_inventory)): |
| b.PrependByte(test_inventory[i]) |
| inv = b.EndVector(len(test_inventory)) |
| |
| Monster.MonsterStartTest4Vector(b, 2) |
| Test.CreateTest(b, 10, 20) |
| Test.CreateTest(b, 30, 40) |
| test4 = b.EndVector(2) |
| |
| Monster.MonsterStartTestarrayofstringVector(b, 1) |
| b.PrependUOffsetTRelative(test1) |
| test_array_of_string = b.EndVector(1) |
| |
| Monster.MonsterStart(b) |
| |
| Monster.MonsterAddHp(b, test_hp) |
| Monster.MonsterAddName(b, name1) |
| Monster.MonsterAddColor(b, test_color) |
| pos = Vec3.CreateVec3(b, test_X, test_Y, test_Z, test_test1, test_color, test_a, test_b) |
| Monster.MonsterAddPos(b, pos) |
| Monster.MonsterAddInventory(b, inv) |
| Monster.MonsterAddTestType(b, test_testtype) |
| Monster.MonsterAddTest(b, monster2) |
| Monster.MonsterAddTest4(b, test4) |
| Monster.MonsterAddEnemy(b, monster2) |
| Monster.MonsterAddTestarrayofstring(b, test_array_of_string) |
| monster = Monster.MonsterEnd(b) |
| |
| b.Finish(monster) |
| |
| stat_response = stub.Store(bytes(b.Output())) |
| |
| s = Stat.Stat().GetRootAsStat(stat_response, 0) |
| |
| assert s.Id().decode("utf-8") == test_stat_id |
| assert s.Val() == test_stat_val |
| assert s.Count() == test_stat_count |
| |
| monster_reponses = stub.Retrieve(stat_response) |
| count = 0 |
| for monster_reponse in monster_reponses: |
| m = Monster.Monster().GetRootAsMonster(monster_reponse, 0) |
| assert m.Name().decode("utf-8") == test_monsters_name_retrieve[count] |
| count = count + 1 |
| |
| |
| if __name__ == '__main__': |
| serve() |