Silverlight+WCF 新手实例 象棋起名 回归WCF通讯应用-登陆(十八)

名字可以影响旁人对友好的第一印象

1。当然是添加服务引用了,并起名为GameService。

眼看我们大家都是出自全球并不互相认识,不过在这种情况下她却用一个好名字给大家留下了魂牵梦绕的第一印象,至少让自身发生了想进一步询问他的希望。

FindPlayer:从大局里找用户

一个名字能在网上引起热议,这就是因为在大家的知识中,“起名”真的是一件特别首要的业务。

起名 1

您还真别不信,因为名字的涉及,还影响了有些人的流年。

1。对着解决方案-》右键-》添加新建项目-》采纳WCF应用服务程序-》输入:GameService

不期而至的,还有一众小伙伴的吐槽:“走,我们去吃金拱门”,“喂,金拱门吗?我要点一份加拉加斯”。有人干脆给金拱门取其它名字,比如金大门、猪拱门、拱金门……

        [OperationContract(IsOneWay = true)]
        void Logout(Player player);//退出
        
    }
}

“穿着打扮是你未开口言语时所说的话”,意思就是当您还没说话说话时,你的着装代表你的方方面面。当大家同一时间面试,穿着正装的对峙统一穿着自由的面试者,会给面试官一种“你很惬意这些工作机会”的端正态度,更能唤起面试官的关怀。

对着DataContract文件夹右键-》添加-》类-》输入:Player.cs

2、方便的着装

步骤:

只是,不同于“金拱门”的小买卖改名,我们的名字多数情状下在诞生时就曾经被大人决定了,那么对于那个并未好名字的人,应该怎么着给人建立好的第一映像?

要一口咬定房间是否存在,然后还要判断房间里是不是已有用户了,最终才增长。

年年岁岁的校招都能瞥见大批恰巧毕业的硕士前来应聘,我已经问过做HR的爱人,她们是何许在一堆学历差不多的硕士中,更快地面试到合适的人。回复给自身的艺术有成千上万,其中有一个同等的答案就是看面试者的着装。

 

“名字实验”讲明,当众人需要疾速做出有关旁人的决定时,更在意那么些名字代表成功和吸重力的人,平时通过严俊考虑再做决定。

 private void btnLogin_Click(object sender, RoutedEventArgs e)
        {
            nickName = txtNickName.Text.Trim();
            if (nickName == “”)
            {
                MessageBox.Show(“请输入昵称!”);
                return;
            }
            if (nickName.Contains(“,”))
            {
                MessageBox.Show(“昵称不能包含非法字符!”);
                return;
            }
            btnLogin.IsEnabled = false;
            //下边这几句代码变了一下:
            App.player.ID = userID;
            App.player.NickName = nickName;
            App.client.LoginCompleted += new EventHandler<System.ComponentModel.AsyncCompletedEventArgs>(client_LoginCompleted);
            App.client.LoginAsync(App.player);
           
        }
        void client_LoginCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
        {//设置Cookie
            System.Windows.Browser.HtmlPage.Document.Cookies = userID + “,” + nickName;
            ((App)(Application.Current)).RedirectTo(new Room());
        }

一夜间,还没影响过来,朋友圈就被麦当劳改名“金拱门”刷屏了。

 

本着这种气象,英帝国Hutt福德高校心境学家理查德(理查德)·怀斯曼做过一项“名字试验”。怀斯曼在研商中提议,人们对名字的直觉看法可能影响她们对其旁人的第一印象。

 

“人们常见没有察觉到,他们对名字有一对原来偏好,尤其是女性。”怀斯曼说,“这可能会潜移默化局部人的决定,其中包括导师、白领,甚至政治家。”

namespace GameService
{
    public class Service : IService
    {
        /// <summary>
        /// 玩家集合
        /// </summary>
        static Dictionary<int, Dictionary<Guid, Player>> playerList = new Dictionary<int, Dictionary<Guid, Player>>();
        #region IService 成员
        public void Login(Player player)
        {
            //待实现
        }

在对方不认得您时,一个干净体面的外部能给人一种可靠感。尽管你长得没有惊为天人,但有些注意一下平常的面貌管理,对于对方也是一个吝惜的显现。

起名 2起名 3

“金拱门”告诉我们,名字真个很!重!要!

