예제 #1
0
        //public BaseResult SubscribeVariable(SessionID sessionId, int senderId, TcpSocketManager tcpSocket)
        //{
        //    try
        //    {
        //        SharedState<MessageBuffer> globalValue = new SharedState<MessageBuffer>("ClipPlane", SharedStateType.ALWAYS_SHARE);
        //        MessageBuffer mb = globalValue.OnSessionEnter(sessionId, senderId);
        //        Message m = new Message(mb, Message.MessagesType.COVISE_MESSAGE_VRB_REGISTRY_SUBSCRIBE_VARIABLE, senderId);
        //        tcpSocket.send_msg_with_SenderId(m);
        //        return new BaseResult();
        //    }
        //    catch (Exception e)
        //    {
        //        log.Fatal("Method SubscribeVariable is Crashed!" + e);
        //        return new BaseResult(e);
        //    }
        //}

        //public BaseResult ChangeVariable(SessionID sessionId, int senderId, TcpSocketManager tcpSocket, string variableName, string variablValue)
        //{
        //    try
        //    {
        //        SharedState<MessageBuffer> globalValue = new SharedState<MessageBuffer>(variableName, SharedStateType.ALWAYS_SHARE);
        //        MessageBuffer mb = globalValue.ChangeSharedState(sessionId, senderId, variablValue);
        //        Message m = new Message(mb, Message.MessagesType.COVISE_MESSAGE_VRB_REGISTRY_SET_VALUE, senderId);
        //        tcpSocket.send_msg_with_SenderId(m);
        //        return new BaseResult();
        //    }
        //    catch (Exception e)
        //    {
        //        log.Fatal("Method ChangeVariable is Crashed!" + e);

        //        return new BaseResult(e);
        //    }
        //}

        //public BaseResult ChangeVariable(SessionID sessionId, int senderId, TcpSocketManager tcpSocket, string variableName, float[] variablValue)
        //{
        //    try
        //    {
        //        SharedState<MessageBuffer> globalValue = new SharedState<MessageBuffer>(variableName, SharedStateType.ALWAYS_SHARE);
        //        MessageBuffer mb = globalValue.ChangeSharedState(sessionId, senderId, variablValue);
        //        Message m = new Message(mb, Message.MessagesType.COVISE_MESSAGE_VRB_REGISTRY_SET_VALUE, senderId);
        //        tcpSocket.send_msg_with_SenderId(m);
        //        return new BaseResult();
        //    }
        //    catch (Exception e)
        //    {
        //        log.Fatal("Method ChangeVariable is Crashed!" + e);

        //        return new BaseResult(e);
        //    }
        //}

        public ValueResult <UserModel> ReadUser(ValueResult <UserModel> user)
        {
            try
            {
                var buffer = new byte[64000];
                var ns     = TcpClient.GetStream();

                while (true)
                {
                    int len = 0;
                    while (len < 16)
                    {
                        int numRead;
                        try
                        {
                            numRead = ns.Read(buffer, len, 16 - len);
                        }
                        catch (System.IO.IOException)
                        {
                            // probably socket closed
                            return(new ValueResult <UserModel>());
                        }
                        len += numRead;
                    }

                    int msgType = BitConverter.ToInt32(buffer, 2 * 4);
                    int length  = BitConverter.ToInt32(buffer, 3 * 4);
                    length  = (int)ByteSwap.swap((uint)length);
                    msgType = (int)ByteSwap.swap((uint)msgType);
                    len     = 0;
                    while (len < length)
                    {
                        int numRead;
                        try
                        {
                            numRead = ns.Read(buffer, len, length - len);
                        }
                        catch (System.IO.IOException)
                        {
                            // probably socket closed
                            return(new ValueResult <UserModel>());
                        }
                        len += numRead;
                    }
                    Message m = new Message(new MessageBuffer(buffer), (Message.MessagesType)msgType);
                    switch (m.Type)
                    {
                    case Message.MessagesType.COVISE_MESSAGE_VRB_GET_ID:
                        clientID          = m.message.readInt();
                        user.Value.UserId = clientID;
                        return(user);
                    }
                }
            }
            catch (Exception e)
            {
                log.Fatal("Method ReadUser is Crashed!" + e);
                return(null);
            }
        }
