Esempio n. 1
0
        public void HandleMessage(byte[] messageData)
        {
            using (MessageReader mr = new MessageReader(messageData))
            {
                FlagMessageType messageType = (FlagMessageType)mr.Read<int>();
                switch (messageType)
                {
                    case FlagMessageType.LIST:
                        {
                            //List code
                            string[] serverFlagFiles = mr.Read<string[]>();
                            string[] serverFlagOwners = mr.Read<string[]>();
                            string[] serverFlagShaSums = mr.Read<string[]>();
                            for (int i = 0; i < serverFlagFiles.Length; i++)
                            {
                                FlagInfo fi = new FlagInfo();
                                fi.owner = serverFlagOwners[i];
                                fi.shaSum = serverFlagShaSums[i];
                                serverFlags[Path.GetFileNameWithoutExtension(serverFlagFiles[i])] = fi;
                            }
                            syncComplete = true;
                            //Check if we need to upload the flag
                            flagChangeEvent = true;
                        }
                        break;
                    case FlagMessageType.FLAG_DATA:
                        {
                            FlagRespondMessage frm = new FlagRespondMessage();
                            frm.flagInfo.owner = mr.Read<string>();
                            frm.flagName = mr.Read<string>();
                            frm.flagData = mr.Read<byte[]>();
                            frm.flagInfo.shaSum = Common.CalculateSHA256Hash(frm.flagData);
                            newFlags.Enqueue(frm);
                        }
                        break;
                    case FlagMessageType.DELETE_FILE:
                        {
                            string flagName = mr.Read<string>();
                            string flagFile = Path.Combine(flagPath, flagName);
                            if (File.Exists(flagFile))
                            {
                                try
                                {

                                    if (File.Exists(flagFile))
                                    {
                                        DarkLog.Debug("Deleting flag " + flagFile);
                                        File.Delete(flagFile);
                                    }
                                }
                                catch (Exception e)
                                {
                                    DarkLog.Debug("Error deleting flag " + flagFile + ", exception: " + e);
                                }
                            }
                        }
                        break;
                }
            }
        }
Esempio n. 2
0
        private void HandleFlagChangeEvent()
        {
            flagChangeEvent = false;
            string flagURL = HighLogic.CurrentGame.flagURL;

            if (!flagURL.ToLower().StartsWith("darkmultiplayer/flags/"))
            {
                //If it's not a DMP flag don't sync it.
                return;
            }
            string flagName = flagURL.Substring("DarkMultiPlayer/Flags/".Length);

            if (serverFlags.ContainsKey(flagName) ? serverFlags[flagName].owner != Settings.fetch.playerName : false)
            {
                //If the flag is owned by someone else don't sync it
                return;
            }
            string flagFile = "";

            string[] flagFiles = Directory.GetFiles(flagPath, "*", SearchOption.TopDirectoryOnly);
            foreach (string possibleMatch in flagFiles)
            {
                if (flagName.ToLower() == Path.GetFileNameWithoutExtension(possibleMatch).ToLower())
                {
                    flagFile = possibleMatch;
                }
            }
            //Sanity check to make sure we found the file
            if (flagFile != "" ? File.Exists(flagFile) : false)
            {
                string shaSum = Common.CalculateSHA256Hash(flagFile);
                if (serverFlags.ContainsKey(flagName) ? serverFlags[flagName].shaSum == shaSum : false)
                {
                    //Don't send the flag when the SHA sum already matches
                    return;
                }
                DarkLog.Debug("Uploading " + Path.GetFileName(flagFile));
                using (MessageWriter mw = new MessageWriter())
                {
                    mw.Write <int>((int)FlagMessageType.UPLOAD_FILE);
                    mw.Write <string>(Settings.fetch.playerName);
                    mw.Write <string>(Path.GetFileName(flagFile));
                    mw.Write <byte[]>(File.ReadAllBytes(flagFile));
                    NetworkWorker.fetch.SendFlagMessage(mw.GetMessageBytes());
                }
                FlagInfo fi = new FlagInfo();
                fi.owner              = Settings.fetch.playerName;
                fi.shaSum             = Common.CalculateSHA256Hash(flagFile);
                serverFlags[flagName] = fi;
            }
        }
