예제 #1
0
파일: Util.cs 프로젝트: simonlut/Simulacrum
        public static string ReadVariable(ref Socket clientSocket, string variableRead, GH_Component component)
        {
            if (clientSocket == null)
            {
                throw new ArgumentNullException(nameof(clientSocket));
            }
            if (variableRead == null)
            {
                throw new ArgumentNullException(nameof(variableRead));
            }
            if (component == null)
            {
                throw new ArgumentNullException(nameof(component));
            }

            byte[] messageReq    = ReadMessageRequest(variableRead, out var outputString);
            byte[] receivedData  = new byte[256];
            int    receivedBytes = 0;

            try                                                //Try to receive message.
            {
                int sentBytes = clientSocket.Send(messageReq); //Request a specific message according to VarRead variable

                component.AddRuntimeMessage(GH_RuntimeMessageLevel.Remark,
                                            "Sent:" + sentBytes.ToString() + " bytes as " + outputString);
                component.Message = "Sent";

                receivedBytes = clientSocket.Receive(receivedData); //Receive data back.
            }
            catch (SocketException e)
            {
                component.ClearRuntimeMessages();
                component.AddRuntimeMessage(GH_RuntimeMessageLevel.Warning, "Your connection is abruptly closed by the host, make sure to check your cables and if the server is running.");
            }
            catch (ArgumentNullException e)
            {
                component.AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Read Variable :{0}" + e.ToString());
            }
            catch (ObjectDisposedException e)
            {
                component.AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Read Variable :{0}" + e.ToString());
            }
            catch (SecurityException e)
            {
                component.AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Write Variable Receive :{0}" + e.ToString());
            }

            //Format received data to extract value.
            MessageReceiveFormat response = new MessageReceiveFormat(receivedData);

            component.AddRuntimeMessage(GH_RuntimeMessageLevel.Remark, "Received:" + receivedBytes.ToString() + " bytes as" + response._varValue);
            component.Message = "Received";

            return(response._varValue);
        }