Example #1
0
        private void LoginThreadFunc(object parameters)
        {
            LoginThreadFuncParam param = (LoginThreadFuncParam)parameters;

            try
            {
                Dispatcher.Invoke(() =>
                {
                    MainChat page  = new MainChat(this);
                    selfClient.Tag = page;
                    SelfClient.ConnectTo(new IPEndPoint(param.IPAddress, param.Port), param.BufferSize);
                    SelfClient.Send(Encoding.UTF8.GetBytes(JsonSerializer.ConvertToText(JsonSerializer.Create(new TransPackage()
                    {
                        Name        = NickName,
                        PackageType = ConstDef.Login,
                        Content     = PasswordBox.Password
                    }))));
                    SelfClient.ReceivedMsg  += page.SelfClient_ReceivedMsg;
                    SelfClient.Disconnected += page.SelfClient_Disconnected;
                    Program.Navigate(page);
                });
            }
            catch
            {
                Dispatcher.Invoke(() =>
                {
                    loginWaitThread.Abort();

                    loginThread             = null;
                    ConnectButton.IsEnabled = true;
                    ConnectButton.Content   = "Connect";
                    MessageBox.Show("Communicate failed, please check your network connection.", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                });
            }
        }
Example #2
0
 private static void InitializeUser(string JsonPath)
 {
     if (File.Exists(JsonPath))
     {
         StreamReader streamReader = new StreamReader(JsonPath);
         JsonData     jsonData     = JsonSerializer.Parse(streamReader.ReadToEnd());
         foreach (JsonData jsonData1 in jsonData)
         {
             UserList.Add(JsonSerializer.ConvertToInstance <User>(jsonData1));
         }
         streamReader.BaseStream.Close();
         streamReader.Close();
     }
     else
     {
         JsonData jsonData = new JsonData()
         {
             DataType = JsonDataType.Array, content = new List <JsonData>()
         };
         foreach (User usr in UserList)
         {
             jsonData.Add(JsonSerializer.Create(usr));
         }
         StreamWriter streamWriter = new StreamWriter(JsonPath, false);
         streamWriter.Write(JsonSerializer.ConvertToText(jsonData));
         streamWriter.Flush();
         streamWriter.BaseStream.Close();
     }
 }
Example #3
0
        private bool TrySendPackage(TransPackage package)
        {
            JsonData jsonToSend = JsonSerializer.Create(package);
            string   textToSend = JsonSerializer.ConvertToText(jsonToSend);

            byte[] bytesToSend = Encoding.UTF8.GetBytes(textToSend);
            return(TrySendData(bytesToSend));
        }
Example #4
0
        }                                               // 解释指令

        private static void BoardcastPackage(TransPackage package)
        {
            JsonData jsonData = JsonSerializer.Create(package);
            string   jsonText = JsonSerializer.ConvertToText(jsonData);

            byte[] bytes = Encoding.UTF8.GetBytes(jsonText);
            BoardcastData(bytes, bytes.Length);
        }                                // 广播包
Example #5
0
        private static void DealAdminCommand(TransPackage recvPackage, Socket socket)
        {
            PrintLine($"{recvPackage.Name} try to execute a command on this server.");
            if (!AdminGuid.Contains(recvPackage.ClientGuid))
            {
                socket.SendTOC(
                    Encoding.UTF8.GetBytes(
                        JsonSerializer.ConvertToText(
                            JsonSerializer.Create(new TransPackage()
                {
                    Name        = "Server",
                    Content     = $"You don't have right to execute command on remote server.",
                    ClientGuid  = "Server",
                    PackageType = ConstDef.NormalMessage
                }))));
            }
            else
            {
                DealCommand(recvPackage.Content);
                socket.SendTOC(
                    Encoding.UTF8.GetBytes(
                        JsonSerializer.ConvertToText(
                            JsonSerializer.Create(new TransPackage()
                {
                    Name        = "Server",
                    Content     = $"Command executed!",
                    ClientGuid  = "Server",
                    PackageType = ConstDef.NormalMessage
                }))));
                int    count   = 0;
                Socket socket1 = socket;
                bool p(string a)
                {
                    count += 1;
                    if (count == 2)
                    {
                        //SafeWriteHook -= p;
                    }
                    socket1.Send(
                        Encoding.UTF8.GetBytes(
                            JsonSerializer.ConvertToText(
                                JsonSerializer.Create(new TransPackage()
                    {
                        Name        = "Server",
                        Content     = $"Return:{a}",
                        ClientGuid  = "Server",
                        PackageType = ConstDef.NormalMessage
                    }))));
                    return(true);
                }

                //SafeWriteHook += p;
            }
        }
