    

 ## On this page

  

 

 # ensight\_grpc

 Last update: 16.07.2025 

<a id="l00001" name="l00001"></a> 1import grpc

<a id="l00002" name="l00002"></a> 2import os, os.path

<a id="l00003" name="l00003"></a> 3import platform

<a id="l00004" name="l00004"></a> 4import random

<a id="l00005" name="l00005"></a> 5import subprocess

<a id="l00006" name="l00006"></a> 6import threading

<a id="l00007" name="l00007"></a> 7import uuid

<a id="l00008" name="l00008"></a> 8from concurrent import futures

<a id="l00009" name="l00009"></a> 9 

<a id="l00010" name="l00010"></a> 10\# these modules are the result of running protoc on the .proto file

<a id="l00011" name="l00011"></a> 11import ensight_pb2

<a id="l00012" name="l00012"></a> 12import ensight_pb2_grpc

<a id="l00013" name="l00013"></a> 13import dynamic_scene_graph_pb2

<a id="l00014" name="l00014"></a> 14import dynamic_scene_graph_pb2_grpc

<a id="l00015" name="l00015"></a> 15 

<a id="l00016" name="l00016"></a> 16\# Shared memory interface

<a id="l00017" name="l00017"></a> 17import ensight_grpc_shmem

<a id="l00018" name="l00018"></a> 18 

<a id="l00019" name="l00019"></a> 19 

<a id="l00020" name="l00020"></a> 20 

<a id="l00028" name="l00028"></a> 28 

<a id="l00029" name="l00029"></a> 29 

<a id="l00035" name="l00035"></a>[ 35](classensight__grpc_1_1_en_sight_g_r_p_c.html)class [EnSightGRPC](classensight__grpc_1_1_en_sight_g_r_p_c.html)(object):

<a id="l00036" name="l00036"></a> 36 

