/// <summary>
            /// Handles RevisionResponse message.
            /// </summary>
            /// <param name="script">Script.</param>
            /// <param name="reader">Binary reader.</param>
            private void HandleRevisionResponse(ClientScript script, BinaryReader reader)
            {
                DebugEx.VerboseFormat("ClientScript.ConnectedState.HandleRevisionResponse(reader = {0})", reader);

                int remoteRevision = reader.ReadInt32();
                int localRevision  = 0;

                if (File.Exists(Application.persistentDataPath + "/Revision.txt"))
                {
                    string text = File.ReadAllText(Application.persistentDataPath + "/Revision.txt", Encoding.UTF8);
                    localRevision = int.Parse(text);
                }

                DebugEx.DebugFormat("Revision at the client: {0}", localRevision);
                DebugEx.DebugFormat("Revision at the server: {0}", remoteRevision);

                if (remoteRevision > localRevision)
                {
                    script.state = ClientState.RequestingMD5Hashes;
                }
                else
                {
                    script.state = ClientState.Disconnected;
                }
            }
Example #2
0
    /// <summary>
    /// Load settings.
    /// </summary>
    public static void Load()
    {
        DebugEx.Verbose("Settings.Load()");

        sInternalMode = (PlayerPrefs.GetString(KEY_INTERNAL_MODE, "False").ToLower() == "true");

        DebugEx.Debug("Settings loaded:");
        DebugEx.DebugFormat("  * sInternalMode = {0}", sInternalMode);
    }
Example #3
0
        /// <summary>
        /// Checks for new revision.
        /// </summary>
        private static void CheckForNewRevision()
        {
            DebugEx.VeryVeryVerbose("RevisionChecker.CheckForNewRevision()");

            if (!File.Exists(sAppDir + "/Revisions/NewRevision/Lock"))
            {
                CalculateMD5InFolder(sAppDir + "/Revisions/NewRevision");

                ++sRevision;
                Directory.Move(sAppDir + "/Revisions/NewRevision", sAppDir + "/Revisions/" + sRevision.ToString());

                CreateNewRevisionFolder();

                RevisionsCache.OnNewRevision();

                DebugEx.DebugFormat("New revision: {0}", sRevision);
            }
        }
Example #4
0
        /// <summary>
        /// Setups the canvas.
        /// </summary>
        private void SetupCanvas()
        {
            DebugEx.Verbose("MasterScript.SetupCanvas()");

            float dpi = Screen.dpi;

            if (dpi != 0f)
            {
                CanvasScaler canvasScaler = GetComponent <CanvasScaler>();

                canvasScaler.scaleFactor = dpi / 96f;

                DebugEx.DebugFormat("Canvas scale factor: {0}", canvasScaler.scaleFactor);
            }
            else
            {
                DebugEx.Warning("Failed to determine DPI");
            }
        }
            /// <summary>
            /// Handler for message received from the server.
            /// </summary>
            /// <param name="script">Script.</param>
            /// <param name="bytes">Byte array.</param>
            /// <param name="dataSize">Data size.</param>
            public override void OnMessageReceivedFromServer(ClientScript script, byte[] bytes, int dataSize)
            {
                DebugEx.VerboseFormat("ClientScript.RequestingMD5HashesState.OnMessageReceivedFromServer(script = {0}, bytes = {1}, dataSize = {2})", script, bytes, dataSize);

                DebugEx.VeryVerboseFormat("Message received from the server: {0}", Utils.BytesInHex(bytes, dataSize));

                MemoryStream stream = new MemoryStream(bytes);
                BinaryReader reader = new BinaryReader(stream, Encoding.UTF8);

                MessageType messageType = NetUtils.ReadMessageHeader(reader);

                DebugEx.DebugFormat("Message type = {0}", messageType);

                switch (messageType)
                {
                case MessageType.MD5HashesResponse:
                {
                    HandleMD5HashesResponse(script, reader, dataSize);
                }
                break;

                case MessageType.RevisionRequest:
                case MessageType.RevisionResponse:
                case MessageType.MD5HashesRequest:
                {
                    DebugEx.ErrorFormat("Unexpected message type: {0}", messageType);

                    script.mFiles.Clear();
                    script.state = ClientState.Disconnected;
                }
                break;

                default:
                {
                    DebugEx.ErrorFormat("Unknown message type: {0}", messageType);

                    script.mFiles.Clear();
                    script.state = ClientState.Disconnected;
                }
                break;
                }
            }