Esempio n. 3
0
        private void HandleFlagChangeEvent()
        {
            string flagURL = HighLogic.CurrentGame.flagURL;
            if (!flagURL.ToLower().StartsWith("darkmultiplayer/flags/"))
            {
                //If it's not a DMP flag don't sync it.
                return;
            }
            string flagName = flagURL.Substring("DarkMultiPlayer/Flags/".Length);
            if (serverFlags.ContainsKey(flagName) ? serverFlags[flagName].owner != Settings.fetch.playerName : false)
            {
                //If the flag is owned by someone else don't sync it
                return;
            }
            string flagFile = "";

            string[] flagFiles = Directory.GetFiles(flagPath, "*", SearchOption.TopDirectoryOnly);
            foreach (string possibleMatch in flagFiles)
            {
                if (flagName.ToLower() == Path.GetFileNameWithoutExtension(possibleMatch).ToLower())
                {
                    flagFile = possibleMatch;
                }
            }
            //Sanity check to make sure we found the file
            if (flagFile != "" ? File.Exists(flagFile) : false)
            {
                string shaSum = Common.CalculateSHA256Hash(flagFile);
                if (serverFlags.ContainsKey(flagName) ? serverFlags[flagName].shaSum == shaSum : false)
                {
                    //Don't send the flag when the SHA sum already matches
                    return;
                }
                DarkLog.Debug("Uploading " + Path.GetFileName(flagFile));
                using (MessageWriter mw = new MessageWriter())
                {
                    mw.Write<int>((int)FlagMessageType.UPLOAD_FILE);
                    mw.Write<string>(Settings.fetch.playerName);
                    mw.Write<string>(Path.GetFileName(flagFile));
                    mw.Write<byte[]>(File.ReadAllBytes(flagFile));
                    NetworkWorker.fetch.SendFlagMessage(mw.GetMessageBytes());
                }
                FlagInfo fi = new FlagInfo();
                fi.owner = Settings.fetch.playerName;
                fi.shaSum = Common.CalculateSHA256Hash(flagFile);
                serverFlags[flagName] = fi;
            }

        }
Esempio n. 4
0
        public void HandleMessage(byte[] messageData)
        {
            using (MessageReader mr = new MessageReader(messageData, false))
            {
                FlagMessageType messageType = (FlagMessageType)mr.Read <int>();
                switch (messageType)
                {
                case FlagMessageType.LIST:
                {
                    //List code
                    string[] serverFlagFiles   = mr.Read <string[]>();
                    string[] serverFlagOwners  = mr.Read <string[]>();
                    string[] serverFlagShaSums = mr.Read <string[]>();
                    for (int i = 0; i < serverFlagFiles.Length; i++)
                    {
                        FlagInfo fi = new FlagInfo();
                        fi.owner  = serverFlagOwners[i];
                        fi.shaSum = serverFlagShaSums[i];
                        serverFlags[Path.GetFileNameWithoutExtension(serverFlagFiles[i])] = fi;
                    }
                    syncComplete = true;
                    //Check if we need to upload the flag
                    flagChangeEvent = true;
                }
                break;

                case FlagMessageType.FLAG_DATA:
                {
                    FlagRespondMessage frm = new FlagRespondMessage();
                    frm.flagInfo.owner  = mr.Read <string>();
                    frm.flagName        = mr.Read <string>();
                    frm.flagData        = mr.Read <byte[]>();
                    frm.flagInfo.shaSum = Common.CalculateSHA256Hash(frm.flagData);
                    newFlags.Enqueue(frm);
                }
                break;

                case FlagMessageType.DELETE_FILE:
                {
                    string flagName = mr.Read <string>();
                    string flagFile = Path.Combine(flagPath, flagName);
                    if (File.Exists(flagFile))
                    {
                        try
                        {
                            if (File.Exists(flagFile))
                            {
                                DarkLog.Debug("Deleting flag " + flagFile);
                                File.Delete(flagFile);
                            }
                        }
                        catch (Exception e)
                        {
                            DarkLog.Debug("Error deleting flag " + flagFile + ", exception: " + e);
                        }
                    }
                }
                break;
                }
            }
        }