<a id="l00045" name="l00045"></a>[ 45](classensight__grpc_1_1_en_sight_g_r_p_c.html#a8d059169e231ebc10a0467ee2ba5fec2) def [\_\_init\_\_](classensight__grpc_1_1_en_sight_g_r_p_c.html#a8d059169e231ebc10a0467ee2ba5fec2)(self, port=12345, host='127.0.0.1', version=''):

<a id="l00046" name="l00046"></a> 46 self.[\_host](classensight__grpc_1_1_en_sight_g_r_p_c.html#acfa730cfcb568cc26f079996804ebb97) = host

<a id="l00047" name="l00047"></a> 47 self.[\_port](classensight__grpc_1_1_en_sight_g_r_p_c.html#a3288be89c9ab636283cb59df9fe0dc17) = port

<a id="l00048" name="l00048"></a> 48 self.[\_pid](classensight__grpc_1_1_en_sight_g_r_p_c.html#abba6d94b9acc418d610e900aecbfd23c) = None

<a id="l00049" name="l00049"></a> 49 self.[\_channel](classensight__grpc_1_1_en_sight_g_r_p_c.html#abb7212c7e4ad9e7ef398bf5e13f15fb8) = None

<a id="l00050" name="l00050"></a> 50 self.[\_stub](classensight__grpc_1_1_en_sight_g_r_p_c.html#a8d6e08882d55ce3c7fbd837bedfc0d98) = None

<a id="l00051" name="l00051"></a> 51 self.[\_dsg\_stub](classensight__grpc_1_1_en_sight_g_r_p_c.html#a44561d8bec5adfc5fe51978b5f4dd6fb) = None

<a id="l00052" name="l00052"></a> 52 self.[\_version](classensight__grpc_1_1_en_sight_g_r_p_c.html#a4ed120bd2b7a2a477bf0c19dc1765fce) = version

<a id="l00053" name="l00053"></a> 53 self.[\_security\_token](classensight__grpc_1_1_en_sight_g_r_p_c.html#aec4f4d61de4dfe799e620a005945a016) = str(random.randint(0, 1000000))

<a id="l00054" name="l00054"></a> 54 \# Streaming APIs

<a id="l00055" name="l00055"></a> 55 \# Images

<a id="l00056" name="l00056"></a> 56 self.[\_image\_stream](classensight__grpc_1_1_en_sight_g_r_p_c.html#aefa2e7fffb9d88723e08ca8a17b56b62) = None

<a id="l00057" name="l00057"></a> 57 self.[\_image\_thread](classensight__grpc_1_1_en_sight_g_r_p_c.html#a660df97b19f908d161ac673c582465e1)[\_image\_thread](classensight__grpc_1_1_en_sight_g_r_p_c.html#a660df97b19f908d161ac673c582465e1) = None

<a id="l00058" name="l00058"></a> 58 self.[\_image](classensight__grpc_1_1_en_sight_g_r_p_c.html#a6e8208612ce6492e8702f0fcdfe32901)[\_image](classensight__grpc_1_1_en_sight_g_r_p_c.html#a15288e6ad79606e879dae75e97e4b152) = None

<a id="l00059" name="l00059"></a> 59 self.[\_image\_number](classensight__grpc_1_1_en_sight_g_r_p_c.html#a318cc014659eca5cb27f7ca79bda0fe9) = 0

<a id="l00060" name="l00060"></a> 60 self.[\_shmem\_client](classensight__grpc_1_1_en_sight_g_r_p_c.html#a7cc44f4eb01c9bfe14a17d01dc8d8d36) = None

<a id="l00061" name="l00061"></a> 61 self.[\_shmem\_filename](classensight__grpc_1_1_en_sight_g_r_p_c.html#afb65fb2ac55da0dfc23022eb188656fc) = None

<a id="l00062" name="l00062"></a> 62 \# Event (strings)

<a id="l00063" name="l00063"></a> 63 self.[\_event\_stream](classensight__grpc_1_1_en_sight_g_r_p_c.html#ade63e1260b8690a73b72f2d65b561096) = None

<a id="l00064" name="l00064"></a> 64 self.[\_event\_thread](classensight__grpc_1_1_en_sight_g_r_p_c.html#a98f82222b0e4dcbf23f28ed20168a94e)[\_event\_thread](classensight__grpc_1_1_en_sight_g_r_p_c.html#adb6212d9d177108c32bfefa60fd16b88) = None

<a id="l00065" name="l00065"></a> 65 self.[\_events](classensight__grpc_1_1_en_sight_g_r_p_c.html#ac385f5b18232bcec204b028221602427) = list()

<a id="l00066" name="l00066"></a> 66 self.[\_prefix](classensight__grpc_1_1_en_sight_g_r_p_c.html#a3315104c5127852b071df26be56ed10e) = None

<a id="l00067" name="l00067"></a> 67 self.[\_sub\_service](classensight__grpc_1_1_en_sight_g_r_p_c.html#aa94401a916262c38e1173cca04c9390c) = None

<a id="l00068" name="l00068"></a> 68 self.[\_event\_callback](classensight__grpc_1_1_en_sight_g_r_p_c.html#a54868c3a59ac189e258285885a48f65e) = None

<a id="l00069" name="l00069"></a> 69 

<a id="l00070" name="l00070"></a> 70 



<a id="l00071" name="l00071"></a> 71 

<a id="l00074" name="l00074"></a>[ 74](classensight__grpc_1_1_en_sight_g_r_p_c.html#a81fd18bb67b4f81fb1cab9b5d6ecee99) def [host](classensight__grpc_1_1_en_sight_g_r_p_c.html#a81fd18bb67b4f81fb1cab9b5d6ecee99)(self):

<a id="l00075" name="l00075"></a> 75 return self.[\_host](classensight__grpc_1_1_en_sight_g_r_p_c.html#acfa730cfcb568cc26f079996804ebb97)

<a id="l00076" name="l00076"></a> 76 



<a id="l00077" name="l00077"></a> 77 

<a id="l00080" name="l00080"></a>[ 80](classensight__grpc_1_1_en_sight_g_r_p_c.html#a5f70502660ffb9346fe54f087bebaa31) def [port](classensight__grpc_1_1_en_sight_g_r_p_c.html#a5f70502660ffb9346fe54f087bebaa31)(self):

<a id="l00081" name="l00081"></a> 81 return self.[\_port](classensight__grpc_1_1_en_sight_g_r_p_c.html#a3288be89c9ab636283cb59df9fe0dc17)

<a id="l00082" name="l00082"></a> 82 



<a id="l00083" name="l00083"></a> 83 

<a id="l00092" name="l00092"></a>[ 92](classensight__grpc_1_1_en_sight_g_r_p_c.html#a0cd63b73616a71f1f628fec85485f6ee) def [set\_security\_token](classensight__grpc_1_1_en_sight_g_r_p_c.html#a0cd63b73616a71f1f628fec85485f6ee)(self, n):

<a id="l00093" name="l00093"></a> 93 self.[\_security\_token](classensight__grpc_1_1_en_sight_g_r_p_c.html#aec4f4d61de4dfe799e620a005945a016) = n

<a id="l00094" name="l00094"></a> 94 



<a id="l00095" name="l00095"></a> 95 

<a id="l00098" name="l00098"></a>[ 98](classensight__grpc_1_1_en_sight_g_r_p_c.html#a80081863c31f5d1e9924c110506122ab) def [security\_token](classensight__grpc_1_1_en_sight_g_r_p_c.html#a80081863c31f5d1e9924c110506122ab)(self):

<a id="l00099" name="l00099"></a> 99 return self.[\_security\_token](classensight__grpc_1_1_en_sight_g_r_p_c.html#aec4f4d61de4dfe799e620a005945a016)

<a id="l00100" name="l00100"></a> 100 



<a id="l00101" name="l00101"></a> 101 

<a id="l00105" name="l00105"></a>[ 105](classensight__grpc_1_1_en_sight_g_r_p_c.html#aa197d33f6ae11c27024ace93f875cf2b) def [shutdown](classensight__grpc_1_1_en_sight_g_r_p_c.html#aa197d33f6ae11c27024ace93f875cf2b)(self):

<a id="l00106" name="l00106"></a> 106 \# remove any subscription services we may have started

<a id="l00107" name="l00107"></a> 107 self.[unsubscribe](classensight__grpc_1_1_en_sight_g_r_p_c.html#a0445321eb920fd2e62a055a11d378d08)()

<a id="l00108" name="l00108"></a> 108 \# if we launched EnSight, shut it down.

<a id="l00109" name="l00109"></a> 109 if self.[\_pid](classensight__grpc_1_1_en_sight_g_r_p_c.html#abba6d94b9acc418d610e900aecbfd23c) is not None:

<a id="l00110" name="l00110"></a> 110 _ = self.[stop\_server](classensight__grpc_1_1_en_sight_g_r_p_c.html#a7aab74443c5c3f7833ff8934c8341167)()

<a id="l00111" name="l00111"></a> 111 \# shutdown any shared memory client

<a id="l00112" name="l00112"></a> 112 if self.[\_shmem\_client](classensight__grpc_1_1_en_sight_g_r_p_c.html#a7cc44f4eb01c9bfe14a17d01dc8d8d36) is not None:

<a id="l00113" name="l00113"></a> 113 ensight_grpc_shmem.stream_destroy(self.[\_shmem\_client](classensight__grpc_1_1_en_sight_g_r_p_c.html#a7cc44f4eb01c9bfe14a17d01dc8d8d36))

<a id="l00114" name="l00114"></a> 114 self.[\_shmem\_client](classensight__grpc_1_1_en_sight_g_r_p_c.html#a7cc44f4eb01c9bfe14a17d01dc8d8d36) = None

<a id="l00115" name="l00115"></a> 115 \# destroy any shared memory file we generated

<a id="l00116" name="l00116"></a> 116 if self.[\_shmem\_filename](classensight__grpc_1_1_en_sight_g_r_p_c.html#afb65fb2ac55da0dfc23022eb188656fc) is not None:

<a id="l00117" name="l00117"></a> 117 try:

<a id="l00118" name="l00118"></a> 118 os.remove(self.[\_shmem\_filename](classensight__grpc_1_1_en_sight_g_r_p_c.html#afb65fb2ac55da0dfc23022eb188656fc))

<a id="l00119" name="l00119"></a> 119 except Exception as e:

<a id="l00120" name="l00120"></a> 120 print("Unable to delete shared memory file: {}".format(str(e)))

<a id="l00121" name="l00121"></a> 121 self.[\_shmem\_filename](classensight__grpc_1_1_en_sight_g_r_p_c.html#afb65fb2ac55da0dfc23022eb188656fc) = None

<a id="l00122" name="l00122"></a> 122 



<a id="l00123" name="l00123"></a> 123 

<a id="l00128" name="l00128"></a>[ 128](classensight__grpc_1_1_en_sight_g_r_p_c.html#ae8bda9000df12ffa158c3b99a2bb25c2) def [start\_server](classensight__grpc_1_1_en_sight_g_r_p_c.html#ae8bda9000df12ffa158c3b99a2bb25c2)(self):

<a id="l00129" name="l00129"></a> 129 if self.[\_pid](classensight__grpc_1_1_en_sight_g_r_p_c.html#abba6d94b9acc418d610e900aecbfd23c) is not None:

<a id="l00130" name="l00130"></a> 130 return self.[\_pid](classensight__grpc_1_1_en_sight_g_r_p_c.html#abba6d94b9acc418d610e900aecbfd23c)

<a id="l00131" name="l00131"></a> 131 

<a id="l00132" name="l00132"></a> 132 my_env = os.environ.copy()

<a id="l00133" name="l00133"></a> 133 exe = f'ensight{self.\_version}'

<a id="l00134" name="l00134"></a> 134 cmd = [exe, '-batch', '-grpc\_server', str(self.[\_port](classensight__grpc_1_1_en_sight_g_r_p_c.html#a3288be89c9ab636283cb59df9fe0dc17))]

<a id="l00135" name="l00135"></a> 135 if self.[\_security\_token](classensight__grpc_1_1_en_sight_g_r_p_c.html#aec4f4d61de4dfe799e620a005945a016):

<a id="l00136" name="l00136"></a> 136 cmd.append("-security")

<a id="l00137" name="l00137"></a> 137 cmd.append(self.[\_security\_token](classensight__grpc_1_1_en_sight_g_r_p_c.html#aec4f4d61de4dfe799e620a005945a016))

<a id="l00138" name="l00138"></a> 138 if platform.system() == 'Windows':

<a id="l00139" name="l00139"></a> 139 DETACHED_PROCESS = 0x00000008

<a id="l00140" name="l00140"></a> 140 cmd[0] += ".bat"

<a id="l00141" name="l00141"></a> 141 cmd.append('-minimize\_console')

<a id="l00142" name="l00142"></a> 142 self.[\_pid](classensight__grpc_1_1_en_sight_g_r_p_c.html#abba6d94b9acc418d610e900aecbfd23c) = subprocess.Popen(cmd, creationflags=DETACHED_PROCESS,

<a id="l00143" name="l00143"></a> 143 close_fds=True, env=my_env).pid

<a id="l00144" name="l00144"></a> 144 else:

<a id="l00145" name="l00145"></a> 145 self.[\_pid](classensight__grpc_1_1_en_sight_g_r_p_c.html#abba6d94b9acc418d610e900aecbfd23c) = subprocess.Popen(exe, close_fds=True, env=my_env).pid

<a id="l00146" name="l00146"></a> 146 return self.[\_pid](classensight__grpc_1_1_en_sight_g_r_p_c.html#abba6d94b9acc418d610e900aecbfd23c)

<a id="l00147" name="l00147"></a> 147 



<a id="l00148" name="l00148"></a> 148 

<a id="l00153" name="l00153"></a>[ 153](classensight__grpc_1_1_en_sight_g_r_p_c.html#a7aab74443c5c3f7833ff8934c8341167) def [stop\_server](classensight__grpc_1_1_en_sight_g_r_p_c.html#a7aab74443c5c3f7833ff8934c8341167)(self):

<a id="l00154" name="l00154"></a> 154 response = None

<a id="l00155" name="l00155"></a> 155 \# if we are connected and we started the server, we will emit the 'exit' message

<a id="l00156" name="l00156"></a> 156 if (self.[\_pid](classensight__grpc_1_1_en_sight_g_r_p_c.html#abba6d94b9acc418d610e900aecbfd23c) is not None) and self.[is\_connected](classensight__grpc_1_1_en_sight_g_r_p_c.html#aeedd915d0824e94193e8ce5af0fd02ff)():

<a id="l00157" name="l00157"></a> 157 response = self.[\_stub](classensight__grpc_1_1_en_sight_g_r_p_c.html#a8d6e08882d55ce3c7fbd837bedfc0d98).Exit(ensight_pb2.ExitRequest(), metadata=self.[metadata](classensight__grpc_1_1_en_sight_g_r_p_c.html#ac0de7184d0b339cadf5d310d1f250b5e)())

<a id="l00158" name="l00158"></a> 158 self.[\_stub](classensight__grpc_1_1_en_sight_g_r_p_c.html#a8d6e08882d55ce3c7fbd837bedfc0d98) = None

<a id="l00159" name="l00159"></a> 159 self.[\_dsg\_stub](classensight__grpc_1_1_en_sight_g_r_p_c.html#a44561d8bec5adfc5fe51978b5f4dd6fb) = None

<a id="l00160" name="l00160"></a> 160 self.[\_channel](classensight__grpc_1_1_en_sight_g_r_p_c.html#abb7212c7e4ad9e7ef398bf5e13f15fb8).close()

<a id="l00161" name="l00161"></a> 161 self.[\_channel](classensight__grpc_1_1_en_sight_g_r_p_c.html#abb7212c7e4ad9e7ef398bf5e13f15fb8) = None

<a id="l00162" name="l00162"></a> 162 self.[\_pid](classensight__grpc_1_1_en_sight_g_r_p_c.html#abba6d94b9acc418d610e900aecbfd23c) = None

<a id="l00163" name="l00163"></a> 163 return response

<a id="l00164" name="l00164"></a> 164 



<a id="l00165" name="l00165"></a> 165 

<a id="l00168" name="l00168"></a>[ 168](classensight__grpc_1_1_en_sight_g_r_p_c.html#aeedd915d0824e94193e8ce5af0fd02ff) def [is\_connected](classensight__grpc_1_1_en_sight_g_r_p_c.html#aeedd915d0824e94193e8ce5af0fd02ff)(self):

<a id="l00169" name="l00169"></a> 169 return self.[\_channel](classensight__grpc_1_1_en_sight_g_r_p_c.html#abb7212c7e4ad9e7ef398bf5e13f15fb8) is not None

<a id="l00170" name="l00170"></a> 170 



<a id="l00171" name="l00171"></a> 171 

<a id="l00177" name="l00177"></a>[ 177](classensight__grpc_1_1_en_sight_g_r_p_c.html#a4f2fc7d6c856d4dcf6f2e3e231363798) def [connect](classensight__grpc_1_1_en_sight_g_r_p_c.html#a4f2fc7d6c856d4dcf6f2e3e231363798)(self, timeout=15.0):

<a id="l00178" name="l00178"></a> 178 if self.[\_channel](classensight__grpc_1_1_en_sight_g_r_p_c.html#abb7212c7e4ad9e7ef398bf5e13f15fb8) is not None:

<a id="l00179" name="l00179"></a> 179 return

<a id="l00180" name="l00180"></a> 180 self.[\_channel](classensight__grpc_1_1_en_sight_g_r_p_c.html#abb7212c7e4ad9e7ef398bf5e13f15fb8) = grpc.insecure_channel("{}:{}".format(self.[\_host](classensight__grpc_1_1_en_sight_g_r_p_c.html#acfa730cfcb568cc26f079996804ebb97), self.[\_port](classensight__grpc_1_1_en_sight_g_r_p_c.html#a3288be89c9ab636283cb59df9fe0dc17)),

<a id="l00181" name="l00181"></a> 181 options=[

<a id="l00182" name="l00182"></a> 182 ("grpc.max\_receive\_message\_length", -1),

<a id="l00183" name="l00183"></a> 183 ("grpc.max\_send\_message\_length", -1),

<a id="l00184" name="l00184"></a> 184 ("grpc.testing.fixed\_reconnect\_backoff\_ms", 1100),

<a id="l00185" name="l00185"></a> 185 ])

<a id="l00186" name="l00186"></a> 186 try:

<a id="l00187" name="l00187"></a> 187 grpc.channel_ready_future(self.[\_channel](classensight__grpc_1_1_en_sight_g_r_p_c.html#abb7212c7e4ad9e7ef398bf5e13f15fb8)).result(timeout=timeout)

<a id="l00188" name="l00188"></a> 188 except grpc.FutureTimeoutError:

<a id="l00189" name="l00189"></a> 189 self.[\_channel](classensight__grpc_1_1_en_sight_g_r_p_c.html#abb7212c7e4ad9e7ef398bf5e13f15fb8) = None

<a id="l00190" name="l00190"></a> 190 return

<a id="l00191" name="l00191"></a> 191 self.[\_stub](classensight__grpc_1_1_en_sight_g_r_p_c.html#a8d6e08882d55ce3c7fbd837bedfc0d98) = ensight_pb2_grpc.EnSightServiceStub(self.[\_channel](classensight__grpc_1_1_en_sight_g_r_p_c.html#abb7212c7e4ad9e7ef398bf5e13f15fb8))

<a id="l00192" name="l00192"></a> 192 self.[\_dsg\_stub](classensight__grpc_1_1_en_sight_g_r_p_c.html#a44561d8bec5adfc5fe51978b5f4dd6fb) = dynamic_scene_graph_pb2_grpc.DynamicSceneGraphServiceStub(self.[\_channel](classensight__grpc_1_1_en_sight_g_r_p_c.html#abb7212c7e4ad9e7ef398bf5e13f15fb8))

<a id="l00193" name="l00193"></a> 193 



<a id="l00194" name="l00194"></a> 194 

<a id="l00197" name="l00197"></a> 197 def metadata(self):

<a id="l00198" name="l00198"></a> 198 ret = list()

<a id="l00199" name="l00199"></a> 199 if self.[\_security\_token](classensight__grpc_1_1_en_sight_g_r_p_c.html#aec4f4d61de4dfe799e620a005945a016) is not None:

<a id="l00200" name="l00200"></a> 200 s = self.[\_security\_token](classensight__grpc_1_1_en_sight_g_r_p_c.html#aec4f4d61de4dfe799e620a005945a016)

<a id="l00201" name="l00201"></a> 201 if type(s) == str:

<a id="l00202" name="l00202"></a> 202 s = s.encode("utf-8")

<a id="l00203" name="l00203"></a> 203 ret.append( (b'shared\_secret', s) )

<a id="l00204" name="l00204"></a> 204 return ret

<a id="l00205" name="l00205"></a> 205 

<a id="l00206" name="l00206"></a> 206 

<a id="l00215" name="l00215"></a>[ 215](classensight__grpc_1_1_en_sight_g_r_p_c.html#a0586cf3dc58ad8dcb132ac786ff82e19) def [render](classensight__grpc_1_1_en_sight_g_r_p_c.html#a0586cf3dc58ad8dcb132ac786ff82e19)(self, width=640, height=480, aa=1, raw=False, highlighting=False):

<a id="l00216" name="l00216"></a> 216 self.[connect](classensight__grpc_1_1_en_sight_g_r_p_c.html#a4f2fc7d6c856d4dcf6f2e3e231363798)()

<a id="l00217" name="l00217"></a> 217 ret_type = ensight_pb2.RenderRequest.IMAGE_PNG

<a id="l00218" name="l00218"></a> 218 if raw:

<a id="l00219" name="l00219"></a> 219 ret_type = ensight_pb2.RenderRequest.IMAGE_RAW

<a id="l00220" name="l00220"></a> 220 try:

<a id="l00221" name="l00221"></a> 221 response = self.[\_stub](classensight__grpc_1_1_en_sight_g_r_p_c.html#a8d6e08882d55ce3c7fbd837bedfc0d98).RenderImage(

<a id="l00222" name="l00222"></a> 222 ensight_pb2.RenderRequest(type=ret_type, image_width=width,

<a id="l00223" name="l00223"></a> 223 image_height=height, image_aa_passes=aa,

<a id="l00224" name="l00224"></a> 224 include_highlighting=highlighting),

<a id="l00225" name="l00225"></a> 225 metadata=self.[metadata](classensight__grpc_1_1_en_sight_g_r_p_c.html#ac0de7184d0b339cadf5d310d1f250b5e)())

<a id="l00226" name="l00226"></a> 226 except:

<a id="l00227" name="l00227"></a> 227 raise IOError("gRPC connection dropped")

<a id="l00228" name="l00228"></a> 228 return response.value

<a id="l00229" name="l00229"></a> 229 



<a id="l00230" name="l00230"></a> 230 

<a id="l00235" name="l00235"></a>[ 235](classensight__grpc_1_1_en_sight_g_r_p_c.html#a9546b51614d2d88cabeaba4551218a36) def [geometry](classensight__grpc_1_1_en_sight_g_r_p_c.html#a9546b51614d2d88cabeaba4551218a36)(self):

<a id="l00236" name="l00236"></a> 236 self.[connect](classensight__grpc_1_1_en_sight_g_r_p_c.html#a4f2fc7d6c856d4dcf6f2e3e231363798)()

<a id="l00237" name="l00237"></a> 237 try:

<a id="l00238" name="l00238"></a> 238 response = self.[\_stub](classensight__grpc_1_1_en_sight_g_r_p_c.html#a8d6e08882d55ce3c7fbd837bedfc0d98).GetGeometry(

<a id="l00239" name="l00239"></a> 239 ensight_pb2.GeometryRequest(type=ensight_pb2.GeometryRequest.GEOMETRY_GLB),

<a id="l00240" name="l00240"></a> 240 metadata=self.[metadata](classensight__grpc_1_1_en_sight_g_r_p_c.html#ac0de7184d0b339cadf5d310d1f250b5e)())

<a id="l00241" name="l00241"></a> 241 except:

<a id="l00242" name="l00242"></a> 242 raise IOError("gRPC connection dropped")

<a id="l00243" name="l00243"></a> 243 return response.value

<a id="l00244" name="l00244"></a> 244 



<a id="l00245" name="l00245"></a> 245 

<a id="l00254" name="l00254"></a>[ 254](classensight__grpc_1_1_en_sight_g_r_p_c.html#a10bf46c7b7de39dc76a69a8873badbd7) def [command](classensight__grpc_1_1_en_sight_g_r_p_c.html#a10bf46c7b7de39dc76a69a8873badbd7)(self, command_string, do_eval=True, json=False, raw_eval=False):

<a id="l00255" name="l00255"></a> 255 self.[connect](classensight__grpc_1_1_en_sight_g_r_p_c.html#a4f2fc7d6c856d4dcf6f2e3e231363798)()

<a id="l00256" name="l00256"></a> 256 flags = ensight_pb2.PythonRequest.EXEC_RETURN_PYTHON

<a id="l00257" name="l00257"></a> 257 if json:

<a id="l00258" name="l00258"></a> 258 flags = ensight_pb2.PythonRequest.EXEC_RETURN_JSON

<a id="l00259" name="l00259"></a> 259 if not do_eval:

<a id="l00260" name="l00260"></a> 260 flags = ensight_pb2.PythonRequest.EXEC_NO_RESULT

<a id="l00261" name="l00261"></a> 261 try:

<a id="l00262" name="l00262"></a> 262 response = self.[\_stub](classensight__grpc_1_1_en_sight_g_r_p_c.html#a8d6e08882d55ce3c7fbd837bedfc0d98).RunPython(ensight_pb2.PythonRequest(type=flags,

<a id="l00263" name="l00263"></a> 263 command=command_string),

<a id="l00264" name="l00264"></a> 264 metadata=self.[metadata](classensight__grpc_1_1_en_sight_g_r_p_c.html#ac0de7184d0b339cadf5d310d1f250b5e)())

<a id="l00265" name="l00265"></a> 265 except:

<a id="l00266" name="l00266"></a> 266 raise IOError("gRPC connection dropped")

<a id="l00267" name="l00267"></a> 267 if response.error &lt; 0:

<a id="l00268" name="l00268"></a> 268 raise RuntimeError("Remote execution error")

<a id="l00269" name="l00269"></a> 269 if flags == ensight_pb2.PythonRequest.EXEC_NO_RESULT:

<a id="l00270" name="l00270"></a> 270 return None

<a id="l00271" name="l00271"></a> 271 elif flags == ensight_pb2.PythonRequest.EXEC_RETURN_PYTHON:

<a id="l00272" name="l00272"></a> 272 if not raw_eval:

<a id="l00273" name="l00273"></a> 273 return eval(response.value)

<a id="l00274" name="l00274"></a> 274 return response.value

<a id="l00275" name="l00275"></a> 275 



<a id="l00276" name="l00276"></a> 276 

<a id="l00284" name="l00284"></a>[ 284](classensight__grpc_1_1_en_sight_g_r_p_c.html#a2edadc71c7d20b1d1e9872a9f7f01ab3) def [image\_stream\_enable](classensight__grpc_1_1_en_sight_g_r_p_c.html#a2edadc71c7d20b1d1e9872a9f7f01ab3)(self, flip_vertical=False):

<a id="l00285" name="l00285"></a> 285 if self.[\_image\_stream](classensight__grpc_1_1_en_sight_g_r_p_c.html#aefa2e7fffb9d88723e08ca8a17b56b62) is not None:

<a id="l00286" name="l00286"></a> 286 return

<a id="l00287" name="l00287"></a> 287 self.[connect](classensight__grpc_1_1_en_sight_g_r_p_c.html#a4f2fc7d6c856d4dcf6f2e3e231363798)()

<a id="l00288" name="l00288"></a> 288 self.[\_image\_stream](classensight__grpc_1_1_en_sight_g_r_p_c.html#aefa2e7fffb9d88723e08ca8a17b56b62) = self.[\_stub](classensight__grpc_1_1_en_sight_g_r_p_c.html#a8d6e08882d55ce3c7fbd837bedfc0d98).GetImageStream(

<a id="l00289" name="l00289"></a> 289 ensight_pb2.ImageStreamRequest(flip_vertical=flip_vertical, chunk=True),

<a id="l00290" name="l00290"></a> 290 metadata=self.[metadata](classensight__grpc_1_1_en_sight_g_r_p_c.html#ac0de7184d0b339cadf5d310d1f250b5e)())

<a id="l00291" name="l00291"></a> 291 self.[\_image\_thread](classensight__grpc_1_1_en_sight_g_r_p_c.html#a660df97b19f908d161ac673c582465e1)[\_image\_thread](classensight__grpc_1_1_en_sight_g_r_p_c.html#a660df97b19f908d161ac673c582465e1) = threading.Thread(target=self.[poll\_images](classensight__grpc_1_1_en_sight_g_r_p_c.html#a15672cc936301a8d49775439beeddd69))

<a id="l00292" name="l00292"></a> 292 self.[\_image\_thread](classensight__grpc_1_1_en_sight_g_r_p_c.html#a660df97b19f908d161ac673c582465e1)[\_image\_thread](classensight__grpc_1_1_en_sight_g_r_p_c.html#a660df97b19f908d161ac673c582465e1).daemon = True

<a id="l00293" name="l00293"></a> 293 self.[\_image\_thread](classensight__grpc_1_1_en_sight_g_r_p_c.html#a660df97b19f908d161ac673c582465e1)[\_image\_thread](classensight__grpc_1_1_en_sight_g_r_p_c.html#a660df97b19f908d161ac673c582465e1).start()

<a id="l00294" name="l00294"></a> 294 



<a id="l00295" name="l00295"></a> 295 

<a id="l00302" name="l00302"></a>[ 302](classensight__grpc_1_1_en_sight_g_r_p_c.html#a5a0f0f154bd96f67e0edadcbb58a3a2e) def [get\_image](classensight__grpc_1_1_en_sight_g_r_p_c.html#a5a0f0f154bd96f67e0edadcbb58a3a2e)(self):

<a id="l00303" name="l00303"></a> 303 return self.[\_image](classensight__grpc_1_1_en_sight_g_r_p_c.html#a6e8208612ce6492e8702f0fcdfe32901)[\_image](classensight__grpc_1_1_en_sight_g_r_p_c.html#a15288e6ad79606e879dae75e97e4b152), self.[\_image\_number](classensight__grpc_1_1_en_sight_g_r_p_c.html#a318cc014659eca5cb27f7ca79bda0fe9)

<a id="l00304" name="l00304"></a> 304 



<a id="l00305" name="l00305"></a> 305 

<a id="l00311" name="l00311"></a> 311 def put_image(self, the_image):

<a id="l00312" name="l00312"></a> 312 self.[\_image](classensight__grpc_1_1_en_sight_g_r_p_c.html#a6e8208612ce6492e8702f0fcdfe32901)[\_image](classensight__grpc_1_1_en_sight_g_r_p_c.html#a15288e6ad79606e879dae75e97e4b152) = the_image

<a id="l00313" name="l00313"></a> 313 self.[\_image\_number](classensight__grpc_1_1_en_sight_g_r_p_c.html#a318cc014659eca5cb27f7ca79bda0fe9) += 1

<a id="l00314" name="l00314"></a> 314 

<a id="l00315" name="l00315"></a> 315 

<a id="l00321" name="l00321"></a> 321 def poll_images(self):

<a id="l00322" name="l00322"></a> 322 try:

<a id="l00323" name="l00323"></a> 323 while self.[\_stub](classensight__grpc_1_1_en_sight_g_r_p_c.html#a8d6e08882d55ce3c7fbd837bedfc0d98) is not None:

<a id="l00324" name="l00324"></a> 324 if self.[\_shmem\_client](classensight__grpc_1_1_en_sight_g_r_p_c.html#a7cc44f4eb01c9bfe14a17d01dc8d8d36) is not None:

<a id="l00325" name="l00325"></a> 325 img = ensight_grpc_shmem.stream_lock(self.[\_shmem\_client](classensight__grpc_1_1_en_sight_g_r_p_c.html#a7cc44f4eb01c9bfe14a17d01dc8d8d36))

<a id="l00326" name="l00326"></a> 326 if type(img) is dict:

<a id="l00327" name="l00327"></a> 327 the_image = dict(pixels=img['pixeldata'],

<a id="l00328" name="l00328"></a> 328 width=img['width'],

<a id="l00329" name="l00329"></a> 329 height=img['height'])

<a id="l00330" name="l00330"></a> 330 self.[put\_image](classensight__grpc_1_1_en_sight_g_r_p_c.html#adb5e8c7c71fa4b9fe173304469c072f0)(the_image)

<a id="l00331" name="l00331"></a> 331 ensight_grpc_shmem.stream_unlock(self.[\_shmem\_client](classensight__grpc_1_1_en_sight_g_r_p_c.html#a7cc44f4eb01c9bfe14a17d01dc8d8d36))

<a id="l00332" name="l00332"></a> 332 

<a id="l00333" name="l00333"></a> 333 if self.[\_image\_stream](classensight__grpc_1_1_en_sight_g_r_p_c.html#aefa2e7fffb9d88723e08ca8a17b56b62) is not None:

<a id="l00334" name="l00334"></a> 334 img = self.[\_image\_stream](classensight__grpc_1_1_en_sight_g_r_p_c.html#aefa2e7fffb9d88723e08ca8a17b56b62).next()

<a id="l00335" name="l00335"></a> 335 buffer = img.pixels

<a id="l00336" name="l00336"></a> 336 

<a id="l00337" name="l00337"></a> 337 while not img.final:

<a id="l00338" name="l00338"></a> 338 img = self.[\_image\_stream](classensight__grpc_1_1_en_sight_g_r_p_c.html#aefa2e7fffb9d88723e08ca8a17b56b62).next()

<a id="l00339" name="l00339"></a> 339 buffer += img.pixels

<a id="l00340" name="l00340"></a> 340 

<a id="l00341" name="l00341"></a> 341 the_image = dict(pixels=buffer, width=img.width, height=img.height)

<a id="l00342" name="l00342"></a> 342 self.[put\_image](classensight__grpc_1_1_en_sight_g_r_p_c.html#adb5e8c7c71fa4b9fe173304469c072f0)(the_image)

<a id="l00343" name="l00343"></a> 343 except:

<a id="l00344" name="l00344"></a> 344 \# signal that the gRPC connection has broken

<a id="l00345" name="l00345"></a> 345 self.[\_image\_stream](classensight__grpc_1_1_en_sight_g_r_p_c.html#aefa2e7fffb9d88723e08ca8a17b56b62) = None

<a id="l00346" name="l00346"></a> 346 self.[\_image\_thread](classensight__grpc_1_1_en_sight_g_r_p_c.html#a660df97b19f908d161ac673c582465e1)[\_image\_thread](classensight__grpc_1_1_en_sight_g_r_p_c.html#a660df97b19f908d161ac673c582465e1) = None

<a id="l00347" name="l00347"></a> 347 self.[\_image](classensight__grpc_1_1_en_sight_g_r_p_c.html#a6e8208612ce6492e8702f0fcdfe32901)[\_image](classensight__grpc_1_1_en_sight_g_r_p_c.html#a15288e6ad79606e879dae75e97e4b152) = None

<a id="l00348" name="l00348"></a> 348 

<a id="l00349" name="l00349"></a> 349 

<a id="l00354" name="l00354"></a>[ 354](classensight__grpc_1_1_en_sight_g_r_p_c.html#a379795a64f880d99d2431a2630b563b6) def [image\_stream\_is\_enabled](classensight__grpc_1_1_en_sight_g_r_p_c.html#a379795a64f880d99d2431a2630b563b6)(self):

<a id="l00355" name="l00355"></a> 355 return self.[\_image\_stream](classensight__grpc_1_1_en_sight_g_r_p_c.html#aefa2e7fffb9d88723e08ca8a17b56b62) is not None

<a id="l00356" name="l00356"></a> 356 



<a id="l00357" name="l00357"></a> 357 

<a id="l00363" name="l00363"></a>[ 363](classensight__grpc_1_1_en_sight_g_r_p_c.html#a5d3b64348df49096a0dbde149139f879) def [prefix](classensight__grpc_1_1_en_sight_g_r_p_c.html#a5d3b64348df49096a0dbde149139f879)(self):

<a id="l00364" name="l00364"></a> 364 \# prefix URIs will have the format: "grpc://{uuid}/{callbackname}?enum={}&amp;uid={}"

<a id="l00365" name="l00365"></a> 365 if self.[\_prefix](classensight__grpc_1_1_en_sight_g_r_p_c.html#a3315104c5127852b071df26be56ed10e) is None:

<a id="l00366" name="l00366"></a> 366 self.[\_prefix](classensight__grpc_1_1_en_sight_g_r_p_c.html#a3315104c5127852b071df26be56ed10e) = "grpc://" + str(uuid.uuid1()) + "/"

<a id="l00367" name="l00367"></a> 367 return self.[\_prefix](classensight__grpc_1_1_en_sight_g_r_p_c.html#a3315104c5127852b071df26be56ed10e)

<a id="l00368" name="l00368"></a> 368 



<a id="l00369" name="l00369"></a> 369 

<a id="l00376" name="l00376"></a>[ 376](classensight__grpc_1_1_en_sight_g_r_p_c.html#a7dc80e5f8aa8725d5c6fa7e3f1a59d31) def [event\_stream\_enable](classensight__grpc_1_1_en_sight_g_r_p_c.html#a7dc80e5f8aa8725d5c6fa7e3f1a59d31)(self, callback = None, prefix = None):

<a id="l00377" name="l00377"></a> 377 if self.[\_event\_stream](classensight__grpc_1_1_en_sight_g_r_p_c.html#ade63e1260b8690a73b72f2d65b561096) is not None:

<a id="l00378" name="l00378"></a> 378 return

<a id="l00379" name="l00379"></a> 379 self.[\_event\_callback](classensight__grpc_1_1_en_sight_g_r_p_c.html#a54868c3a59ac189e258285885a48f65e) = callback

<a id="l00380" name="l00380"></a> 380 self.[connect](classensight__grpc_1_1_en_sight_g_r_p_c.html#a4f2fc7d6c856d4dcf6f2e3e231363798)()

<a id="l00381" name="l00381"></a> 381 pfx = prefix

<a id="l00382" name="l00382"></a> 382 if pfx is None:

<a id="l00383" name="l00383"></a> 383 pfx = self.[prefix](classensight__grpc_1_1_en_sight_g_r_p_c.html#a5d3b64348df49096a0dbde149139f879)()

<a id="l00384" name="l00384"></a> 384 self.[\_event\_stream](classensight__grpc_1_1_en_sight_g_r_p_c.html#ade63e1260b8690a73b72f2d65b561096) = self.[\_stub](classensight__grpc_1_1_en_sight_g_r_p_c.html#a8d6e08882d55ce3c7fbd837bedfc0d98).GetEventStream(

<a id="l00385" name="l00385"></a> 385 ensight_pb2.EventStreamRequest(prefix=pfx), metadata=self.[metadata](classensight__grpc_1_1_en_sight_g_r_p_c.html#ac0de7184d0b339cadf5d310d1f250b5e)())

<a id="l00386" name="l00386"></a> 386 self.[\_event\_thread](classensight__grpc_1_1_en_sight_g_r_p_c.html#a98f82222b0e4dcbf23f28ed20168a94e)[\_event\_thread](classensight__grpc_1_1_en_sight_g_r_p_c.html#adb6212d9d177108c32bfefa60fd16b88) = threading.Thread(target=self.[poll\_events](classensight__grpc_1_1_en_sight_g_r_p_c.html#a074fd513b2e8d65b652ccb2f60cb0fd6))

<a id="l00387" name="l00387"></a> 387 self.[\_event\_thread](classensight__grpc_1_1_en_sight_g_r_p_c.html#a98f82222b0e4dcbf23f28ed20168a94e)[\_event\_thread](classensight__grpc_1_1_en_sight_g_r_p_c.html#adb6212d9d177108c32bfefa60fd16b88).daemon = True

<a id="l00388" name="l00388"></a> 388 self.[\_event\_thread](classensight__grpc_1_1_en_sight_g_r_p_c.html#a98f82222b0e4dcbf23f28ed20168a94e)[\_event\_thread](classensight__grpc_1_1_en_sight_g_r_p_c.html#adb6212d9d177108c32bfefa60fd16b88).start()

<a id="l00389" name="l00389"></a> 389 



<a id="l00390" name="l00390"></a> 390 

<a id="l00396" name="l00396"></a>[ 396](classensight__grpc_1_1_en_sight_g_r_p_c.html#ab9b3a6b2ad658629f634f1edca7f9e52) def [dynamic\_scene\_graph\_stream](classensight__grpc_1_1_en_sight_g_r_p_c.html#ab9b3a6b2ad658629f634f1edca7f9e52)(self, client_cmds):

<a id="l00397" name="l00397"></a> 397 self.[connect](classensight__grpc_1_1_en_sight_g_r_p_c.html#a4f2fc7d6c856d4dcf6f2e3e231363798)()

<a id="l00398" name="l00398"></a> 398 return self.[\_dsg\_stub](classensight__grpc_1_1_en_sight_g_r_p_c.html#a44561d8bec5adfc5fe51978b5f4dd6fb).GetSceneStream(client_cmds, metadata=self.[metadata](classensight__grpc_1_1_en_sight_g_r_p_c.html#ac0de7184d0b339cadf5d310d1f250b5e)())

<a id="l00399" name="l00399"></a> 399 



<a id="l00400" name="l00400"></a> 400 

<a id="l00405" name="l00405"></a>[ 405](classensight__grpc_1_1_en_sight_g_r_p_c.html#a28a17851622d8b1bec1761e7cec3f72b) def [event\_stream\_is\_enabled](classensight__grpc_1_1_en_sight_g_r_p_c.html#a28a17851622d8b1bec1761e7cec3f72b)(self):

<a id="l00406" name="l00406"></a> 406 return self.[\_event\_stream](classensight__grpc_1_1_en_sight_g_r_p_c.html#ade63e1260b8690a73b72f2d65b561096) is not None

<a id="l00407" name="l00407"></a> 407 



<a id="l00408" name="l00408"></a> 408 

<a id="l00415" name="l00415"></a>[ 415](classensight__grpc_1_1_en_sight_g_r_p_c.html#abeb5e016abf00b41863f0d1504998302) def [get\_event](classensight__grpc_1_1_en_sight_g_r_p_c.html#abeb5e016abf00b41863f0d1504998302)(self):

<a id="l00416" name="l00416"></a> 416 try:

<a id="l00417" name="l00417"></a> 417 return self.[\_events](classensight__grpc_1_1_en_sight_g_r_p_c.html#ac385f5b18232bcec204b028221602427).pop(0)

<a id="l00418" name="l00418"></a> 418 except IndexError:

<a id="l00419" name="l00419"></a> 419 return None

<a id="l00420" name="l00420"></a> 420 



<a id="l00421" name="l00421"></a> 421 

<a id="l00427" name="l00427"></a> 427 def put_event(self, evt):

<a id="l00428" name="l00428"></a> 428 if self.[\_event\_callback](classensight__grpc_1_1_en_sight_g_r_p_c.html#a54868c3a59ac189e258285885a48f65e):

<a id="l00429" name="l00429"></a> 429 self.[\_event\_callback](classensight__grpc_1_1_en_sight_g_r_p_c.html#a54868c3a59ac189e258285885a48f65e)(evt.tag)

<a id="l00430" name="l00430"></a> 430 return

<a id="l00431" name="l00431"></a> 431 self.[\_events](classensight__grpc_1_1_en_sight_g_r_p_c.html#ac385f5b18232bcec204b028221602427).append(evt)

<a id="l00432" name="l00432"></a> 432 

<a id="l00433" name="l00433"></a> 433 

<a id="l00439" name="l00439"></a> 439 def poll_events(self):

<a id="l00440" name="l00440"></a> 440 try:

<a id="l00441" name="l00441"></a> 441 while self.[\_stub](classensight__grpc_1_1_en_sight_g_r_p_c.html#a8d6e08882d55ce3c7fbd837bedfc0d98) is not None:

<a id="l00442" name="l00442"></a> 442 evt = self.[\_event\_stream](classensight__grpc_1_1_en_sight_g_r_p_c.html#ade63e1260b8690a73b72f2d65b561096).next()

<a id="l00443" name="l00443"></a> 443 self.[put\_event](classensight__grpc_1_1_en_sight_g_r_p_c.html#aa133dbf8b669b1093004b8b6dca799ba)(evt)

<a id="l00444" name="l00444"></a> 444 except:

<a id="l00445" name="l00445"></a> 445 \# signal that the gRPC connection has broken

<a id="l00446" name="l00446"></a> 446 self.[\_event\_stream](classensight__grpc_1_1_en_sight_g_r_p_c.html#ade63e1260b8690a73b72f2d65b561096) = None

<a id="l00447" name="l00447"></a> 447 self.[\_event\_thread](classensight__grpc_1_1_en_sight_g_r_p_c.html#a98f82222b0e4dcbf23f28ed20168a94e)[\_event\_thread](classensight__grpc_1_1_en_sight_g_r_p_c.html#adb6212d9d177108c32bfefa60fd16b88) = None

<a id="l00448" name="l00448"></a> 448 

<a id="l00449" name="l00449"></a> 449 

<a id="l00457" name="l00457"></a> 457 def start_sub_service(self):

<a id="l00458" name="l00458"></a> 458 try:

<a id="l00459" name="l00459"></a> 459 if self.[\_sub\_service](classensight__grpc_1_1_en_sight_g_r_p_c.html#aa94401a916262c38e1173cca04c9390c) is not None:

<a id="l00460" name="l00460"></a> 460 return

<a id="l00461" name="l00461"></a> 461 self.[\_sub\_service](classensight__grpc_1_1_en_sight_g_r_p_c.html#aa94401a916262c38e1173cca04c9390c) = EnSightSubServicer(parent=self)

<a id="l00462" name="l00462"></a> 462 self.[\_sub\_service](classensight__grpc_1_1_en_sight_g_r_p_c.html#aa94401a916262c38e1173cca04c9390c).start()

<a id="l00463" name="l00463"></a> 463 except:

<a id="l00464" name="l00464"></a> 464 self.[\_sub\_service](classensight__grpc_1_1_en_sight_g_r_p_c.html#aa94401a916262c38e1173cca04c9390c) = None

<a id="l00465" name="l00465"></a> 465 

<a id="l00466" name="l00466"></a> 466 

<a id="l00471" name="l00471"></a>[ 471](classensight__grpc_1_1_en_sight_g_r_p_c.html#a7b5e49fae332121d1e04d76d45a67137) def [subscribe\_events](classensight__grpc_1_1_en_sight_g_r_p_c.html#a7b5e49fae332121d1e04d76d45a67137)(self):

<a id="l00472" name="l00472"></a> 472 self.[start\_sub\_service](classensight__grpc_1_1_en_sight_g_r_p_c.html#a8bc10a94e950eaaff11eee0f4417fac8)()

<a id="l00473" name="l00473"></a> 473 self.[connect](classensight__grpc_1_1_en_sight_g_r_p_c.html#a4f2fc7d6c856d4dcf6f2e3e231363798)()

<a id="l00474" name="l00474"></a> 474 conn_type = ensight_pb2.SubscribeEventOptions.GRPC

<a id="l00475" name="l00475"></a> 475 options = dict(uri=self.[\_sub\_service](classensight__grpc_1_1_en_sight_g_r_p_c.html#aa94401a916262c38e1173cca04c9390c)._uri)

<a id="l00476" name="l00476"></a> 476 event_options = ensight_pb2.SubscribeEventOptions(prefix=self.[prefix](classensight__grpc_1_1_en_sight_g_r_p_c.html#a5d3b64348df49096a0dbde149139f879)(), type=conn_type,

<a id="l00477" name="l00477"></a> 477 options=options)

<a id="l00478" name="l00478"></a> 478 _ = self.[\_stub](classensight__grpc_1_1_en_sight_g_r_p_c.html#a8d6e08882d55ce3c7fbd837bedfc0d98).SubscribeEvents(event_options, metadata=self.[metadata](classensight__grpc_1_1_en_sight_g_r_p_c.html#ac0de7184d0b339cadf5d310d1f250b5e)())

<a id="l00479" name="l00479"></a> 479 



<a id="l00480" name="l00480"></a> 480 

<a id="l00488" name="l00488"></a>[ 488](classensight__grpc_1_1_en_sight_g_r_p_c.html#ab85ca09445ac36ea1cfbd599c8809941) def [subscribe\_images](classensight__grpc_1_1_en_sight_g_r_p_c.html#ab85ca09445ac36ea1cfbd599c8809941)(self, flip_vertical=False, use_shmem=True):

<a id="l00489" name="l00489"></a> 489 self.[connect](classensight__grpc_1_1_en_sight_g_r_p_c.html#a4f2fc7d6c856d4dcf6f2e3e231363798)()

<a id="l00490" name="l00490"></a> 490 if use_shmem:

<a id="l00491" name="l00491"></a> 491 try:

<a id="l00492" name="l00492"></a> 492 \# we need a shared memory file

<a id="l00493" name="l00493"></a> 493 self.[\_shmem\_filename](classensight__grpc_1_1_en_sight_g_r_p_c.html#afb65fb2ac55da0dfc23022eb188656fc) = self.[find\_filename](classensight__grpc_1_1_en_sight_g_r_p_c.html#ac86edde0adfc5bc2b7281105e7bf2600)()

<a id="l00494" name="l00494"></a> 494 if self.[\_shmem\_filename](classensight__grpc_1_1_en_sight_g_r_p_c.html#afb65fb2ac55da0dfc23022eb188656fc) is not None:

<a id="l00495" name="l00495"></a> 495 conn_type = ensight_pb2.SubscribeImageOptions.SHARED_MEM

<a id="l00496" name="l00496"></a> 496 options = dict(filename=self.[\_shmem\_filename](classensight__grpc_1_1_en_sight_g_r_p_c.html#afb65fb2ac55da0dfc23022eb188656fc))

<a id="l00497" name="l00497"></a> 497 image_options = ensight_pb2.SubscribeImageOptions(prefix=self.[prefix](classensight__grpc_1_1_en_sight_g_r_p_c.html#a5d3b64348df49096a0dbde149139f879)(),

<a id="l00498" name="l00498"></a> 498 type=conn_type,

<a id="l00499" name="l00499"></a> 499 options=options,

<a id="l00500" name="l00500"></a> 500 flip_vertical=flip_vertical,

<a id="l00501" name="l00501"></a> 501 chunk=False)

<a id="l00502" name="l00502"></a> 502 test = self.[\_stub](classensight__grpc_1_1_en_sight_g_r_p_c.html#a8d6e08882d55ce3c7fbd837bedfc0d98).SubscribeImages(image_options, metadata=self.[metadata](classensight__grpc_1_1_en_sight_g_r_p_c.html#ac0de7184d0b339cadf5d310d1f250b5e)())

<a id="l00503" name="l00503"></a> 503 \# start the local server

<a id="l00504" name="l00504"></a> 504 self.[\_shmem\_client](classensight__grpc_1_1_en_sight_g_r_p_c.html#a7cc44f4eb01c9bfe14a17d01dc8d8d36) = ensight_grpc_shmem.stream_create(self.[\_shmem\_filename](classensight__grpc_1_1_en_sight_g_r_p_c.html#afb65fb2ac55da0dfc23022eb188656fc))

<a id="l00505" name="l00505"></a> 505 \# turn on the polling thread

<a id="l00506" name="l00506"></a> 506 self.[\_image\_thread](classensight__grpc_1_1_en_sight_g_r_p_c.html#a660df97b19f908d161ac673c582465e1)[\_image\_thread](classensight__grpc_1_1_en_sight_g_r_p_c.html#a660df97b19f908d161ac673c582465e1) = threading.Thread(target=self.[poll\_images](classensight__grpc_1_1_en_sight_g_r_p_c.html#a15672cc936301a8d49775439beeddd69))

<a id="l00507" name="l00507"></a> 507 self.[\_image\_thread](classensight__grpc_1_1_en_sight_g_r_p_c.html#a660df97b19f908d161ac673c582465e1)[\_image\_thread](classensight__grpc_1_1_en_sight_g_r_p_c.html#a660df97b19f908d161ac673c582465e1).daemon = True

<a id="l00508" name="l00508"></a> 508 self.[\_image\_thread](classensight__grpc_1_1_en_sight_g_r_p_c.html#a660df97b19f908d161ac673c582465e1)[\_image\_thread](classensight__grpc_1_1_en_sight_g_r_p_c.html#a660df97b19f908d161ac673c582465e1).start()

<a id="l00509" name="l00509"></a> 509 return

<a id="l00510" name="l00510"></a> 510 except Exception as e:

<a id="l00511" name="l00511"></a> 511 print("Unable to subscribe to an image stream via shared memory: {}".format(str(e)))

<a id="l00512" name="l00512"></a> 512 

<a id="l00513" name="l00513"></a> 513 self.[start\_sub\_service](classensight__grpc_1_1_en_sight_g_r_p_c.html#a8bc10a94e950eaaff11eee0f4417fac8)()

<a id="l00514" name="l00514"></a> 514 conn_type = ensight_pb2.SubscribeImageOptions.GRPC

<a id="l00515" name="l00515"></a> 515 options = dict(uri=self.[\_sub\_service](classensight__grpc_1_1_en_sight_g_r_p_c.html#aa94401a916262c38e1173cca04c9390c)._uri)

<a id="l00516" name="l00516"></a> 516 image_options = ensight_pb2.SubscribeImageOptions(prefix=self.[prefix](classensight__grpc_1_1_en_sight_g_r_p_c.html#a5d3b64348df49096a0dbde149139f879)(),

<a id="l00517" name="l00517"></a> 517 type=conn_type,

<a id="l00518" name="l00518"></a> 518 options=options,

<a id="l00519" name="l00519"></a> 519 flip_vertical=flip_vertical,

<a id="l00520" name="l00520"></a> 520 chunk=True)

<a id="l00521" name="l00521"></a> 521 _ = self.[\_stub](classensight__grpc_1_1_en_sight_g_r_p_c.html#a8d6e08882d55ce3c7fbd837bedfc0d98).SubscribeImages(image_options, metadata=self.[metadata](classensight__grpc_1_1_en_sight_g_r_p_c.html#ac0de7184d0b339cadf5d310d1f250b5e)())

<a id="l00522" name="l00522"></a> 522 



<a id="l00523" name="l00523"></a> 523 

<a id="l00527" name="l00527"></a>[ 527](classensight__grpc_1_1_en_sight_g_r_p_c.html#a0445321eb920fd2e62a055a11d378d08) def [unsubscribe](classensight__grpc_1_1_en_sight_g_r_p_c.html#a0445321eb920fd2e62a055a11d378d08)(self):

<a id="l00528" name="l00528"></a> 528 if self.[is\_connected](classensight__grpc_1_1_en_sight_g_r_p_c.html#aeedd915d0824e94193e8ce5af0fd02ff)():

<a id="l00529" name="l00529"></a> 529 if self.[\_sub\_service](classensight__grpc_1_1_en_sight_g_r_p_c.html#aa94401a916262c38e1173cca04c9390c) is not None:

<a id="l00530" name="l00530"></a> 530 prefix = ensight_pb2.Prefix(prefix=self.[prefix](classensight__grpc_1_1_en_sight_g_r_p_c.html#a5d3b64348df49096a0dbde149139f879)())

<a id="l00531" name="l00531"></a> 531 self.[\_stub](classensight__grpc_1_1_en_sight_g_r_p_c.html#a8d6e08882d55ce3c7fbd837bedfc0d98).Unsubscribe(prefix, metadata=self.[metadata](classensight__grpc_1_1_en_sight_g_r_p_c.html#ac0de7184d0b339cadf5d310d1f250b5e)())

<a id="l00532" name="l00532"></a> 532 self.[\_sub\_service](classensight__grpc_1_1_en_sight_g_r_p_c.html#aa94401a916262c38e1173cca04c9390c) = None

<a id="l00533" name="l00533"></a> 533 



<a id="l00534" name="l00534"></a> 534 

<a id="l00540" name="l00540"></a> 540 @classmethod

<a id="l00541" name="l00541"></a> 541 def find_filename(cls, size=1024*1024*25):

<a id="l00542" name="l00542"></a> 542 for i in range(100):

<a id="l00543" name="l00543"></a> 543 filename = os.path.join(os.getcwd(), "shmem\_{}.bin".format(os.getpid()+i))

<a id="l00544" name="l00544"></a> 544 if not os.path.exists(filename):

<a id="l00545" name="l00545"></a> 545 try:

<a id="l00546" name="l00546"></a> 546 tmp = open(filename, "wb")

<a id="l00547" name="l00547"></a> 547 tmp.write(b'\\0'*size) \# 25MB

<a id="l00548" name="l00548"></a> 548 tmp.close()

<a id="l00549" name="l00549"></a> 549 return filename

<a id="l00550" name="l00550"></a> 550 except:

<a id="l00551" name="l00551"></a> 551 pass

<a id="l00552" name="l00552"></a> 552 return None

<a id="l00553" name="l00553"></a> 553 

<a id="l00554" name="l00554"></a> 554 



<a id="l00555" name="l00555"></a> 555 

<a id="l00568" name="l00568"></a> 568class EnSightSubServicer(ensight_pb2_grpc.EnSightSubscriptionServicer):

<a id="l00569" name="l00569"></a> 569 

<a id="l00570" name="l00570"></a> 570 def [\_\_init\_\_](classensight__grpc_1_1_en_sight_g_r_p_c.html#a8d059169e231ebc10a0467ee2ba5fec2)(self, parent=None):

<a id="l00571" name="l00571"></a> 571 self._server = None

<a id="l00572" name="l00572"></a> 572 self._uri = ""

<a id="l00573" name="l00573"></a> 573 self._parent = parent

<a id="l00574" name="l00574"></a> 574 

<a id="l00575" name="l00575"></a> 575 def PublishEvent(self, request, context):

<a id="l00576" name="l00576"></a> 576 if self._parent is not None:

<a id="l00577" name="l00577"></a> 577 self._parent.put_event(request)

<a id="l00578" name="l00578"></a> 578 return ensight_pb2.GenericResponse(str='Event Published')

<a id="l00579" name="l00579"></a> 579 

<a id="l00580" name="l00580"></a> 580 def PublishImage(self, request_iterator, context):

<a id="l00581" name="l00581"></a> 581 img = request_iterator.next()

<a id="l00582" name="l00582"></a> 582 buffer = img.pixels

<a id="l00583" name="l00583"></a> 583 while not img.final:

<a id="l00584" name="l00584"></a> 584 img = request_iterator.next()

<a id="l00585" name="l00585"></a> 585 buffer += img.pixels

<a id="l00586" name="l00586"></a> 586 the_image = dict(pixels=buffer, width=img.width, height=img.height)

<a id="l00587" name="l00587"></a> 587 if self._parent is not None:

<a id="l00588" name="l00588"></a> 588 self._parent.put_image(the_image)

<a id="l00589" name="l00589"></a> 589 return ensight_pb2.GenericResponse(str='Image Published')

<a id="l00590" name="l00590"></a> 590 

<a id="l00591" name="l00591"></a> 591 def start(self):

<a id="l00592" name="l00592"></a> 592 self._server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))

<a id="l00593" name="l00593"></a> 593 ensight_pb2_grpc.add_EnSightSubscriptionServicer_to_server(

<a id="l00594" name="l00594"></a> 594 self, self._server)

<a id="l00595" name="l00595"></a> 595 \# Start the server on localhost with a random port

<a id="l00596" name="l00596"></a> 596 port = self._server.add_insecure_port('localhost:0')

<a id="l00597" name="l00597"></a> 597 self._uri = 'localhost:' + str(port)

<a id="l00598" name="l00598"></a> 598 self._server.start()

<a id="l00599" name="l00599"></a> 599 

<a id="l00600" name="l00600"></a> 600 

[ensight\_grpc.EnSightGRPC](classensight__grpc_1_1_en_sight_g_r_p_c.html)

Python binding for the EnSight client gRPC API.

**Definition** [ensight\_grpc.py:35](#l00035)



[ensight\_grpc.EnSightGRPC.unsubscribe](classensight__grpc_1_1_en_sight_g_r_p_c.html#a0445321eb920fd2e62a055a11d378d08)

unsubscribe(self)

unsubscribe from any image or event streams that have been subscribed to

**Definition** [ensight\_grpc.py:527](#l00527)



[ensight\_grpc.EnSightGRPC.render](classensight__grpc_1_1_en_sight_g_r_p_c.html#a0586cf3dc58ad8dcb132ac786ff82e19)

render(self, width=640, height=480, aa=1, raw=False, highlighting=False)

render the current EnSight screen and return the image

**Definition** [ensight\_grpc.py:215](#l00215)



[ensight\_grpc.EnSightGRPC.poll\_events](classensight__grpc_1_1_en_sight_g_r_p_c.html#a074fd513b2e8d65b652ccb2f60cb0fd6)

poll_events(self)

**Definition** [ensight\_grpc.py:439](#l00439)



[ensight\_grpc.EnSightGRPC.set\_security\_token](classensight__grpc_1_1_en_sight_g_r_p_c.html#a0cd63b73616a71f1f628fec85485f6ee)

set_security_token(self, n)

set the security token for the gRPC connection.

**Definition** [ensight\_grpc.py:92](#l00092)



[ensight\_grpc.EnSightGRPC.command](classensight__grpc_1_1_en_sight_g_r_p_c.html#a10bf46c7b7de39dc76a69a8873badbd7)

command(self, command_string, do_eval=True, json=False, raw_eval=False)

send a Python command string to be executed in EnSight

**Definition** [ensight\_grpc.py:254](#l00254)



[ensight\_grpc.EnSightGRPC.\_image](classensight__grpc_1_1_en_sight_g_r_p_c.html#a15288e6ad79606e879dae75e97e4b152)

int _image

**Definition** [ensight\_grpc.py:312](#l00312)



[ensight\_grpc.EnSightGRPC.poll\_images](classensight__grpc_1_1_en_sight_g_r_p_c.html#a15672cc936301a8d49775439beeddd69)

poll_images(self)

**Definition** [ensight\_grpc.py:321](#l00321)



[ensight\_grpc.EnSightGRPC.event\_stream\_is\_enabled](classensight__grpc_1_1_en_sight_g_r_p_c.html#a28a17851622d8b1bec1761e7cec3f72b)

event_stream_is_enabled(self)

check to see if the event stream is enabled

**Definition** [ensight\_grpc.py:405](#l00405)



[ensight\_grpc.EnSightGRPC.image\_stream\_enable](classensight__grpc_1_1_en_sight_g_r_p_c.html#a2edadc71c7d20b1d1e9872a9f7f01ab3)

image_stream_enable(self, flip_vertical=False)

enable a simple gRPC-based image stream from EnSight

**Definition** [ensight\_grpc.py:284](#l00284)



[ensight\_grpc.EnSightGRPC.\_image\_number](classensight__grpc_1_1_en_sight_g_r_p_c.html#a318cc014659eca5cb27f7ca79bda0fe9)

int _image_number

**Definition** [ensight\_grpc.py:59](#l00059)



[ensight\_grpc.EnSightGRPC.\_port](classensight__grpc_1_1_en_sight_g_r_p_c.html#a3288be89c9ab636283cb59df9fe0dc17)

_port

**Definition** [ensight\_grpc.py:47](#l00047)



[ensight\_grpc.EnSightGRPC.\_prefix](classensight__grpc_1_1_en_sight_g_r_p_c.html#a3315104c5127852b071df26be56ed10e)

str _prefix

**Definition** [ensight\_grpc.py:66](#l00066)



[ensight\_grpc.EnSightGRPC.image\_stream\_is\_enabled](classensight__grpc_1_1_en_sight_g_r_p_c.html#a379795a64f880d99d2431a2630b563b6)

image_stream_is_enabled(self)

check to see if the image stream is enabled

**Definition** [ensight\_grpc.py:354](#l00354)



[ensight\_grpc.EnSightGRPC.\_dsg\_stub](classensight__grpc_1_1_en_sight_g_r_p_c.html#a44561d8bec5adfc5fe51978b5f4dd6fb)

_dsg_stub

**Definition** [ensight\_grpc.py:51](#l00051)



[ensight\_grpc.EnSightGRPC.\_version](classensight__grpc_1_1_en_sight_g_r_p_c.html#a4ed120bd2b7a2a477bf0c19dc1765fce)

_version

**Definition** [ensight\_grpc.py:52](#l00052)



[ensight\_grpc.EnSightGRPC.connect](classensight__grpc_1_1_en_sight_g_r_p_c.html#a4f2fc7d6c856d4dcf6f2e3e231363798)

connect(self, timeout=15.0)

establish a connection to an EnSight gRPC server

**Definition** [ensight\_grpc.py:177](#l00177)



[ensight\_grpc.EnSightGRPC.\_event\_callback](classensight__grpc_1_1_en_sight_g_r_p_c.html#a54868c3a59ac189e258285885a48f65e)

_event_callback

**Definition** [ensight\_grpc.py:68](#l00068)



[ensight\_grpc.EnSightGRPC.get\_image](classensight__grpc_1_1_en_sight_g_r_p_c.html#a5a0f0f154bd96f67e0edadcbb58a3a2e)

get_image(self)

retrieve the current EnSight image

**Definition** [ensight\_grpc.py:302](#l00302)



[ensight\_grpc.EnSightGRPC.prefix](classensight__grpc_1_1_en_sight_g_r_p_c.html#a5d3b64348df49096a0dbde149139f879)

prefix(self)

return the unique prefix for this instance

**Definition** [ensight\_grpc.py:363](#l00363)



[ensight\_grpc.EnSightGRPC.port](classensight__grpc_1_1_en_sight_g_r_p_c.html#a5f70502660ffb9346fe54f087bebaa31)

port(self)

get the port number for this connection

**Definition** [ensight\_grpc.py:80](#l00080)



[ensight\_grpc.EnSightGRPC.\_image\_thread](classensight__grpc_1_1_en_sight_g_r_p_c.html#a660df97b19f908d161ac673c582465e1)

_image_thread

**Definition** [ensight\_grpc.py:57](#l00057)



[ensight\_grpc.EnSightGRPC.\_image](classensight__grpc_1_1_en_sight_g_r_p_c.html#a6e8208612ce6492e8702f0fcdfe32901)

_image

**Definition** [ensight\_grpc.py:58](#l00058)



[ensight\_grpc.EnSightGRPC.stop\_server](classensight__grpc_1_1_en_sight_g_r_p_c.html#a7aab74443c5c3f7833ff8934c8341167)

stop_server(self)

shut down any gPRC connection made by this class

**Definition** [ensight\_grpc.py:153](#l00153)



[ensight\_grpc.EnSightGRPC.subscribe\_events](classensight__grpc_1_1_en_sight_g_r_p_c.html#a7b5e49fae332121d1e04d76d45a67137)

subscribe_events(self)

subscribe to an event stream using a locally launched gRPC server

**Definition** [ensight\_grpc.py:471](#l00471)



[ensight\_grpc.EnSightGRPC.\_shmem\_client](classensight__grpc_1_1_en_sight_g_r_p_c.html#a7cc44f4eb01c9bfe14a17d01dc8d8d36)

_shmem_client

**Definition** [ensight\_grpc.py:60](#l00060)



[ensight\_grpc.EnSightGRPC.event\_stream\_enable](classensight__grpc_1_1_en_sight_g_r_p_c.html#a7dc80e5f8aa8725d5c6fa7e3f1a59d31)

event_stream_enable(self, callback=None, prefix=None)

enable a simple gRPC-based event stream from EnSight

**Definition** [ensight\_grpc.py:376](#l00376)



[ensight\_grpc.EnSightGRPC.security\_token](classensight__grpc_1_1_en_sight_g_r_p_c.html#a80081863c31f5d1e9924c110506122ab)

security_token(self)

return the security token for the gRPC connection.

**Definition** [ensight\_grpc.py:98](#l00098)



[ensight\_grpc.EnSightGRPC.host](classensight__grpc_1_1_en_sight_g_r_p_c.html#a81fd18bb67b4f81fb1cab9b5d6ecee99)

host(self)

get the hostname for this connection

**Definition** [ensight\_grpc.py:74](#l00074)



[ensight\_grpc.EnSightGRPC.start\_sub\_service](classensight__grpc_1_1_en_sight_g_r_p_c.html#a8bc10a94e950eaaff11eee0f4417fac8)

start_sub_service(self)

**Definition** [ensight\_grpc.py:457](#l00457)



[ensight\_grpc.EnSightGRPC.\_\_init\_\_](classensight__grpc_1_1_en_sight_g_r_p_c.html#a8d059169e231ebc10a0467ee2ba5fec2)

__init__(self, port=12345, host='127.0.0.1', version='')

create an instance of the EnSight gRPC interface wrapper

**Definition** [ensight\_grpc.py:45](#l00045)



[ensight\_grpc.EnSightGRPC.\_stub](classensight__grpc_1_1_en_sight_g_r_p_c.html#a8d6e08882d55ce3c7fbd837bedfc0d98)

_stub

**Definition** [ensight\_grpc.py:50](#l00050)



[ensight\_grpc.EnSightGRPC.geometry](classensight__grpc_1_1_en_sight_g_r_p_c.html#a9546b51614d2d88cabeaba4551218a36)

geometry(self)

return the current scene geometry in glTF format

**Definition** [ensight\_grpc.py:235](#l00235)



[ensight\_grpc.EnSightGRPC.\_event\_thread](classensight__grpc_1_1_en_sight_g_r_p_c.html#a98f82222b0e4dcbf23f28ed20168a94e)

_event_thread

**Definition** [ensight\_grpc.py:64](#l00064)



[ensight\_grpc.EnSightGRPC.put\_event](classensight__grpc_1_1_en_sight_g_r_p_c.html#aa133dbf8b669b1093004b8b6dca799ba)

put_event(self, evt)

**Definition** [ensight\_grpc.py:427](#l00427)



[ensight\_grpc.EnSightGRPC.shutdown](classensight__grpc_1_1_en_sight_g_r_p_c.html#aa197d33f6ae11c27024ace93f875cf2b)

shutdown(self)

shut down all gRPC connections

**Definition** [ensight\_grpc.py:105](#l00105)



[ensight\_grpc.EnSightGRPC.\_sub\_service](classensight__grpc_1_1_en_sight_g_r_p_c.html#aa94401a916262c38e1173cca04c9390c)

_sub_service

**Definition** [ensight\_grpc.py:67](#l00067)



[ensight\_grpc.EnSightGRPC.subscribe\_images](classensight__grpc_1_1_en_sight_g_r_p_c.html#ab85ca09445ac36ea1cfbd599c8809941)

subscribe_images(self, flip_vertical=False, use_shmem=True)

subscribe to an image stream

**Definition** [ensight\_grpc.py:488](#l00488)



[ensight\_grpc.EnSightGRPC.dynamic\_scene\_graph\_stream](classensight__grpc_1_1_en_sight_g_r_p_c.html#ab9b3a6b2ad658629f634f1edca7f9e52)

dynamic_scene_graph_stream(self, client_cmds)

open up a dynamic scene graph stream

**Definition** [ensight\_grpc.py:396](#l00396)



[ensight\_grpc.EnSightGRPC.\_channel](classensight__grpc_1_1_en_sight_g_r_p_c.html#abb7212c7e4ad9e7ef398bf5e13f15fb8)

_channel

**Definition** [ensight\_grpc.py:49](#l00049)



[ensight\_grpc.EnSightGRPC.\_pid](classensight__grpc_1_1_en_sight_g_r_p_c.html#abba6d94b9acc418d610e900aecbfd23c)

_pid

**Definition** [ensight\_grpc.py:48](#l00048)



[ensight\_grpc.EnSightGRPC.get\_event](classensight__grpc_1_1_en_sight_g_r_p_c.html#abeb5e016abf00b41863f0d1504998302)

get_event(self)

retrieve and remove the oldest ensightservice::EventReply string

**Definition** [ensight\_grpc.py:415](#l00415)



[ensight\_grpc.EnSightGRPC.metadata](classensight__grpc_1_1_en_sight_g_r_p_c.html#ac0de7184d0b339cadf5d310d1f250b5e)

metadata(self)

**Definition** [ensight\_grpc.py:197](#l00197)



[ensight\_grpc.EnSightGRPC.\_events](classensight__grpc_1_1_en_sight_g_r_p_c.html#ac385f5b18232bcec204b028221602427)

_events

**Definition** [ensight\_grpc.py:65](#l00065)



[ensight\_grpc.EnSightGRPC.find\_filename](classensight__grpc_1_1_en_sight_g_r_p_c.html#ac86edde0adfc5bc2b7281105e7bf2600)

find_filename(cls, size=1024 *1024 *25)

**Definition** [ensight\_grpc.py:541](#l00541)



[ensight\_grpc.EnSightGRPC.\_host](classensight__grpc_1_1_en_sight_g_r_p_c.html#acfa730cfcb568cc26f079996804ebb97)

_host

**Definition** [ensight\_grpc.py:46](#l00046)



[ensight\_grpc.EnSightGRPC.put\_image](classensight__grpc_1_1_en_sight_g_r_p_c.html#adb5e8c7c71fa4b9fe173304469c072f0)

put_image(self, the_image)

**Definition** [ensight\_grpc.py:311](#l00311)



[ensight\_grpc.EnSightGRPC.\_event\_thread](classensight__grpc_1_1_en_sight_g_r_p_c.html#adb6212d9d177108c32bfefa60fd16b88)

bool _event_thread

**Definition** [ensight\_grpc.py:386](#l00386)



[ensight\_grpc.EnSightGRPC.\_event\_stream](classensight__grpc_1_1_en_sight_g_r_p_c.html#ade63e1260b8690a73b72f2d65b561096)

_event_stream

**Definition** [ensight\_grpc.py:63](#l00063)



[ensight\_grpc.EnSightGRPC.start\_server](classensight__grpc_1_1_en_sight_g_r_p_c.html#ae8bda9000df12ffa158c3b99a2bb25c2)

start_server(self)

Start an EnSight gRPC server instance.

**Definition** [ensight\_grpc.py:128](#l00128)



[ensight\_grpc.EnSightGRPC.\_security\_token](classensight__grpc_1_1_en_sight_g_r_p_c.html#aec4f4d61de4dfe799e620a005945a016)

_security_token

**Definition** [ensight\_grpc.py:53](#l00053)



[ensight\_grpc.EnSightGRPC.is\_connected](classensight__grpc_1_1_en_sight_g_r_p_c.html#aeedd915d0824e94193e8ce5af0fd02ff)

is_connected(self)

check if a gRPC connection has been established

**Definition** [ensight\_grpc.py:168](#l00168)



[ensight\_grpc.EnSightGRPC.\_image\_stream](classensight__grpc_1_1_en_sight_g_r_p_c.html#aefa2e7fffb9d88723e08ca8a17b56b62)

_image_stream

**Definition** [ensight\_grpc.py:56](#l00056)



[ensight\_grpc.EnSightGRPC.\_shmem\_filename](classensight__grpc_1_1_en_sight_g_r_p_c.html#afb65fb2ac55da0dfc23022eb188656fc)

_shmem_filename

**Definition** [ensight\_grpc.py:61](#l00061)