Example #6
0
 private static void SendMustLoginInfo(Socket socket)
 {
     socket.SendTOC(
         Encoding.UTF8.GetBytes(
             JsonSerializer.ConvertToText(
                 JsonSerializer.Create(new TransPackage()
     {
         Name        = "Server(AutoReplay)",
         Content     = $"You must be logged in to send messages on the remote server.",
         ClientGuid  = "Server",
         PackageType = ConstDef.Verification
     }))));
 }
Example #7
0
 private static void WelcomeUser(TransPackage recvPackage, Socket socket)
 {
     socket.SendTOC(
         Encoding.UTF8.GetBytes(
             JsonSerializer.ConvertToText(
                 JsonSerializer.Create(new TransPackage()
     {
         Name        = "Server(AutoReplay)",
         Content     = $"Welcome!{recvPackage.Name}",
         ClientGuid  = "Server",
         PackageType = ConstDef.NormalMessage
     }))));
 }
Example #8
0
 private static void SendErrorPasswordNotCorrent(Socket socket)
 {
     socket.SendTOC(
         Encoding.UTF8.GetBytes(
             JsonSerializer.ConvertToText(
                 JsonSerializer.Create(new TransPackage()
     {
         Name        = "Server",
         Content     = $"Password error.",
         ClientGuid  = "Server",
         PackageType = ConstDef.NormalMessage
     }))));
 }
Example #9
0
        }                                  // 广播数据

        private static void DrawAttention(string senderName, string senderGuid)
        {
            byte[] attentionData = Encoding.UTF8.GetBytes(
                JsonSerializer.ConvertToText(
                    JsonSerializer.Create(new TransPackage()
            {
                Name        = senderName,
                Content     = null,
                ClientGuid  = senderGuid,
                PackageType = ConstDef.DrawAttention
            })));

            BoardcastData(attentionData, attentionData.Length);
        }                   // 发送吸引注意力
Example #10
0
 private static void ReportChannelOnline(TransPackage recvPackage, Socket socket)
 {
     socket.SendTOC(
         Encoding.UTF8.GetBytes(
             JsonSerializer.ConvertToText(
                 JsonSerializer.Create(new TransPackage()
     {
         Name        = "Server",
         Content     = $"Online: {clients.Count}, Your IP Address: {((IPEndPoint)socket.RemoteEndPoint).Address}",
         ClientGuid  = "Server",
         PackageType = ConstDef.ReportChannelOnline
     }))));
     Console.ForegroundColor = ConsoleColor.DarkGray;
     PrintLine($"Online Info Req: Sender: {recvPackage.Name}");
 }
Example #11
0
 private static void ChangeChannelName(TransPackage recvPackage, Socket socket)
 {
     socket.SendTOC(
         Encoding.UTF8.GetBytes(
             JsonSerializer.ConvertToText(
                 JsonSerializer.Create(new TransPackage()
     {
         Name        = "Server",
         Content     = channelName,
         ClientGuid  = "Server",
         PackageType = ConstDef.ChangeChannelName
     }))));
     Console.ForegroundColor = ConsoleColor.DarkGray;
     PrintLine($"Channel Name Req: Sender: {recvPackage.Name}");
 }
Example #12
0
 private static void SendErrorUserExisted(Socket socket)
 {
     socket.SendTOC(
         Encoding.UTF8.GetBytes(
             JsonSerializer.ConvertToText(
                 JsonSerializer.Create(new TransPackage()
     {
         Name        = "Server(AutoReplay)",
         Content     = $"Error:This user name existed.",
         ClientGuid  = "Server",
         PackageType = ConstDef.Verification
     }
                                       )
                 )
             )
         );
 }
Example #13
0
 private static void SendErrorUserDoesntExist(Socket socket)
 {
     socket.SendTOC(
         Encoding.UTF8.GetBytes(
             JsonSerializer.ConvertToText(
                 JsonSerializer.Create(new TransPackage()
     {
         Name        = "Server",
         Content     = $"Error:This user doesn't exist.",
         ClientGuid  = "Server",
         PackageType = ConstDef.NormalMessage
     }
                                       )
                 )
             )
         );
 }