 public void Login(Player player)
        {
            //待实现
            Player oldPlayer = FindPlayer(player.ID);
            if (oldPlayer != null)//用户已存在了
            {
                RemovePlayer(player);//删除用户
            }
            AddPlayer(player, 0);//添加用户
        }

3、非常的言语

这不,WCF引用的轮询是4.0的,到Silverlight里,就只好引用2.0的。好在也能用着。

俗话说“对什么样人,说怎么话”,除了名字、外貌,一个了不起的联络对大家树立民用映像也享有举足轻重的效用。对于熟络的“死党”我们得以一直大呼小叫,而对此刚晤面的长辈、领导,端庄并符合身份的语言互换,才能给对方留下赞扬的回想。

在此之前的门类大伙没丢把,重新发下载地址:此前第3等级代码:点此下载

一个名字的三六九等,在很大程度上能控制旁人是否对大家有一个理想的第一印象。因为在尚未熟习相互时,名字就恍如我们递交给对方的名片。当自身手中拿了一叠毫无特点、平白无奇的片子,一张张看完可能就会忘记从前的,可是一旦一叠白色名片中有一张彩色的,我说不定会登时拿出来多看几眼,甚至一叠中只记住了那张。

static Player FindPlayer(Guid playerID)
        {
            foreach (KeyValuePair<int, Dictionary<Guid, Player>> item in playerList)
            {
                if (item.Value.ContainsKey(playerID))
                {
                    return item.Value[playerID];
                }
            }
            return null;
        }
        static void RemovePlayer(Player player)
        {
            playerList[player.RoomID].Remove(player.ID);
        }
        static void AddPlayer(Player player, int roomID)
        {
            player.RoomID = roomID;
            //注册回调
            player.CallBack = OperationContext.Current.GetCallbackChannel<ICallBack>();
            Dictionary<Guid, Player> players;
            if (playerList.ContainsKey(roomID))//房间已存在
            {
                players = playerList[roomID];//房间拥有用户

从而,对于个人可以的映像确立,个性适宜的名字很首要,干净的外部、正确的着装、端庄的言语更要紧。人无完人,但是我们可以全力以赴去做一个“完人”。

全盘三个函数都短一点,前面添加就长一些了。

记得大学第一次班会,指点员让每一位学生上讲台做一个自我介绍,全班50六个小伙伴轮流介绍完后,除了相处了几天的室友,唯一让自己竟然是全班人都难以忘怀的有一个女孩子。她长得并不出众,只因为她的名字——良辰美景。没错,就是《陈书·孙霤传》中“每良辰美景,宾僚并集;泛南达科他河而置酒,亦一时之胜赏焉。”的“良辰美景”。

起名 4起名 5

恐怕麦当劳也没意料到,那些名字会造成这样扎眼的反射。当晚,麦当劳(中国)随即答应:“这一转移首要在证照层面,麦当劳餐厅名称、食品安全标准、营运流程等保持不变。”也就是说,你家边上的麦当劳还叫“麦当劳”,“金拱门”五个大字只会现出在偷偷。

跟着是客户端要调用先导了,这里先:

有诸如此类一个社会小测试:策划者让一个毛发凌乱,胡子拉渣的中年男子像路人借一枚乘车的硬币,其中多数旁人都未曾借硬币给男子。一个钟头后,策划者让须眉将头发整理好,刮掉了覆盖了半张脸的胡须,再让他去向路人借钱,结果展现多数第三者都很热心的匡助了男子。

身为,客户端直接传送一个Player实体过来了,我们跟着实现那些接口:

在大家生存中,为祥和塑造和掩护一个特出的个体形象,给别人带来深入的第一映像,就像是对团结的一种投资,长时间不断下去迟早给大家带来方便的回报。

 

1、彻底的外部

对着Game瑟维斯项目右键-》添加-》新建文件夹-》输入:DataContract

早期研讨也显示,人们对名字的直觉看法有早晚预示力量。助教批改作业时可能会给名字拥有吸引力的学员打高分;公司业主可能会采纳提拔这一个名字代表成功的员工,认为她们更有前途。

看通晓了,现在来贯彻Login登陆了。

如明嘉靖二十三年,原先预定的魁首本来是吴清,当主公审阅时,发现“吴清”即“无情”,那么无情即无义的人怎能做探花呢?于是便命令撤换,而吴清也不得不做了温馨名字的散货,所谓的一名之得立刻成龙,然一名之失,登时成虫,大概就是这般情状了。看来,一个含义吉祥、美好、典雅的好名字不仅可以超过,给人一种无限遐想的上空,有时甚至是迈向社会、走向成功至关首要的第一步。

前四节,大家讲了报道基础,从这节起,我们回归到花色中来,要将眼前的WCF通讯知识运用进入。

正如开学时首先节课点名,老师并不认得讲台下的新兴,花名册上也只是逐一排列的每一个学生名字。而当老师点到有特色、有个性的名字时,都会抬头特别注意一下这位学生。

Grid root = new Grid();
        public static GameService(Service).Service(Service)Client client;//回调的客户端
        public static GameService(Service).Player player;//当前玩家
        public App()
        {
            this.Startup += this.Application_Startup;
            this.Exit += this.Application_Exit;
            this.UnhandledException += this.Application_UnhandledException;

所以这里大家还要补上几个点子:

起名 6起名 7

下面步骤完成了后

故而引用不了4.0的wsDualHttpBinding库,所以没用它了。

起名 8

                if (!players.ContainsKey(player.ID))
                {
                    players.Add(player.ID, player);
                }
            }
            else
            {
                players = new Dictionary<Guid, Player>();
                players.Add(player.ID, player);
                playerList.Add(roomID, players);
            }
        }

据悉从前俺们报了名一样,先判断用户在不在,在就删除,然后再添加用户。

RemovePlayer:从全局里移除用户

 

        #endregion
    }
}

7。修改配置文件,参考十五小节

 

1.新添加一个回调接口:ICallBack

using System.Runtime.Serialization;
namespace GameService
{
    /// <summary>
    /// 游戏玩家 by 路过春日
    /// </summary>
    [DataContract]
    public class Player
    {
       
    }
}

OK,WCF的服务端就写完了,写完就要编绎下服务端代码,确保是例行通过的。

好了按F5运行,

起名 9起名 10

 

脱离就一行代码搞完了:

观望翻译接头了呢,所有的玩家都被分到房间里去了。然后所有的屋子的玩家才构成一个大聚合。

 

AddPlayer:从大局里添加一个用户

用户登陆就到此了,这退出呢?

2。删除默认的I瑟维斯(Service)(Service)1.cs和IService1.svc

眼前的连串社团图如下:

起名 11

