You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
175 lines
4.9 KiB
175 lines
4.9 KiB
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()
|