Example #14
0
        private static void SaveUser(string JsonPath)
        {
            JsonData jsonData = new JsonData()
            {
                DataType = JsonDataType.Array, content = new List <JsonData>()
            };

            foreach (User usr in UserList)
            {
                jsonData.Add(JsonSerializer.Create(usr));
            }
            StreamWriter streamWriter = new StreamWriter(JsonPath, false);

            streamWriter.Write(JsonSerializer.ConvertToText(jsonData));
            streamWriter.Flush();
            streamWriter.BaseStream.Close();
        }
Example #15
0
        public MainChat(Login loginWindow)
        {
            InitializeComponent();

            WindowParent = loginWindow;
            SelfClient   = loginWindow.SelfClient;

            getOnlineInfoPackageData = Encoding.UTF8.GetBytes(
                JsonSerializer.ConvertToText(
                    JsonSerializer.Create(new TransPackage()
            {
                Name        = WindowParent.NickName,
                Content     = null,
                ClientGuid  = WindowParent.ClientGuid,
                PackageType = ConstDef.ReportChannelOnline
            })));

            DataObject.AddPastingHandler(InputBox, InputBox_OnPaste);
        }
Example #16
0
        private static void ReportTerminalOutput(TransPackage recvPackage, Socket socket)
        {
            PrintLine($"{recvPackage.Name} try to hook terminal on this server.");
            if (!AdminGuid.Contains(recvPackage.ClientGuid))
            {
                socket.SendTOC(
                    Encoding.UTF8.GetBytes(
                        JsonSerializer.ConvertToText(
                            JsonSerializer.Create(new TransPackage()
                {
                    Name        = "Server",
                    Content     = $"You don't have right to hook terminal on remote server.",
                    ClientGuid  = "Server",
                    PackageType = ConstDef.NormalMessage
                }))));
            }
            else
            {
                int    count   = 0;
                int    l       = int.Parse(recvPackage.Content);
                Socket socket1 = socket;
                bool p(string a)
                {
                    count += 1;
                    socket1.SendTOC(
                        Encoding.UTF8.GetBytes(
                            JsonSerializer.ConvertToText(
                                JsonSerializer.Create(new TransPackage()
                    {
                        Name        = "Server",
                        Content     = $"Return:{a}",
                        ClientGuid  = "Server",
                        PackageType = ConstDef.NormalMessage
                    }))));
                    return(true);
                }

                //SafeWriteHook += p;
            }
        }
Example #17
0
        private static void DealUnloginUser(TransPackage recvPackage, Socket socket)
        {
            if (recvPackage.PackageType == ConstDef.NormalMessage)
            {
                string[] args = recvPackage.Content.Split(' ');
                if (args.Length == 2)
                {
                    switch (args[0])
                    {
                    case "/login":
                        recvPackage.PackageType = ConstDef.Login;
                        recvPackage.Content     = args[1];
                        break;

                    default:
                        SendMustLoginInfo(socket);
                        return;
                    }
                }
                else
                {
                    SendMustLoginInfo(socket);
                    return;
                }
            }
            User user = UserList.Find((u) => u.Name == recvPackage.Name);

            switch (recvPackage.PackageType)
            {
            case ConstDef.Login:
                if (user != null)
                {
                    if (user.PasswordHash == recvPackage.Content.GetHashCode())
                    {
                        socket.SendTOC(
                            Encoding.UTF8.GetBytes(
                                JsonSerializer.ConvertToText(
                                    JsonSerializer.Create(new TransPackage()
                        {
                            Name        = "Server",
                            Content     = user.Guid,
                            ClientGuid  = "Server",
                            PackageType = ConstDef.Login
                        }))));
                        WelcomeUser(recvPackage, socket);
                    }
                    else
                    {
                        SendErrorPasswordNotCorrent(socket);
                    }
                }
                else
                {
                    SendErrorUserDoesntExist(socket);
                }
                break;

            case ConstDef.Register:
                if (user == null)
                {
                    User newuser = CreateUser(recvPackage);
                    socket.SendTOC(
                        Encoding.UTF8.GetBytes(
                            JsonSerializer.ConvertToText(
                                JsonSerializer.Create(new TransPackage()
                    {
                        Name        = "Server",
                        Content     = newuser.Guid,
                        ClientGuid  = "Server",
                        PackageType = ConstDef.Login
                    }))));
                    WelcomeUser(recvPackage, socket);
                }
                else
                {
                    SendErrorUserExisted(socket);
                }
                break;

            default:
                SendMustLoginInfo(socket);
                return;
            }
            return;
        }