grpc added create session and set session location
This commit is contained in:
parent
e819b706bc
commit
fcff9e4551
3 changed files with 98 additions and 6 deletions
|
@ -8,11 +8,22 @@ import core_pb2
|
||||||
import core_pb2_grpc
|
import core_pb2_grpc
|
||||||
|
|
||||||
|
|
||||||
|
def update_proto(obj, **kwargs):
|
||||||
|
for key in kwargs:
|
||||||
|
value = kwargs[key]
|
||||||
|
if value is not None:
|
||||||
|
logging.info("setting proto key(%s) value(%s)", key, value)
|
||||||
|
setattr(obj, key, value)
|
||||||
|
|
||||||
|
|
||||||
class CoreApiClient(object):
|
class CoreApiClient(object):
|
||||||
def __init__(self, address="localhost:50051"):
|
def __init__(self, address="localhost:50051"):
|
||||||
self.address = address
|
self.address = address
|
||||||
self.stub = None
|
self.stub = None
|
||||||
|
|
||||||
|
def create_session(self):
|
||||||
|
return self.stub.CreateSession(core_pb2.CreateSessionRequest())
|
||||||
|
|
||||||
def get_sessions(self):
|
def get_sessions(self):
|
||||||
return self.stub.GetSessions(core_pb2.SessionsRequest())
|
return self.stub.GetSessions(core_pb2.SessionsRequest())
|
||||||
|
|
||||||
|
@ -27,10 +38,17 @@ class CoreApiClient(object):
|
||||||
return self.stub.GetSessionOptions(request)
|
return self.stub.GetSessionOptions(request)
|
||||||
|
|
||||||
def get_session_location(self, _id):
|
def get_session_location(self, _id):
|
||||||
request = core_pb2.SessionLocationRequest()
|
request = core_pb2.GetSessionLocationRequest()
|
||||||
request.id = _id
|
request.id = _id
|
||||||
return self.stub.GetSessionLocation(request)
|
return self.stub.GetSessionLocation(request)
|
||||||
|
|
||||||
|
def set_session_location(self, _id, x=None, y=None , z=None, lat=None, lon=None, alt=None, scale=None):
|
||||||
|
request = core_pb2.SetSessionLocationRequest()
|
||||||
|
request.id = _id
|
||||||
|
update_proto(request.position, x=x, y=y, z=z, lat=lat, lon=lon, alt=alt)
|
||||||
|
update_proto(request, scale=scale)
|
||||||
|
return self.stub.SetSessionLocation(request)
|
||||||
|
|
||||||
@contextmanager
|
@contextmanager
|
||||||
def connect(self):
|
def connect(self):
|
||||||
channel = grpc.insecure_channel(self.address)
|
channel = grpc.insecure_channel(self.address)
|
||||||
|
@ -44,15 +62,33 @@ class CoreApiClient(object):
|
||||||
def main():
|
def main():
|
||||||
client = CoreApiClient()
|
client = CoreApiClient()
|
||||||
with client.connect():
|
with client.connect():
|
||||||
|
# create session
|
||||||
|
response = client.create_session()
|
||||||
|
print("created session: %s" % response)
|
||||||
|
|
||||||
response = client.get_sessions()
|
response = client.get_sessions()
|
||||||
print("core client received: %s" % response)
|
print("core client received: %s" % response)
|
||||||
|
|
||||||
if len(response.sessions) > 0:
|
if len(response.sessions) > 0:
|
||||||
session_data = response.sessions[0]
|
session_data = response.sessions[0]
|
||||||
|
|
||||||
|
# set session location
|
||||||
|
response = client.set_session_location(
|
||||||
|
session_data.id,
|
||||||
|
x=0, y=0, z=None,
|
||||||
|
lat=47.57917, lon=-122.13232, alt=2.0,
|
||||||
|
scale=150000.0
|
||||||
|
)
|
||||||
|
print("set location response: %s" % response)
|
||||||
|
|
||||||
|
# get session
|
||||||
session = client.get_session(session_data.id)
|
session = client.get_session(session_data.id)
|
||||||
print(session)
|
print(session)
|
||||||
|
|
||||||
|
# get options
|
||||||
print(client.get_session_options(session_data.id))
|
print(client.get_session_options(session_data.id))
|
||||||
|
|
||||||
|
# get location
|
||||||
print(client.get_session_location(session_data.id))
|
print(client.get_session_location(session_data.id))
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from core.enumerations import NodeTypes
|
from core.enumerations import NodeTypes, EventTypes
|
||||||
|
|
||||||
from concurrent import futures
|
from concurrent import futures
|
||||||
import time
|
import time
|
||||||
|
@ -81,6 +81,27 @@ class CoreApiServer(core_pb2_grpc.CoreApiServicer):
|
||||||
super(CoreApiServer, self).__init__()
|
super(CoreApiServer, self).__init__()
|
||||||
self.coreemu = coreemu
|
self.coreemu = coreemu
|
||||||
|
|
||||||
|
def CreateSession(self, request, context):
|
||||||
|
session = self.coreemu.create_session()
|
||||||
|
session.set_state(EventTypes.DEFINITION_STATE)
|
||||||
|
|
||||||
|
# default set session location
|
||||||
|
session.location.setrefgeo(47.57917, -122.13232, 2.0)
|
||||||
|
session.location.refscale = 150000.0
|
||||||
|
|
||||||
|
# grpc stream handlers
|
||||||
|
# session.event_handlers.append(websocket_routes.broadcast_event)
|
||||||
|
# session.node_handlers.append(websocket_routes.broadcast_node)
|
||||||
|
# session.config_handlers.append(websocket_routes.broadcast_config)
|
||||||
|
# session.link_handlers.append(websocket_routes.broadcast_link)
|
||||||
|
# session.exception_handlers.append(websocket_routes.broadcast_exception)
|
||||||
|
# session.file_handlers.append(websocket_routes.broadcast_file)
|
||||||
|
|
||||||
|
response = core_pb2.CreateSessionResponse()
|
||||||
|
response.id = session.session_id
|
||||||
|
response.state = session.state
|
||||||
|
return response
|
||||||
|
|
||||||
def GetSessions(self, request, context):
|
def GetSessions(self, request, context):
|
||||||
response = core_pb2.SessionsResponse()
|
response = core_pb2.SessionsResponse()
|
||||||
for session_id in self.coreemu.sessions:
|
for session_id in self.coreemu.sessions:
|
||||||
|
@ -95,7 +116,7 @@ class CoreApiServer(core_pb2_grpc.CoreApiServicer):
|
||||||
session = self.coreemu.sessions.get(request.id)
|
session = self.coreemu.sessions.get(request.id)
|
||||||
x, y, z = session.location.refxyz
|
x, y, z = session.location.refxyz
|
||||||
lat, lon, alt = session.location.refgeo
|
lat, lon, alt = session.location.refgeo
|
||||||
response = core_pb2.SessionLocationResponse()
|
response = core_pb2.GetSessionLocationResponse()
|
||||||
update_proto(
|
update_proto(
|
||||||
response.position,
|
response.position,
|
||||||
x=x,
|
x=x,
|
||||||
|
@ -108,6 +129,15 @@ class CoreApiServer(core_pb2_grpc.CoreApiServicer):
|
||||||
update_proto(response, scale=session.location.refscale)
|
update_proto(response, scale=session.location.refscale)
|
||||||
return response
|
return response
|
||||||
|
|
||||||
|
def SetSessionLocation(self, request, context):
|
||||||
|
session = self.coreemu.sessions.get(request.id)
|
||||||
|
|
||||||
|
session.location.refxyz = (request.position.x, request.position.y, request.position.z)
|
||||||
|
session.location.setrefgeo(request.position.lat, request.position.lon, request.position.alt)
|
||||||
|
session.location.refscale = request.scale
|
||||||
|
|
||||||
|
return core_pb2.SetSessionLocationResponse()
|
||||||
|
|
||||||
def GetSessionOptions(self, request, context):
|
def GetSessionOptions(self, request, context):
|
||||||
session = self.coreemu.sessions.get(request.id)
|
session = self.coreemu.sessions.get(request.id)
|
||||||
config = session.options.get_configs()
|
config = session.options.get_configs()
|
||||||
|
|
|
@ -3,14 +3,29 @@ syntax = "proto3";
|
||||||
package core;
|
package core;
|
||||||
|
|
||||||
service CoreApi {
|
service CoreApi {
|
||||||
|
rpc CreateSession (CreateSessionRequest) returns (CreateSessionResponse) {
|
||||||
|
}
|
||||||
rpc GetSessions (SessionsRequest) returns (SessionsResponse) {
|
rpc GetSessions (SessionsRequest) returns (SessionsResponse) {
|
||||||
}
|
}
|
||||||
rpc GetSession (SessionRequest) returns (SessionResponse) {
|
rpc GetSession (SessionRequest) returns (SessionResponse) {
|
||||||
}
|
}
|
||||||
rpc GetSessionOptions (SessionOptionsRequest) returns (SessionOptionsResponse) {
|
rpc GetSessionOptions (SessionOptionsRequest) returns (SessionOptionsResponse) {
|
||||||
}
|
}
|
||||||
rpc GetSessionLocation (SessionLocationRequest) returns (SessionLocationResponse) {
|
rpc GetSessionLocation (GetSessionLocationRequest) returns (GetSessionLocationResponse) {
|
||||||
}
|
}
|
||||||
|
rpc SetSessionLocation (SetSessionLocationRequest) returns (SetSessionLocationResponse) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// rpc request/response messages
|
||||||
|
message CreateSessionRequest {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
message CreateSessionResponse {
|
||||||
|
int32 id = 1;
|
||||||
|
int32 state = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
message SessionsRequest {
|
message SessionsRequest {
|
||||||
|
@ -38,15 +53,26 @@ message SessionOptionsResponse {
|
||||||
repeated ConfigGroup groups = 1;
|
repeated ConfigGroup groups = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
message SessionLocationRequest {
|
message GetSessionLocationRequest {
|
||||||
int32 id = 1;
|
int32 id = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
message SessionLocationResponse {
|
message GetSessionLocationResponse {
|
||||||
Position position = 1;
|
Position position = 1;
|
||||||
float scale = 2;
|
float scale = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
message SetSessionLocationRequest {
|
||||||
|
int32 id = 1;
|
||||||
|
Position position = 2;
|
||||||
|
float scale = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
message SetSessionLocationResponse {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// data structures for messages below
|
||||||
message ConfigGroup {
|
message ConfigGroup {
|
||||||
string name = 1;
|
string name = 1;
|
||||||
repeated ConfigOption options = 2;
|
repeated ConfigOption options = 2;
|
||||||
|
|
Loading…
Add table
Reference in a new issue