Example #6
0
            /// <summary>
            /// Handler for message received from the client.
            /// </summary>
            /// <param name="context">Context.</param>
            /// <param name="bytes">Byte array.</param>
            /// <param name="dataSize">Data size.</param>
            public override void OnMessageReceivedFromClient(ClientContext context, byte[] bytes, int dataSize)
            {
                DebugEx.VerboseFormat("ClientContext.ConnectedState.OnMessageReceivedFromClient(context = {0}, bytes = {1}, dataSize = {2})", context, bytes, dataSize);

                DebugEx.VeryVerboseFormat("Message received from client {0}: {1}", context.mConnectionId, Utils.BytesInHex(bytes, dataSize));

                MemoryStream stream = new MemoryStream(bytes);
                BinaryReader reader = new BinaryReader(stream, Encoding.UTF8);

                MessageType messageType = NetUtils.ReadMessageHeader(reader);

                DebugEx.DebugFormat("Message type = {0}", messageType);

                switch (messageType)
                {
                case MessageType.RevisionRequest:
                {
                    HandleRevisionRequest(context);
                }
                break;

                case MessageType.RevisionResponse:
                case MessageType.MD5HashesRequest:
                case MessageType.MD5HashesResponse:
                {
                    DebugEx.ErrorFormat("Unexpected message type: {0}", messageType);

                    context.state = ClientState.Disconnected;
                }
                break;

                default:
                {
                    DebugEx.ErrorFormat("Unknown message type: {0}", messageType);

                    context.state = ClientState.Disconnected;
                }
                break;
                }
            }
Example #7
0
        /// <summary>
        /// Sets to the latest revision.
        /// </summary>
        private static void SetToTheLatestRevision()
        {
            DebugEx.Verbose("RevisionChecker.SetToTheLatestRevision()");

            sRevision = 0;

            char[] pathDelimeters = new char[2];
            pathDelimeters[0] = '/';
            pathDelimeters[1] = '\\';

            string[] revisions = Directory.GetDirectories(sAppDir + "/Revisions");

            for (int i = 0; i < revisions.Length; ++i)
            {
                string revision = revisions[i];

                int index = revision.LastIndexOfAny(pathDelimeters);

                if (index >= 0)
                {
                    revision = revision.Substring(index + 1);
                }

                int revisionNumber;

                if (int.TryParse(revision, out revisionNumber))
                {
                    if (revisionNumber > sRevision)
                    {
                        sRevision = revisionNumber;
                    }
                }
            }

            DebugEx.DebugFormat("Latest revision: {0}", sRevision);
        }
Example #8
0
        /// <summary>
        /// Update is called once per frame.
        /// </summary>
        void Update()
        {
            DebugEx.VeryVeryVerbose("ServerScript.Update()");

            RevisionChecker.Update();

            int  hostId;
            int  connectionId;
            int  channelId;
            int  dataSize;
            byte error;

            NetworkEventType eventType = NetworkTransport.Receive(out hostId, out connectionId, out channelId, mBuffer, CommonConstants.PACKET_SIZE, out dataSize, out error);

            switch (eventType)
            {
            case NetworkEventType.Nothing:
            {
                // Nothing
            }
            break;

            case NetworkEventType.ConnectEvent:
            {
                DebugEx.DebugFormat("Client {0} connected", connectionId);

                if (connectionId == mClients.Count + 1)
                {
                    mClients.Add(new ClientContext(connectionId));
                }
                else
                {
                    if (connectionId > 0 && connectionId <= mClients.Count && mClients[connectionId - 1] == null)
                    {
                        mClients[connectionId - 1] = new ClientContext(connectionId);
                    }
                    else
                    {
                        DebugEx.FatalFormat("Incorrect behaviour on handling connected client. connectionId = {0} mClients.Count = {1}", connectionId, mClients.Count);

                        Server.DisconnectClient(connectionId);
                    }
                }
            }
            break;

            case NetworkEventType.DataEvent:
            {
                if (connectionId > 0 && connectionId <= mClients.Count && mClients[connectionId - 1] != null)
                {
                    mClients[connectionId - 1].OnMessageReceivedFromClient(mBuffer, dataSize);
                }
                else
                {
                    DebugEx.FatalFormat("Incorrect behaviour on handling data from client. connectionId = {0} mClients.Count = {1}", connectionId, mClients.Count);

                    Server.DisconnectClient(connectionId);
                }
            }
            break;

            case NetworkEventType.DisconnectEvent:
            {
                DebugEx.DebugFormat("Client {0} disconnected, error: {1}({2})", connectionId, (NetworkError)error, error);

                if (connectionId > 0 && connectionId <= mClients.Count && mClients[connectionId - 1] != null)
                {
                    mClients[connectionId - 1] = null;
                }
                else
                {
                    DebugEx.FatalFormat("Incorrect behaviour on handling disconnected client. connectionId = {0} mClients.Count = {1}", connectionId, mClients.Count);
                }
            }
            break;

            case NetworkEventType.BroadcastEvent:
            {
                DebugEx.ErrorFormat("Unexpected event type: {0}", eventType);
            }
            break;

            default:
            {
                DebugEx.ErrorFormat("Unknown event type: {0}", eventType);
            }
            break;
            }
        }