Example #1
0
    public void logSentMessage(BaseQTClient client, QTMessage message)
    {
        QTMessageLog log = new QTMessageLog(1, message, client);

        log.direction = QTMessageLog.messageDirection.SERVERTOCLIENT;
        messageLog.Add(log);
    }
Example #2
0
    public void logReceivedMessage(BaseQTClient client, QTMessage message)
    {
        QTMessageLog log = new QTMessageLog(1, message, client);

        log.direction = QTMessageLog.messageDirection.CLIENTTOSERVER;
        messageLog.Add(log);
    }
Example #3
0
    public override void handleMessage(QTMessage message)
    {
        switch (message.messageType)
        {
        case QTMessage.type.REQUEST_SYNC:
            WorkerServerQTClient qtRemoteClient = (WorkerServerQTClient)client;

            foreach (ServerQTObject obj in WorkerServerManager.instance.spawnManager.spawnedObjects.Values)
            {
                SpawnMessage spawnMessage = new SpawnMessage();
                spawnMessage.objectID      = obj.objectID;
                spawnMessage.prefabName    = obj.prefabName;
                spawnMessage.spawnPosition = QTUtils.getSyncPositionMessageFromObject(obj);
                spawnMessage.spawnRotation = QTUtils.getSyncRotationMessageFromObject(obj);
                spawnMessage.active        = obj.gameObject.activeSelf;
                qtRemoteClient.sendMessage(spawnMessage);

                foreach (BaseQTObjectComponent comp in obj.objectComponents.Values)
                {
                    comp.serverComponent.syncAllFields();
                }
            }
            break;
        }
    }
Example #4
0
    public void handleStream()
    {
        while (true)
        {
            try {
                byte[] sizeData       = new byte[4];
                int    sizeBytes      = stream.Read(sizeData, 0, sizeData.Length);
                int    nextPacketSize = BitConverter.ToInt32(sizeData, 0);
                if (nextPacketSize == 0)
                {
                    continue;
                }

                byte[] data  = new byte[nextPacketSize];
                int    bytes = stream.Read(data, 0, data.Length);
                debugRecieved(sizeData, data);
                QTMessage message = QTUtils.ByteArrayToMessage(data);

                qtClient.queuedMessages.Add(message);
            } catch (Exception e) {
                QTDebugger.instance.debugWarning(QTDebugger.debugType.NETWORK, "[" + qtClient.type.ToString() + "_thread] Error while reading the NetworkStream-");
                QTDebugger.instance.debugError(QTDebugger.debugType.NETWORK, e);

                qtClient.closeConnection();
                break;
            }
        }
    }
Example #5
0
 public void sendMessageToAll(QTMessage message)
 {
     foreach (ServerQTClient qtRemoteClient in connections.clients.ToList())
     {
         qtRemoteClient.sendMessage(message);
     }
 }
    public override void handleMessage(QTMessage message)
    {
        switch (message.messageType)
        {
        case QTMessage.type.WORKER_READY: {
            MasterServerQTClient qtRemoteClient     = (MasterServerQTClient)client;
            WorkerReadyMessage   workerReadyMessage = (WorkerReadyMessage)message;

            qtRemoteClient.remoteType = QTClient.clientType.WORKER_SERVER;
            MasterServerWorker worker = MasterServerManager.instance.workersManager.workers[workerReadyMessage.id];

            RoomInfoMessage roomInfoMessage = new RoomInfoMessage();
            roomInfoMessage.room = worker.room;
            qtRemoteClient.sendMessage(roomInfoMessage);

            worker.onWorkerReady();
            break;
        }

        case QTMessage.type.WORKER_INFO: {
            MasterServerQTClient qtRemoteClient    = (MasterServerQTClient)client;
            WorkerInfoMessage    workerInfoMessage = (WorkerInfoMessage)message;
            MasterServerWorker   worker            = MasterServerManager.instance.workersManager.workers[workerInfoMessage.id];

            worker.room.ip = workerInfoMessage.ip;

            QTDebugger.instance.debug(QTDebugger.debugType.BASE, "Recieved info from Worker(" + worker.room.id + ")...");
            break;
        }
        }
    }
