日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

利用WCF的callback机制开发一个简单的多人游戏模型

發布時間:2025/7/25 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用WCF的callback机制开发一个简单的多人游戏模型 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文介紹了如何利用WCF和callback機制開發一個簡單的多人在線游戲模型。

運行過程如下:

當game service 啟動之后,若干個客戶端便會自動連接到服務器。當某個客戶端點擊join game時,所有客戶端同時更新。

運行screenshot如下圖所示:

WCF service screenshot

client1 screenshot:

client2 screenshot:

WCF service主要代碼如下:

using?System;
using?System.Collections.Generic;
using?System.Linq;
using?System.Text;
using?System.ServiceModel;

namespace?GameService
{
????
public?class?PlayerEventAgrs?:?EventArgs
????{
???????
public?Player?player;
???????
public?GameDesk?desk;
????}


????[ServiceBehavior(InstanceContextMode
=InstanceContextMode.PerSession)]
????
class?GameService:IGameService
????{
????????
static?List<Player>?Players=new?List<Player>();
????????
public?delegate?void?PlayerEventHandler(object?sender,?PlayerEventAgrs?e);
????????
public?static?event?PlayerEventHandler?OnJoinGame;
????????
public?static?event?PlayerEventHandler?OnStartGame;

????????
public?IPlayerCallBack?callback;
???????
????????
public?GameService()
????????{
????????????callback?
=?System.ServiceModel.OperationContext.Current.GetCallbackChannel<IPlayerCallBack>();
????????????OnJoinGame?
+=?new?PlayerEventHandler(GameService_OnJoinGame);
????????????OnStartGame?
+=?new?PlayerEventHandler(GameService_OnStartGame);
??????????????
????????}


????????
public?List<Player>?GetPlayerList()
????????{
????????????System.Threading.Thread.Sleep(
4000);
????????????
return?Players;
????????}

????????
void?GameService_OnJoinGame(object?sender,?PlayerEventAgrs?e)
????????{
????????????Console.WriteLine(
"{0}?is?joining?the?game?on?desk?NO?{1}",?e.player.PlayerName,?e.desk.DeskNo);
????????????callback.OnJoin(e.player,e.desk);
????????}

????????
void?GameService_OnStartGame(object?sender,?PlayerEventAgrs?e)
????????{
????????????callback.OnStart(e.player);
????????}
??????
????????
public?void?BroadGameEvent(PlayerEventAgrs?e,?PlayerEventHandler?temp)
????????{
????????????
if?(OnJoinGame?!=?null)
????????????{
????????????????
foreach?(PlayerEventHandler?handler?in?temp.GetInvocationList())
????????????????{
????????????????????handler.BeginInvoke(
this,?e,?null,?null);
????????????????}
????????????}
????????}

??????????????
????????
public?void?JoinToGame(Player?player,GameDesk?desk)
????????{
????????????Players.Add(player);????

????????????PlayerEventAgrs?e?
=?new?PlayerEventAgrs();
????????????e.player?
=?player;
????????????e.player.PositionNO?
=?desk;
????????????e.desk?
=?desk;
????????????BroadGameEvent(e,?OnJoinGame);
????????}

????????
public?void?StartGame(Player?player)
????????{
????????????PlayerEventAgrs?e?
=?new?PlayerEventAgrs();
????????????e.player?
=?player;
????????????BroadGameEvent(e,?OnStartGame);
????????}
??????
????}
}

callback interface如下:

using?System;
using?System.Collections.Generic;
using?System.Linq;
using?System.Text;
using?System.ServiceModel;
using?System.Runtime.Serialization;

namespace?GameService
{
????[ServiceContract]
????
public?interface?IPlayerCallBack
????{
????????[OperationContract(IsOneWay?
=?true)]
????????
void?OnJoin(Player?player,GameDesk?gamedesk);
????
????????[OperationContract(IsOneWay?
=?true)]
????????
void?OnStart(Player?player);
????}
}

客戶端callback implementation如下:

?#region?CallBack?Implementation
????????
public?void?OnJoin(GameService.Player?player,?GameService.GameDesk?desk)
????????{???????????
????????????
int?deskNo?=?desk.DeskNo;
????????????StringBuilder?show?
=?new?StringBuilder();;
????????????show.AppendFormat(
"Player?Information\n");
????????????show.AppendFormat(
"Player?Name:{0}\n",?player.PlayerName);
????????????show.AppendFormat(
"Player?Status:?{0}\n",player.Action);
????????????show.AppendFormat(
"Player?Role:?{0}\n",?player.Role);

????????????img_Desktop.Image?
=?new?System.Drawing.Bitmap(System.Drawing.Image.FromFile(@"image\active-desktop.bmp"));???????????????????
????????????
switch?(deskNo)
????????????{
????????????????
case?1:???????????????????
????????????????????lb_PlayerInfo1.Text?
=?show.ToString();
????????????????????lb_PlayerInfo1.Refresh();
????????????????????pic_Player1.Image
=new?System.Drawing.Bitmap(System.Drawing.Image.FromFile(@"image\acvite-icon.bmp"));???????????????????
????????????????????
break;
????????????????
case?2:
????????????????????lb_PlayerInfo2.Text?
=?show.ToString();??????????????????
????????????????????pic_Player2.Image?
=?new?System.Drawing.Bitmap(System.Drawing.Image.FromFile(@"image\acvite-icon.bmp"));
????????????????????
break;
????????????????
case?3:
????????????????????lb_PlayerInfo3.Text?
=?show.ToString();???????????????????
????????????????????pic_Player3.Image?
=?new?System.Drawing.Bitmap(System.Drawing.Image.FromFile(@"image\acvite-icon.bmp"));
????????????????????
break;
????????????????
????????????}?????
????
????????}

????????
public?void?OnStart(GameService.Player?player)
????????{

????????}
????????
#endregion

有關本文完整源代碼,請點擊此處下載

?

轉載于:https://www.cnblogs.com/Winston/archive/2008/11/02/1324885.html

總結

以上是生活随笔為你收集整理的利用WCF的callback机制开发一个简单的多人游戏模型的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。