コード例 #1
0
        void OnSend(TcpSocketClient client, byte[] buffers)
        {
            ThreadCalls(() =>
            {
                try
                {
                    BaseCommand cmd = new BaseCommand(buffers);
                    switch (cmd.Command)
                    {
                    case Commands.UnBind:
                    case Commands.UnBind_Resp:
                        client.Disconnect();
                        break;

                    case Commands.Bind_Resp:
                        //绑定验证出错则断开连接
                        var bindresp = new Bind_Resp(buffers);
                        if (bindresp.Result != CommandError.Success)
                        {
                            client.Disconnect();
                        }
                        else
                        {
                            StartWaitSendThread(client);
                        }
                        break;

                    default:
                        break;
                    }

                    PrintLog("发送一条命令 \"" + Commands.GetString(cmd.Command) + "\" 给 \"" + client.LocalIPAddress + "\"");
                }
                catch (Exception e)
                {
                    PrintLog("发送一条命令给 \"" + client.LocalIPAddress + "\" 出现错误:" + e.Message);
                }
            });
        }
コード例 #2
0
        void BindHandler(TcpSocketClient client, Bind bind)
        {
            var resp = new Bind_Resp
            {
                SequenceNumber = bind.SequenceNumber,
                Result         = CommandError.Success
            };

            if (bind.LoginType != LoginTypes.SPToSMG)
            {
                resp.Result = CommandError.InvalidLoginType;
            }
            else
            {
                //todo auth
                if (bind.LoginName == "" || bind.LoginPassword == "")
                {
                    resp.Result = CommandError.InvalidLogin;
                }
                else if (spClientPool.Count(i => i.SPNumber.Equals(bind.LoginName)) > 0)
                {
                    resp.Result = CommandError.RepeatLogin;
                }
                else
                {
                    //添加到连接池
                    spClientPool.Add(new SPClient
                    {
                        SPNumber = bind.LoginName,
                        Socket   = client
                    });
                }
            }

            client.Send(resp.GetBytes());
        }
コード例 #3
0
ファイル: VirtualSP.cs プロジェクト: wind959/SMGServices
        void OnRead(TcpSocketClient client, byte[] buffers)
        {
            ThreadCalls(() =>
            {
                try
                {
                    var cmd = new BaseCommand(buffers);

                    switch (cmd.Command)
                    {
                    case Commands.Bind_Resp:
                        var bind_resp = new Bind_Resp(buffers);
                        if (bind_resp.Result != CommandError.Success)
                        {
                            PrintLog("绑定验证失败:" + CommandError.GetMessage(bind_resp.Result));
                            Thread.Sleep(1000);
                            client.Disconnect();
                        }
                        break;

                    case Commands.Deliver:
                        var deliver = new Deliver(buffers);
                        //新消息提醒
                        PrintLog("收到一条 " + deliver.UserNumber + " 发来的新消息!");
                        //绑定消息会话
                        BindSession(false, deliver.UserNumber, deliver.MessageContent);
                        //发送响应
                        client.Send(new Deliver_Resp
                        {
                            SequenceNumber = deliver.SequenceNumber,
                            Result         = CommandError.Success
                        }.GetBytes());
                        break;

                    case Commands.Deliver_Resp:
                        var deliver_resp = new Deliver_Resp(buffers);
                        if (deliver_resp.Result != CommandError.Success)
                        {
                            PrintLog("传送消息失败:" + CommandError.GetMessage(deliver_resp.Result));
                        }
                        break;

                    case Commands.Report:
                        client.Send(new Report_Resp
                        {
                            SequenceNumber = cmd.SequenceNumber,
                            Result         = CommandError.Success
                        }.GetBytes());
                        break;

                    default:
                        break;
                    }

                    PrintLog("接收一条命令:" + Commands.GetString(cmd.Command));
                }
                catch (Exception e)
                {
                    PrintLog("读取消息出现错误: " + e.Message);
                }
            });
        }
コード例 #4
0
ファイル: VirtualPhone.cs プロジェクト: wind959/SMGServices
        void OnRead(TcpSocketClient client, byte[] buffers)
        {
            ThreadCalls(() =>
            {
                try
                {
                    var cmd = new BaseCommand(buffers);

                    switch (cmd.Command)
                    {
                    case Commands.Bind_Resp:
                        var bind_resp = new Bind_Resp(buffers);
                        if (bind_resp.Result != CommandError.Success)
                        {
                            PrintLog("绑定验证失败:" + CommandError.GetMessage(bind_resp.Result));
                            Thread.Sleep(1000);
                            client.Disconnect();
                        }
                        break;

                    case Commands.Deliver:
                        var deliver = new Deliver(buffers);
                        //添加接收记录
                        var sms = new SMS
                        {
                            SPNumber   = deliver.SPNumber,
                            UserNumber = deliver.UserNumber,
                            Content    = deliver.MessageContent,
                            Time       = DateTime.Now,
                            Type       = SMSTypes.RECEIVE
                        };
                        SMSHistory.Add(sms);
                        //绑定会话组
                        BindGroup(deliver.SPNumber);
                        //绑定会话
                        if (lbGroup.SelectedItem != null && lbGroup.SelectedItem.ToString() == sms.SPNumber)
                        {
                            BindSession(sms);
                        }
                        else
                        {
                            lbGroup.SelectedItem = deliver.SPNumber;
                            BindSession(deliver.SPNumber);
                        }
                        //新消息提醒
                        PrintLog("收到一条 " + sms.SPNumber + " 发来的新消息!");
                        //发送响应
                        client.Send(new Deliver_Resp
                        {
                            SequenceNumber = deliver.SequenceNumber,
                            Result         = CommandError.Success
                        }.GetBytes());
                        break;

                    case Commands.Deliver_Resp:
                        var deliver_resp = new Deliver_Resp(buffers);
                        if (deliver_resp.Result != CommandError.Success)
                        {
                            PrintLog("传送消息失败:" + CommandError.GetMessage(deliver_resp.Result));
                        }
                        break;

                    default:
                        break;
                    }

                    PrintLog("接收一条命令:" + Commands.GetString(cmd.Command));
                }
                catch (Exception e)
                {
                    PrintLog("读取消息出现错误: " + e.Message);
                }
            });
        }