コード例 #1
0
        private static void ShowWelcomeMessage(QuarterClient client)
        {
            White("Security Code:\n");
            string code = client.SecurityCode;

            Console.ForegroundColor = ConsoleColor.DarkYellow;
            for (int i = 0; i < 2; i++)
            {
                for (int j = 0; j < 4; j++)
                {
                    Console.Write(new string(code.Skip(j * 4 + i * 16).Take(4).ToArray()));
                    Console.Write(" ");
                }
                Console.WriteLine("");
            }
            White(
                "\nTo ensure your messages are secured, please verify that the security code\n" +
                "displayed on the screen is exactly the same as the one displayed on the client.\n\n");

            if (!client.Allowed)
            {
                White("Use command ");
                Blue(".allow " + client.Id);
                White(" to allow the client to send messages\n\n");
            }
        }
コード例 #2
0
        private static void MainThread(object data)
        {
            QuarterClient client = (QuarterClient)data;

            Green("\nConnected by " + client.Address.ToString() + "\n");

            try
            {
                client.SendServerPublicKey();
                client.AskAESKey();

                ShowWelcomeMessage(client);

                while (true)
                {
                    byte[] result = client.RecvMessage();
                    if (result == null)
                    {
                        throw new Exception("Closed");
                    }

                    if (!client.Allowed)
                    {
                        continue;
                    }


                    byte[] MsgID = result.Take(4).ToArray();
                    byte[] Msg   = result.Skip(4).ToArray();

                    HandleMessage(client, Msg);
                    client.SendMessage(ToClientFlag.PONG_FLAG.Concat(MsgID).ToArray());
                }
            }
            catch
            {
                Red("Disconnected by " + client.Address.ToString() + "\n");
            }

            client.Close();
            Red("Closed " + client.Address.ToString() + "\n");
        }
コード例 #3
0
        private static void HandleMessage(QuarterClient client, byte[] msg)
        {
            string str = Encoding.UTF8.GetString(msg);

            if (client.Server.Flags["typing"])
            {
                Keyboard.SendString(str);
            }

            if (client.Server.Flags["clipboard"])
            {
                Keyboard.SetClipboard(str);
            }

            if (client.Server.Flags["print"])
            {
                Blue("#" + client.Id + "> ");
                White(str + "\n");
            }
        }
コード例 #4
0
        public ClientWorker(QuarterServer server, TcpClient tcp)
        {
            Client = new QuarterClient(server, tcp);

            new Thread(MainThread).Start(Client);
        }