示例#1
0
        private static void ReadCallback(IAsyncResult ar)
        {
            // Retrieve the state object and the handler socket
            // from the asynchronous state object.
            var state   = (StateObject)ar.AsyncState;
            var handler = state.WorkSocket;

            // Read data from the client socket.
            var bytesRead = handler.EndReceive(ar);

            if (bytesRead <= 0)
            {
                return;
            }

            if (state.BufferSize == -1)
            {
                if (bytesRead != StateObject.HeaderBufferSize || state.RecvCount != 0)
                {
                    throw new Exception("AGGGRRR");
                }

                var cmd = BitConverter.ToInt32(state.HeaderBuffer, 0);

                if (cmd <= 0)
                {
                    return;
                }

                state.BufferSize = cmd;

                Program.WriteLine("[AGENT] Buffer size is " + state.BufferSize);

                state.Buffer = new byte[state.BufferSize];

                // Not all data received. Get more.
                handler.BeginReceive(state.Buffer, 0, state.BufferSize, 0, ReadCallback, state);

                //if (cmd == -1)
                //{
                //    Program.WriteLine("[AGENT] command newpatch");

                //    if (Directory.Exists("newpatch"))
                //    {
                //        PATCHER.patch("newpatch");
                //        PATCHER.restartall();
                //    }
                //}
            }
            else
            {
                state.RecvCount += bytesRead;

                if (state.RecvCount < state.BufferSize)
                {
                    // Not all data received. Get more.
                    handler.BeginReceive(state.Buffer, state.RecvCount, state.BufferSize - state.RecvCount, 0, ReadCallback, state);
                }
                else if (AcceptPatches)
                {
                    var formatter = new BinaryFormatter();
                    var buffer    = new MemoryStream(state.Buffer);
                    var patch     = (object[][])formatter.Deserialize(buffer);

                    object[] currentomi;

                    // get a copy of current omi to update it
                    using (var source = File.OpenRead(@"versioning\current\Res-Tex\omi.tex")) currentomi = FormatterOmi.Read(source);

                    DBstuff.UpdateDB(patch, currentomi[0] as object[][]);

                    Patcher.EmptyFolder("temp");
                    Directory.CreateDirectory(@"temp\Res-Tex");

                    using (var dest = File.OpenWrite(@"temp\Res-Tex\omi.tex")) FormatterOmi.Write(dest, currentomi);

                    Patcher.AddNewPatch(new DirectoryInfo("temp"));

                    Patcher.RestartAll();

                    Send(handler, new byte[] { 0xFF, 0xFF, 0xFF, 0xFF });
                }
                else
                {
                    Send(handler, new byte[] { 0xFF, 0xFF, 0, 0 });
                }
            }
        }
示例#2
0
        private static void Exec(string cmd)
        {
            if (cmd.Length <= 0)
            {
                return;
            }

            switch (cmd)
            {
            case "newpatch":
            {
                var di = new DirectoryInfo("newpatch");

                if (di.Exists)
                {
                    Patcher.AddNewPatch(di);
                    Patcher.RestartAll();
                }
                else
                {
                    WriteLine("newpatch directory does not exit");
                }
                break;
            }

            case "forcepatch":
            {
                var di = new DirectoryInfo("newpatch");

                if (di.Exists)
                {
                    Patcher.AddNewPatch(di, true);
                    Patcher.RestartAll();
                }
                else
                {
                    WriteLine("newpatch directory does not exit");
                }
                break;
            }

            case "restartall":
                Patcher.RestartAll();
                break;

            case "killall":
                Patcher.KillAll();
                break;

            default:
                if (cmd.StartsWith("setversion:"))
                {
                    Patcher.ChangeVersion(Patcher.StrToVer(cmd.Substring("setversion:".Length)));
                }

                else if (cmd.StartsWith("tcpserver:"))
                {
                    bool opt;

                    if (bool.TryParse(cmd.Substring("tcpserver:".Length), out opt))
                    {
                        WriteLine("TCP server is " + (opt ? "enabled." : "disabled."));
                        Server.AcceptPatches = opt;
                    }
                }

                else if (cmd == "version")
                {
                    WriteLine(Patcher.VerToStr(Patcher.Version));
                }

                else
                {
                    WriteLine("Doing nothing, unknown command.");
                }
                break;
            }
        }