Example #7
0
    public override void handleMessage(QTMessage message)
    {
        switch (message.messageType)
        {
        case QTMessage.type.READY:
            WorkerServerQTClient qtRemoteClient = (WorkerServerQTClient)client;
            ReadyMessage         readyMessage   = (ReadyMessage)message;

            if (!qtRemoteClient.ready && readyMessage.state)
            {
                qtRemoteClient.ready = readyMessage.state;

                SessionMessage sessionMessage = new SessionMessage();
                sessionMessage.session = qtRemoteClient.session;
                qtRemoteClient.sendMessage(sessionMessage);

                QTDebugger.instance.debug(QTDebugger.debugType.BASE, "Client(" + client.getIP() + ") is ready...");
                WorkerServerManager.instance.onClientReady(qtRemoteClient);
            }
            else
            {
                qtRemoteClient.ready = readyMessage.state;
            }
            break;
        }
    }
Example #8
0
 public QTMessageLog(int _index, QTMessage _message, BaseQTClient _client)
 {
     index       = _index;
     type        = _message.messageType;
     messageSize = QTUtils.ObjectToByteArray(_message).Length;
     identity    = _client.getIP();
 }
Example #9
0
 public void debugRecievedMessage(QTMessage message)
 {
     if (message.messageType != QTMessage.type.WORKER_DEBUG)
     {
         //QTDebugger.instance.debug(QTDebugger.debugType.BASE, "Recieved message of type " + message.messageType.ToString());
     }
 }
Example #10
0
    public void handleMessage(QTMessage message)
    {
        switch (message.messageType)
        {
        case QTMessage.type.REQUEST_HEARTBEAT:
            double currentTimestamp = (DateTime.Now - DateTime.MinValue).TotalMilliseconds;
            RequestHeartbeatMessage requestMessage   = (RequestHeartbeatMessage)message;
            HeartbeatMessage        heartbeatMessage = new HeartbeatMessage(requestMessage);
            heartbeatMessage.serverTimestamp  = ((RequestHeartbeatMessage)message).createdTimestamp;
            heartbeatMessage.createdTimestamp = currentTimestamp;

            sendMessage(heartbeatMessage);
            break;

        case QTMessage.type.ROOM_INFO:
            RoomInfoMessage infoMessage = (RoomInfoMessage)message;
            WorkerServerManager.instance.room = infoMessage.room;

            WorkerInfoMessage workerMessage = new WorkerInfoMessage();
            workerMessage.id = WorkerServerManager.instance.room.id;
            workerMessage.ip = "127.0.0.1";
            sendMessage(workerMessage);

            QTDebugger.instance.debug(QTDebugger.debugType.BASE, "Sending worker info message...");
            break;
        }
    }
Example #11
0
 public override void handleMessage(QTMessage message)
 {
     switch (message.messageType)
     {
     case QTMessage.type.EVENT:
         onEvent((EventMessage)message);
         break;
     }
 }
Example #12
0
 public void sendMessageToAllReady(QTMessage message)
 {
     foreach (ServerQTClient qtRemoteClient in connections.clients.ToList())
     {
         WorkerServerQTClient workerClient = (WorkerServerQTClient)qtRemoteClient;
         if (workerClient.ready)
         {
             qtRemoteClient.sendMessage(message);
         }
     }
 }
Example #13
0
    public override void handleMessage(QTMessage message)
    {
        switch (message.messageType)
        {
        case QTMessage.type.OWNER:
            QTClient     qtClient     = (QTClient)client;
            OwnerMessage ownerMessage = (OwnerMessage)message;

            ClientManager.instance.spawnManager.spawnedObjects[ownerMessage.objectID].setOwner(ownerMessage.ownerID);
            break;
        }
    }
    public override void handleMessage(QTMessage message)
    {
        switch (message.messageType)
        {
        case QTMessage.type.WORKER_DEBUG:
            MasterServerQTClient qtRemoteClient = (MasterServerQTClient)client;
            WorkerDebugMessage   debugMessage   = (WorkerDebugMessage)message;

            QTDebugger.instance._debug(debugMessage.debugType, QTDebugger.debugType.NETWORK_WORKER, debugMessage.message);
            break;
        }
    }
