Exemplo n.º 1
0
        public ValueResult <SessionID> JoinSession(SessionID currentSession, int senderId, SessionID sid)       //(ValueResult<RoomModel> session)
        {
            try
            {
                // Session verlassen
                MessageBuffer mb = new MessageBuffer();
                SharedStateSerializer.serialize(ref mb, currentSession);
                Message m = new Message(mb, Message.MessagesType.COVISE_MESSAGE_VRBC_UNOBSERVE_SESSION);
                tcpSocket.send_msg(m);


                //neue Session setzen und Senden
                MessageBuffer mb2 = new MessageBuffer();
                SharedStateSerializer.serialize(ref mb2, sid);
                mb2.add(senderId);
                Message m2 = new Message(mb2, Message.MessagesType.COVISE_MESSAGE_VRBC_SET_SESSION);
                tcpSocket.send_msg(m2);

                return(new ValueResult <SessionID>(sid));
            }
            catch (Exception e)
            {
                log.Error("Method JoinSession is crashed!" + e);

                return(new ValueResult <SessionID>(e));
            }
        }
Exemplo n.º 2
0
        public ValueResult <SessionID> sendSetNewSessionMessage(int userId, string sessionName)
        {
            try
            {
                MessageBuffer mb  = new MessageBuffer();
                var           sid = new SessionID(userId, sessionName, false);
                SharedStateSerializer.serialize(ref mb, sid);
                mb.add(userId);
                Message msg = new Message(mb, Message.MessagesType.COVISE_MESSAGE_VRB_REQUEST_NEW_SESSION);
                send_msg(msg);
                ValueResult <SessionID> currentSession = new ValueResult <SessionID>();

                currentSession.Value = sid;
                return(currentSession);
            }
            catch (Exception e)
            {
                log.Fatal("Method sendSetNewSessionMessage is Crashed!" + e);

                return(new ValueResult <SessionID>(e));
            }
        }
Exemplo n.º 3
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());
            }
        }