예제 #2
0
        public async Task <BaseResult> Read()
        {
            try
            {
                var buffer = new byte[64000];
                var ns     = TcpClient.GetStream();

                while (true)
                {
                    int len = 0;

                    while (len < 16)
                    {
                        if (ns.DataAvailable)
                        {
                            var numRead = await ns.ReadAsync(buffer, len, 16 - len);

                            if (numRead == 0)
                            {
                                return(new BaseResult());
                            }
                            len += numRead;
                        }
                    }
                    int msgType = BitConverter.ToInt32(buffer, 2 * 4);
                    int length  = BitConverter.ToInt32(buffer, 3 * 4);
                    length  = (int)ByteSwap.swap((uint)length);
                    msgType = (int)ByteSwap.swap((uint)msgType);
                    len     = 0;
                    var msgBuffer = new byte[length];
                    while (len < length)
                    {
                        try
                        {
                            var numRead = await ns.ReadAsync(msgBuffer, len, length - len);

                            if (numRead == 0)
                            {
                                return(new BaseResult());
                            }
                            len += numRead;
                        }
                        catch (System.IO.IOException e)
                        {
                        }
                    }

                    Message m = new Message(new MessageBuffer(msgBuffer), (Message.MessagesType)msgType);

                    switch (m.Type)
                    {
                    case Message.MessagesType.COVISE_MESSAGE_VRBC_SEND_SESSIONS:
                        int sessioncount = m.message.readInt();
                        MessageHandler.RoomList.Clear();
                        RoomList.Clear();
                        for (int i = 0; i < sessioncount; i++)
                        {
                            SessionID room = new SessionID();
                            SharedStateSerializer.deserialize(ref m.message, ref room);
                            if (room.m_isPrivate == false)
                            {
                                RoomList.Add(room);
                            }
                            else
                            {
                                RoomsViewModel.privateSession = room;
                            }
                        }
                        MessageHandler.addCurrentRooms(RoomList);
                        break;

                    case Message.MessagesType.COVISE_MESSAGE_VRBC_SET_SESSION:
                        SessionID currentSession = new SessionID();
                        SharedStateSerializer.deserialize(ref m.message, ref currentSession);
                        MessageHandler.addCurrentSession(currentSession);
                        SharedStateManager.Instance.update(new SessionID(clientID, clientID.ToString(), true), currentSession, false, false);
                        break;

                    case Message.MessagesType.COVISE_MESSAGE_VRB_REGISTRY_ENTRY_CHANGED:
                        int           senderID  = m.message.readInt();
                        string        className = m.message.readString();
                        string        variable  = m.message.readString();
                        MessageBuffer mb4       = m.message.readMessageBuffer();
                        SharedStateManager.Instance.updateSharedState(className, variable, mb4);
                        break;


                    case Message.MessagesType.COVISE_MESSAGE_VRB_SET_USERINFO:
                        int sessionSwitchUserId = m.message.readInt();
                        break;

                    case Message.MessagesType.COVISE_MESSAGE_VRB_QUIT:
                        int    disconnectedUserId  = m.message.readInt();
                        string msgDisconnectedUser = "******" + disconnectedUserId.ToString() + "|";
                        SendDisconnecteUser(msgDisconnectedUser);
                        break;

                    case Message.MessagesType.COVISE_MESSAGE_VRB_MESSAGE:
                        int msgIdentifyer = m.message.readInt();

                        // Head Position
                        if (msgIdentifyer == 100)
                        {
                            int    senderId  = m.message.readInt();
                            string ipAddress = m.message.readString();
                            int    positionX = m.message.readInt();
                            int    positionY = m.message.readInt();
                            int    positionZ = m.message.readInt();
                            int    rotationX = m.message.readInt();
                            int    rotationY = m.message.readInt();
                            int    rotationZ = m.message.readInt();

                            string msgHead = "HEAD:" + senderId.ToString() + " " + positionX.ToString() + " " + positionY.ToString() + " " + positionZ.ToString() + " " + rotationX.ToString() + " " + rotationY + " " + rotationZ.ToString() + "|";
                            SendHmdPosition(msgHead);
                            break;
                        }

                        //ControllerPosition
                        if (msgIdentifyer == 101)
                        {
                            int senderId             = m.message.readInt();
                            int handId               = m.message.readInt();
                            int Controller_PositionX = m.message.readInt();
                            int Controller_PositionY = m.message.readInt();
                            int Controller_PositionZ = m.message.readInt();

                            int Controller_RotationX = m.message.readInt();
                            int Controller_RotationY = m.message.readInt();
                            int Controller_RotationZ = m.message.readInt();

                            int Controller_OffSetRotationZ = m.message.readInt();

                            var    ControllerDataIntArray = new int[] { senderId, msgType, handId, Controller_PositionX, Controller_PositionY, Controller_PositionZ, Controller_RotationX, Controller_RotationY, Controller_RotationZ };
                            string msgController          = "CONTROLLER:" + senderId.ToString() + " " + handId.ToString() + " " + Controller_PositionX.ToString() + " " + Controller_PositionY.ToString() + " " + Controller_PositionZ + " " + Controller_RotationX + " " + Controller_RotationY + " " + Controller_RotationZ + " " + Controller_OffSetRotationZ + "|";
                            SendControllerPosition(msgController);
                            break;
                        }
                        if (msgIdentifyer == 103)
                        {
                            int    disconnectedUserId_SessionChanged = m.message.readInt();
                            string msgDisconnectedUser2 = "DISCONNECTEDUSER:"******"|";
                            SendDisconnecteUser(msgDisconnectedUser2);
                            break;
                        }
                        if (msgIdentifyer == 102)
                        {
                            int buttonId = m.message.readInt();
                            int handId   = m.message.readInt();
                            int senderId = m.message.readInt();
                            // TODO need unter Type für Controller solange solte es so gehen
                            if (senderId < 100)
                            {
                                int[] intArrayControllerInput = new int[3];
                                intArrayControllerInput[0] = buttonId;
                                intArrayControllerInput[1] = handId;
                                intArrayControllerInput[2] = senderId;
                                string msgControllerInput = "CONTROLLERINPUT:" + buttonId.ToString() + " " + handId.ToString() + " " + senderId.ToString() + "|";
                                SendControllerInput(msgControllerInput);
                                break;
                            }
                            break;
                        }
                        break;
                    }
                }
            }
            catch (Exception e)
            {
                log.Fatal("Method Read is Crashed!" + e);
                return(new BaseResult());
            }
        }