Example #15
0
    public override void handleMessage(QTMessage message)
    {
        switch (message.messageType)
        {
        case QTMessage.type.SESSION:
            QTClient       qtClient       = (QTClient)client;
            SessionMessage sessionMessage = (SessionMessage)message;

            qtClient.session = sessionMessage.session;
            QTDebugger.instance.debug(QTDebugger.debugType.BASE, "Recieved new session(" + sessionMessage.session.id + ")-");
            break;
        }
    }
    public override void handleMessage(QTMessage message)
    {
        switch (message.messageType)
        {
        case QTMessage.type.REQUEST_ROOMS:
            RequestRoomsMessage  requestMessage = (RequestRoomsMessage)message;
            MasterServerQTClient qtRemoteClient = (MasterServerQTClient)client;

            RoomsMessage roomsMessage = new RoomsMessage(requestMessage);
            roomsMessage.rooms = MasterServerManager.instance.workersManager.getRooms();
            qtRemoteClient.sendMessage(roomsMessage);
            break;
        }
    }
Example #17
0
    public void handleMessage(QTMessage message)
    {
        switch (message.messageType)
        {
        case QTMessage.type.REQUEST_HEARTBEAT:
            double currentTimestamp = (DateTime.Now - DateTime.MinValue).TotalMilliseconds;
            RequestHeartbeatMessage requestMessage   = (RequestHeartbeatMessage)message;
            HeartbeatMessage        heartbeatMessage = new HeartbeatMessage(requestMessage);
            heartbeatMessage.serverTimestamp  = ((RequestHeartbeatMessage)message).createdTimestamp;
            heartbeatMessage.createdTimestamp = currentTimestamp;

            sendMessage(heartbeatMessage);
            break;
        }
    }
Example #18
0
    public override void handleMessage(QTMessage message)
    {
        switch (message.messageType)
        {
        case QTMessage.type.SPAWN:
            SpawnMessage spawnMessage = (SpawnMessage)message;
            BaseQTObject obj          = ClientManager.instance.spawnManager.spawnObject(spawnMessage.objectID, spawnMessage.prefabName, spawnMessage.spawnPosition, spawnMessage.spawnRotation);
            obj.gameObject.SetActive(spawnMessage.active);
            break;

        case QTMessage.type.DESPAWN:
            DespawnMessage despawnMessage = (DespawnMessage)message;
            ClientManager.instance.spawnManager.despawnObject(despawnMessage.objectID);
            break;
        }
    }
Example #19
0
    public override void handleMessage(QTMessage message)
    {
        switch (message.messageType)
        {
        case QTMessage.type.REQUEST_NEW_INSTANCE:
            MasterServerQTClient      qtRemoteClient = (MasterServerQTClient)client;
            RequestNewInstanceMessage requestMessage = (RequestNewInstanceMessage)message;

            MasterServerWorker worker = MasterServerManager.instance.workersManager.spawnWorker(Guid.NewGuid().ToString());

            InstanceMessage instanceMessage = new InstanceMessage(requestMessage);
            instanceMessage.room  = worker.room;
            worker.onWorkerReady += () => {
                sendRequestInstanceResponse(qtRemoteClient, instanceMessage);
            };
            break;
        }
    }