 public void Logout(Player player)
        {
            //待实现
            RemovePlayer(player);//删除用户
        }

 

       /// <summary>
       /// 玩家所在屋子号
       /// </summary>
       [DataMember]
       public int RoomID
       {
           get;
           set;
       }
    }

此处有几许提一下:

自家机子装了VS2005+VS2010

 

点击登陆,正常转向房间

随即咱们回去App.xaml.cs里,我们把GameService(Service)做成一个全局变量,在应用程序先导时实例化一次,将来调用就毫无到New了:

4。把跨域文件clientaccesspolicy.xml复制到项目中去.

起名 12起名 13

namespace GameService
{
    /// <summary>
    /// 游戏玩家 by 路过春季
    /// </summary>
    [DataContract]
    public class Player
    {
        /// <summary>
        /// 玩家ID
        /// </summary>
        [DataMember]
        public Guid ID
        {
            get;
            set;
        }
        /// <summary>
        /// 玩家昵称
        /// </summary>
        [DataMember]
        public string NickName
        {
            get;
            set;
        }
        /// <summary>
        /// 玩家的回调
        /// </summary>
        [DataMember]
        internal ICallBack CallBack
        {
            get;
            set;
        }

起名 14

2.添加文(加文)件夹,用于存放通讯实体[契约数据]

RoomID:玩家所在屋子,没有的话默认为0;
上边我们兑现属性代码:

自家这在里用了一个静态的全局变量,来保存所有的用户,简单解释一下这一个双重的泛型字典集合

6。添加引用PollingDuplex.dll

 

3。新建WCF服务,起名为IService

 

            InitializeComponent();
            InitiallizeGlobalVar();
        }
        private void InitiallizeGlobalVar()
        {
            PollingDuplexHttpBinding binding = new PollingDuplexHttpBinding()
            {
                InactivityTimeout = TimeSpan.FromMinutes(20)
            };
            EndpointAddress endPoint = new EndpointAddress(“http://localhost:8686/Service.svc“);
            client = new GameService.ServiceClient(binding, endPoint);
            player = new GameService.Player();
        }

新建的档次Silverlight是2.0的库,WCF服务应用程序是4.0的库。所以在引用DLL方面,有点小插曲。

Dictionary<int, Dictionary<Guid, Player>>
翻译一下就变成—-》Dictionary<房间号, 玩家列表>

现回到Login页面,简单修改下在此以前的代码:

我们接下去要添加多少个新文件:

用来传递的player完成了,现在大家写一下WCF通讯模式,我们为I瑟维斯(Service)接口添加登(Garden)陆和退出事件:

咱们去掉Player的名号空间[.DataContract],其实就是去掉文件夹的称呼:

由于Silverlight+WCF 新手实例 象棋
WCF通讯跨域(十五)
已截图,所以这里不截图了。

顺手提一下,之所以不用wsDualHttpBinding双工通讯情势,就是因为Silverlight是2.0的,

起名 15起名 16

 

对着Game瑟维斯(Service)项目右键-》添加-》新建项->选取接口->输入:ICallBack.cs

3.在简报实体文件夹下,咱们抬高一个玩家Player实体用于通讯传递。

 

起名 17起名 18

        public void Logout(Player player)
        {
            //待实现
        }

5。设置GameService(Service)项目性质的一定启动端口为:8686

随之,大家为Player扩张基本性能[之后随着应用会大增]:
ID:用户标识
NickName:昵称
CallBack:玩家的回调,大家把回调放到玩家里。

namespace GameService
{
    [ServiceContract(CallbackContract = typeof(ICallBack))]//头顶上这里写明了回调是ICallBack
    public interface IService
    {
        [OperationContract(IsOneWay = true)]
        void Login(Player player);//登陆

俺们为Chess项目的缓解方案里,再添加WCF应用服务程序

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图