private void _messageStream_OnMessageReceived(MessageReader reader)
        {
            STCHeader header = (STCHeader)reader.ReadShort();

            switch (header)
            {
            case STCHeader.RESPONSE_COLOR_FRAME:
                ResponseColorFrame(reader); break;

            case STCHeader.RESPONSE_DEPTH_FRAME:
                ResponseDepthFrame(reader); break;

            case STCHeader.RESPONSE_BODY_FRAME:
                ResponseBodyFrame(reader); break;

            case STCHeader.SEND_ALL_SENSOR_INFO:
                ReceiveAllSensorInfo(reader); break;

            case STCHeader.SEND_NEW_SENSOR_INFO:
                ReceiveNewSensorInfo(reader); break;

            case STCHeader.SEND_CHANGED_SENSOR_INFO:
                ReceiveChangedSensorInfo(reader); break;

            case STCHeader.SEND_TRIGGER_EVENT_DATA:
                ReceiveTriggerEvent(reader);
                break;
            }
        }
        private void _lifeStream_OnMessageReceived(MessageReader reader)
        {
            STCHeader header = (STCHeader)reader.ReadShort();

            switch (header)
            {
            case STCHeader.REQUEST_PLATFORM_TYPE:
                _sessionId = reader.ReadInt();
                MessageWriter message = new MessageWriter(CTSHeader.HELLO_ACK);
                message.WriteInt(0);
                _lifeStream.Send(message);
                break;

            case STCHeader.REQUEST_PIPE_CONNECTION:
                string pipeName = reader.ReadString();
                _messageStream = new IPCStream(pipeName);
                _messageStream.OnMessageReceived    += _messageStream_OnMessageReceived;
                _messageStream.OnClientDisconnected += _messageStream_OnClientDisconnected;
                _messageStream.Send(new MessageWriter(CTSHeader.READY_CONNECTION_ACK));

                if (OnLoad != null)
                {
                    OnLoad.Invoke();
                }
                break;
            }
        }
示例#3
0
        //TCP
        void lifeStream_OnMessageReceived(MessageReader reader)
        {
            //서버로부터 받는 헤더를 읽습니다.
            STCHeader header = (STCHeader)reader.ReadShort();

            switch (header)
            {
            case STCHeader.REQUEST_DEVICE_KIND_TCP:
                sessionId = reader.ReadInt();

                //서버로 Device ID를 보냅니다.
                MessageWriter message = new MessageWriter(CTSHeader.SEND_DEVICE_KIND_TCP);
                message.WriteInt(0);
                lifeStream.Send(message);
                break;

            case STCHeader.SEND_PIPE_CONNECT_TCP:
                try
                {
                    //IPC 파이프의 이름을 받아옵니다.
                    string pipeName = reader.ReadString();
                    pipeClient_stc = new NamedPipeClient_In(pipeName + "_stc", this);     //Server to Client 파이프를 만듬
                    pipeClient_cts = new NamedPipeClient_Out(pipeName + "_cts", this);    //Client to Server 파이프를 만듬

                    //메세지를 보내고 받기 위한 스트림을 생성.
                    pipeStream_Get  = new IPCStream_In(pipeClient_stc, this);
                    pipeStream_Send = new IPCStream_Out(pipeClient_cts, this);

                    //IPC 메세지를 받았을 때 이벤트 등록
                    pipeStream_Get.OnMessageReceived += pipeStream_Get_OnMessageReceived;

                    pipeClient_stc.Start();     //데이터 받기 시작
                    pipeClient_cts.Start();     //데이터 보내기 시작

                    //파이프 연결 성공했다고 보냄
                    pipeStream_Send.Send(new MessageWriter(CTSHeader.SEND_PIPE_CONNECT_COMPLETE));

                    //연결되었다고 해줌.
                    isConnected = true;
                }
                catch (Exception e) { Console.WriteLine(e.Message); }
                break;
            }
        }
示例#4
0
 public MessageWriter(STCHeader pHeader)
 {
     _buffer    = new MemoryStream(0);
     _binWriter = new BinaryWriter(_buffer, Encoding.Default);
     WriteShort((short)pHeader);
 }
示例#5
0
        //IPC
        void pipeStream_Get_OnMessageReceived(MessageReader reader)
        {
            int       sensorID;
            bool      isCreated;
            string    mappedName;
            NuiSensor sensor = null;

            STCHeader header = (STCHeader)reader.ReadShort();

            switch (header)
            {
                #region Channel Making
            case STCHeader.SEND_COLORFRAME_SM_NAME:
                sensorID  = reader.ReadInt();
                isCreated = reader.ReadBool();

                if (connectedSensors.ContainsKey(sensorID) == false)
                {
                    return;
                }

                sensor = connectedSensors[sensorID];
                if (!isCreated)    //생성실패
                {
                    sensor.OpenColorFrameCallback(false, null);
                    return;
                }

                mappedName = reader.ReadString();
                //[수정요망] 맨 뒤쪽 channel 지금은 4로 강제해놓음.
                sensor.OpenColorFrameCallback(true, new ColorChannel(mappedName, sensor));
                break;

            case STCHeader.SEND_DEPTHFRAME_SM_NAME:
                sensorID  = reader.ReadInt();
                isCreated = reader.ReadBool();

                if (connectedSensors.ContainsKey(sensorID) == false)
                {
                    return;
                }

                sensor = connectedSensors[sensorID];
                if (!isCreated)    //생성실패
                {
                    sensor.OpenDepthFrameCallback(false, null);
                    return;
                }

                mappedName = reader.ReadString();
                sensor.OpenDepthFrameCallback(true, new DepthChannel(mappedName, sensor));
                break;

            case STCHeader.SEND_BODY_SM_NAME:
                sensorID  = reader.ReadInt();
                isCreated = reader.ReadBool();

                if (connectedSensors.ContainsKey(sensorID) == false)
                {
                    return;
                }

                sensor = connectedSensors[sensorID];
                if (!isCreated)    //생성실패
                {
                    sensor.OpenColorFrameCallback(false, null);
                    return;
                }

                mappedName = reader.ReadString();
                sensor.OpenBodyFrameCallback(true, new BodyChannel(mappedName, sensor));
                break;

                #endregion
                #region Sensor Datas
            //모든 센서 정보 보냄(처음에)
            case STCHeader.SEND_ALL_SENSOR_INFO:
                int sensorCount = reader.ReadInt();
                for (int i = 0; i < sensorCount; i++)
                {
                    sensor = MakeSensor(reader);
                }
                break;

            //새로 연결된 센서 정보 보냄
            case STCHeader.SEND_NEW_SENSOR_INFO:
                sensor = MakeSensor(reader);
                break;

            //state가 바뀐 센서 정보 보냄(여기서 삭제도 함.
            case STCHeader.SEND_SENSOR_STATE:
                int         id    = reader.ReadInt();
                SensorState state = (SensorState)reader.ReadInt();
                if (connectedSensors.ContainsKey(id))
                {
                    sensor       = connectedSensors[id];
                    sensor.state = state;
                    if (state == SensorState.UNKNOWN)
                    {
                        sensor.DisconnectedCallback();
                        connectedSensors.Remove(id);

                        if (OnSensorDisconnected != null)
                        {
                            Queue_Event(OnSensorDisconnected, sensor);
                        }
                    }
                }

                break;

            case STCHeader.SEND_TRIGGER_EVENT_DATA:
                ReceiveTriggerEvent(reader);
                break;
                #endregion
            }
        }