Example #20
0
    public override void handleMessage(QTMessage message)
    {
        switch (message.messageType)
        {
        case QTMessage.type.INPUT:
            InputMessage inputMessage = (InputMessage)message;

            if (inputMessage.active)
            {
                onClientKeyDown(inputMessage.keyCode);
            }
            else
            {
                onClientKeyUp(inputMessage.keyCode);
            }
            break;

        case QTMessage.type.INPUT_AXIS:
            InputAxisMessage inputAxisMessage = (InputAxisMessage)message;
            updateAxisState(inputAxisMessage.axis, inputAxisMessage.value);
            break;

        case QTMessage.type.VR_ACTION:
            VRActionMessage actionMessage = (VRActionMessage)message;
            updateVRAction(actionMessage.actionName, QTUtils.getValueFromVRActionMessage(actionMessage));
            break;

        case QTMessage.type.SYNC_VR_POSITION:
            SyncVRPositionMessage positionMessage = (SyncVRPositionMessage)message;
            updateVRPosition(positionMessage.source, new Vector3(positionMessage.posX, positionMessage.posY, positionMessage.posZ));
            break;

        case QTMessage.type.SYNC_VR_ROTATION:
            SyncVRRotationMessage rotationMessage = (SyncVRRotationMessage)message;
            updateVRRotation(rotationMessage.source, new Vector3(rotationMessage.rotX, rotationMessage.rotY, rotationMessage.rotZ));
            break;
        }
    }
Example #21
0
    public override void handleMessage(QTMessage message)
    {
        switch (message.messageType)
        {
        case QTMessage.type.REGISTER:
            RegisterMessage registerMessage = (RegisterMessage)message;
            UserInfo        info            = new UserInfo();
            info.username    = registerMessage.username;
            info.password    = registerMessage.password;
            info.permissions = UserInfo.userPermissions.USER;

            RegisterReplyMessage replyMessage = MasterServerManager.instance.authManager.addUser(registerMessage, info);
            client.sendMessage(replyMessage);
            break;

        case QTMessage.type.LOGIN:
            LoginMessage loginMessage = (LoginMessage)message;

            LoginReplyMessage loginReplyMessage = MasterServerManager.instance.authManager.loginUser(loginMessage);
            client.sendMessage(loginReplyMessage);
            break;
        }
    }
Example #22
0
    public void sendMessage(QTMessage message)
    {
        lock (sendLock) {
            try {
                if (client.Connected == false)
                {
                    return;
                }

                byte[] bytes     = QTUtils.MessageToByteArray(message);
                byte[] sizeBytes = BitConverter.GetBytes(bytes.Length);

                try {
                    debugSent(sizeBytes, bytes);

                    thread.stream.Write(sizeBytes, 0, sizeBytes.Length);
                    thread.stream.Write(bytes, 0, bytes.Length);
                } catch (Exception e) {
                    QTDebugger.instance.debugWarning(QTDebugger.debugType.NETWORK, "[" + type + "_base] Error while writing the NetworkStream-");
                    QTDebugger.instance.debugError(QTDebugger.debugType.NETWORK, e);

                    closeConnection();
                }

                var responsableValid = message as QTResponsableMessage;
                if (responsableValid != null)
                {
                    QTResponsableMessage responseMessage = (QTResponsableMessage)message;
                    awaitingResponse.Add(responseMessage.responseID, responseMessage);
                }

                onMessageSent(message);
            } catch (Exception e) {
                Debug.LogWarning(e);
            }
        }
    }
Example #23
0
 public void handleSentMessage(QTMessage message)
 {
     manager.onMessageSent(this, message);
 }
Example #24
0
 public void handleMessage(QTMessage message)
 {
     manager.onMessageReceived(this, message);
 }
Example #25
0
 public override void handleMessage(QTMessage message)
 {
 }
Example #26
0
 public static byte[] MessageToByteArray(QTMessage message)
 {
     //return Compress(ObjectToByteArray(message));
     return(ObjectToByteArray(message));
 }
Example #27
0
 public abstract void handleMessage(QTMessage message);
