Пример #1
0
        private void JoinBtn_Click(object sender, EventArgs e)
        {
            var username = UsernameTxtBox.Text;

            if (ValidateUsername(username))
            {
                JoinBtn.Enabled = false;
                var user = UserFactory.CreateUser(username);
                Client        = new TcpSocketClient(user, "127.0.0.1", 6009);
                TcpClient     = Client.CreateTcpConnection(Client.Ip, Client.Port);
                NetworkStream = Client.CreateNetworkStream(TcpClient);
                Client.SendMessage(NetworkStream, $"join:{user.Username}");
                var response = Client.ReceivedMessage(NetworkStream);
                if (response.Equals("DuplicateUser"))
                {
                    JoinBtn.Enabled = true;
                    MessageBox.Show("Duplicated Username Error");
                }
                else
                {
                    ChatMessageRichTxtBox.Text += response;
                    ChatMessageRichTxtBox.Text += "\n";
                    ShowBroadCastMessages(NetworkStream);
                    button1.Enabled = true;
                }
            }
        }
        public static void OnResolveRecvMessage(byte[] b, int c, TcpSocketClient client)
        {
            try
            {
                string     datastring = Encoding.UTF8.GetString(b, 0, c);
                Send_frame sf         = JsonConvert.DeserializeObject <Send_frame>(datastring);
                if (sf == null)
                {
                    //数据错误
                    string sendmessage = JsonConvert.SerializeObject(Iot_reply_frame.Get_reply_frame(Result_code.data_error, Result_code.data_error_des));
                    client.SendMessage(sendmessage);
                    //杀死该socket
                    Thread.Sleep(1000);
                    client.DisSocket();
                }
                //长链接
                else if (sf.short_link == null)
                {
                    if (sf.frame_type == Frame_type.注册帧)
                    {
                        string frame_token = Register_operation.Judge_vendor_code(sf.data);
                        if (string.IsNullOrEmpty(frame_token))
                        {
                            //数据错误
                            string sendmessage = JsonConvert.SerializeObject(Iot_reply_frame.Get_reply_frame(Result_code.vendor_code_error, Result_code.vendor_code_error_des));
                            client.SendMessage(sendmessage);
                            //杀死该socket
                            Thread.Sleep(1000);
                            client.DisSocket();
                        }
                        else
                        {
                            TcpClientBindingExternalClass TcpExtendTemp = client.External.External as TcpClientBindingExternalClass;
                            TcpExtendTemp.uuid = frame_token; //frame_token
                                                              //发送正确的应答
                            string sendmessage = JsonConvert.SerializeObject(Iot_reply_frame.Get_reply_frame(new Register_reply_frame()
                            {
                                frame_token = frame_token
                            }));
                            client.SendMessage(sendmessage);
                        }
                    }
                    else if (sf.frame_type == Frame_type.心跳帧)
                    {
                        TcpClientBindingExternalClass TcpExtendTemp = client.External.External as TcpClientBindingExternalClass;
                        //TcpExtendTemp.uuid = "";//frame_token
                        if (TcpExtendTemp.uuid == null || TcpExtendTemp.uuid == "" || TcpExtendTemp.uuid != sf.frame_token)
                        {   //帧token错误
                            string sendmessage = JsonConvert.SerializeObject(Iot_reply_frame.Get_reply_frame(Result_code.frame_token_error, Result_code.frame_token_error_des));
                            client.SendMessage(sendmessage);
                            //杀死该socket
                            Thread.Sleep(1000);
                            client.DisSocket();
                        }
                        else
                        {
                            //正确应答
                            string sendmessage = JsonConvert.SerializeObject(Iot_reply_frame.Get_reply_frame(Result_code.success, Result_code.success_des));
                            client.SendMessage(sendmessage);
                        }
                    }
                    else if (sf.frame_type == Frame_type.数据帧)
                    {
                        TcpClientBindingExternalClass TcpExtendTemp = client.External.External as TcpClientBindingExternalClass;
                        //TcpExtendTemp.uuid = "";//frame_token
                        if (TcpExtendTemp.uuid == null || TcpExtendTemp.uuid == "" || TcpExtendTemp.uuid != sf.frame_token)
                        {   //帧token错误
                            string sendmessage = JsonConvert.SerializeObject(Iot_reply_frame.Get_reply_frame(Result_code.frame_token_error, Result_code.frame_token_error_des));
                            client.SendMessage(sendmessage);
                            //杀死该socket
                            Thread.Sleep(1000);
                            client.DisSocket();
                        }
                        else
                        {
                            //正确应答
                            string sendmessage = JsonConvert.SerializeObject(Iot_reply_frame.Get_reply_frame(Result_code.success, Result_code.success_des));
                            client.SendMessage(sendmessage);
                            //todo解析
                            Data_frame_operation.Data_operation(sf.equipment_type, sf.data);
                        }
                    }
                    else
                    {
                        //数据错误
                        string sendmessage = JsonConvert.SerializeObject(Iot_reply_frame.Get_reply_frame(Result_code.data_error, Result_code.data_error_des));
                        client.SendMessage(sendmessage);
                        //杀死该socket
                        Thread.Sleep(1000);
                        client.DisSocket();
                    }
                }
                //短链接
                else if (sf.short_link == "true")
                {
                    if (sf.frame_type == Frame_type.数据帧)
                    {
                        bool frame_token = Register_operation.Judge_vendor_code(sf.frame_token);
                        if (!frame_token)//厂商验证码不正确
                        {
                            //数据错误
                            string sendmessage = JsonConvert.SerializeObject(Iot_reply_frame.Get_reply_frame(Result_code.vendor_code_error, Result_code.vendor_code_error_des));
                            client.SendMessage(sendmessage);
                            //杀死该socket
                            Thread.Sleep(1000);
                            client.DisSocket();
                        }
                        else//厂商验证码正确
                        {
                            //正确应答
                            string sendmessage = JsonConvert.SerializeObject(Iot_reply_frame.Get_reply_frame(Result_code.success, Result_code.success_des));
                            client.SendMessage(sendmessage);
                            //todo解析
                            Data_frame_operation.Data_operation(sf.equipment_type, sf.data);
                            //短链接差不多就杀死这个链接
                            Thread.Sleep(3000);
                            client.DisSocket();
                        }
                    }
                    else
                    {
                        //数据错误
                        string sendmessage = JsonConvert.SerializeObject(Iot_reply_frame.Get_reply_frame(Result_code.data_error, Result_code.data_error_des));
                        client.SendMessage(sendmessage);
                        //杀死该socket
                        Thread.Sleep(1000);
                        client.DisSocket();
                    }
                }
                else
                {
                    //数据错误
                    string sendmessage = JsonConvert.SerializeObject(Iot_reply_frame.Get_reply_frame(Result_code.data_error, Result_code.data_error_des));
                    client.SendMessage(sendmessage);
                    //杀死该socket
                    Thread.Sleep(1000);
                    client.DisSocket();
                }
            }
            catch (Exception ex)
            {
                if (client != null)
                {
                    string sendmessage = JsonConvert.SerializeObject(Iot_reply_frame.Get_reply_frame(Result_code.unknown_error, Result_code.unknown_error_des));
                    client.SendMessage(sendmessage);

                    //杀死该socket
                    Thread.Sleep(1000);
                    client.DisSocket();
                }
            }
        }