Example #28
0
    public override void handleMessage(QTMessage message)
    {
        switch (message.messageType)
        {
        case QTMessage.type.SYNC_POSITION: {
            SyncPositionMessage syncMessage = (SyncPositionMessage)message;
            if (ClientManager.instance.spawnManager.spawnedObjects.ContainsKey(syncMessage.objectID) == false)
            {
                return;
            }

            ClientQTObject clientObject  = (ClientQTObject)ClientManager.instance.spawnManager.spawnedObjects[syncMessage.objectID];
            SyncGameobject syncComponent = (SyncGameobject)clientObject.objectComponents[syncMessage.index];
            syncComponent.syncedPosition = new Vector3(syncMessage.posX, syncMessage.posY, syncMessage.posZ);
            break;
        }

        case QTMessage.type.SYNC_ROTATION: {
            SyncRotationMessage syncMessage = (SyncRotationMessage)message;
            if (ClientManager.instance.spawnManager.spawnedObjects.ContainsKey(syncMessage.objectID) == false)
            {
                return;
            }

            ClientQTObject clientObject  = (ClientQTObject)ClientManager.instance.spawnManager.spawnedObjects[syncMessage.objectID];
            SyncGameobject syncComponent = (SyncGameobject)clientObject.objectComponents[syncMessage.index];
            syncComponent.syncedRotation = new Vector3(syncMessage.rotX, syncMessage.rotY, syncMessage.rotZ);
            break;
        }

        case QTMessage.type.SYNC_ACTIVE: {
            SyncActiveMessage syncMessage = (SyncActiveMessage)message;
            if (ClientManager.instance.spawnManager.spawnedObjects.ContainsKey(syncMessage.objectID) == false)
            {
                return;
            }

            ClientQTObject clientObject  = (ClientQTObject)ClientManager.instance.spawnManager.spawnedObjects[syncMessage.objectID];
            SyncGameobject syncComponent = (SyncGameobject)clientObject.objectComponents[syncMessage.index];
            syncComponent.gameObject.SetActive(syncMessage.value);
            break;
        }

        case QTMessage.type.SYNC_FIELD: {
            FieldInfoMessage syncMessage = (FieldInfoMessage)message;
            if (ClientManager.instance.spawnManager.spawnedObjects.ContainsKey(syncMessage.objectID) == false)
            {
                return;
            }

            ClientQTObject        clientObject = (ClientQTObject)ClientManager.instance.spawnManager.spawnedObjects[syncMessage.objectID];
            BaseQTObjectComponent component    = clientObject.objectComponents[syncMessage.index];

            component.clientComponent.setSyncedField(syncMessage.fieldName, QTUtils.getValueFromSyncFieldMessage(syncMessage));
            break;
        }

        case QTMessage.type.SYNC_ANIMATION: {
            AnimationParameterInfoMessage syncMessage = (AnimationParameterInfoMessage)message;
            if (ClientManager.instance.spawnManager.spawnedObjects.ContainsKey(syncMessage.objectID) == false)
            {
                return;
            }

            ClientQTObject clientObject = (ClientQTObject)ClientManager.instance.spawnManager.spawnedObjects[syncMessage.objectID];
            SyncAnimation  component    = (SyncAnimation)clientObject.objectComponents[syncMessage.index];

            QTUtils.applySyncAnimationMessageToAnimator(component.animator, syncMessage);
            break;
        }

        case QTMessage.type.CALL_FUNCTION: {
            try {
                CallFunctionMessage callMessage = (CallFunctionMessage)message;
                if (ClientManager.instance.spawnManager.spawnedObjects.ContainsKey(callMessage.objectID) == false)
                {
                    return;
                }

                ClientQTObject        clientObject = (ClientQTObject)ClientManager.instance.spawnManager.spawnedObjects[callMessage.objectID];
                BaseQTObjectComponent component    = clientObject.objectComponents[callMessage.index];

                List <object> parameters = new List <object>();
                if (callMessage.parameters != null)
                {
                    foreach (FieldInfoMessage fieldMessage in callMessage.parameters)
                    {
                        parameters.Add(QTUtils.getValueFromSyncFieldMessage(fieldMessage));
                    }
                }

                component.callFunction(callMessage.functionName, parameters.ToArray());
            } catch (Exception e) {
                Debug.LogError(e);
            }
            break;
        }
        }
    }