Scut快速开发(2)

Python脚本开发

1   开发环境

Scut Lib版本:5.2.3.2

需要安装的软件

a)        IIS和消息队列(MSMQ)

进入控制面板,程序和功能

b)        SQL Server2005

c)        VS2010开发工具

d)        Python2.6(ScutGame官网下载IronPython2.6.1 RC1 for .NET 4.0插件)

工具

a)        协议工具(目录Source\Tools\ContractTools)

2     游戏公告

2.1     创建项目

打开VS2010,新建一个控制台项目命名为GameNotice,并设置项目属性的目标框架为Net Framework 4.0;如图:

组件引用

项目

引用路径

HostServer

Lib\Newtonsoft.Json.dll

Lib\NLog.dll

Lib\protobuf-net.dll

Lib\ ServiceStack.Common.dll

 

Lib\IronPython.dll

Lib\IronPython.Modules.dll

Lib\Microsoft.Dynamic.dll

Lib\Microsoft.Scripting.dll

 

Lib\ZyGames.Framework.Common.dll

Lib\ZyGames.Framework.dll Lib\ZyGames.Framework.Lib.dll

Lib\ZyGames.Framework.RPC.dll

Lib\ZyGames.Framework.Game.Lang.dll

Lib\ZyGames.Framework.Game.dll

Lib\ ZyGames.Framework.Game.Contract.dll

(注:检查PythonDLL组件引用属性面版, ”复制本地“属性为True

增加GameHostApp类,继承至GameHost基类,在Main方法中调用

// Program.cs
static void Main(string[] args)
{
try
{
GameHostApp.Current.Start();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
TraceLog.WriteError("HostServer error:{0}", ex);
}
finally
{
Console.WriteLine("Press any key to exit the listener!");
Console.ReadKey();
GameHostApp.Current.Stop();
}
}

增加GameHostApp类中的OnRequested、OnStartAffer等方法处理代码:

// GameHostApp.cs
class GameHostApp : GameSocketHost
{
private static GameHostApp instance; static GameHostApp()
{
instance = new GameHostApp();
} private GameHostApp()
{
} public static GameHostApp Current
{
get { return instance; }
} protected override void OnConnectCompleted(object sender, ConnectionEventArgs e)
{
Console.WriteLine("Client:{0} connect to server.", e.Socket.RemoteEndPoint);
} protected override void OnRequested(HttpGet httpGet, IGameResponse response)
{
try
{
ActionFactory.Request(httpGet, response, null);
}
catch (Exception ex)
{
Console.WriteLine("{0}", ex.Message);
}
} protected override void OnStartAffer()
{
try
{
//时º¡À间?间?隔?更¨¹新?库a
int cacheInterval = ;
GameEnvironment.Start(cacheInterval, () => true);
Console.WriteLine("The server is staring...");
}
catch (Exception ex)
{
TraceLog.WriteError("The server start error:{0}",ex);
}
} protected override void OnServiceStop()
{
GameEnvironment.Stop();
} }

项目层次结构划分,增加Model目录存储数据实体类和PyScript目录存放脚本文件;修改App.config配置:

<appSettings>
<!--服务监听端口-->
<add key="Game.Port" value="" />
<!--Code:游戏代码;ServerId:游戏分区代码-->
<add key="Product.Code" value=""/>
<add key="Product.ServerId" value=""/>
<!--Python脚本配置
Python_IsDebug:是否开启调试功能
PythonRootPath:脚本路径,相对于程序运行目录
-->
<add key="Python_IsDebug" value="true"/>
<add key="PythonRootPath" value="..\..\PyScript"/>
</appSettings>
<connectionStrings>
<!--修改DataSource和Pwd-->
<add name="GameData" providerName="" connectionString="Data Source=.;Initial Catalog=GameData;Uid=sa;Pwd=123;"/>
</connectionStrings>

2.2     实体静态注入配置

用记事本打开GameNotice.csproj文件,在结尾增加如下配置:

<Project>
... ... <UsingTask TaskName="ZyGames.Framework.Common.Build.WeavingEntityTask" AssemblyFile="bin\$(Configuration)\ZyGames.Framework.Common.dll" />
<Target Name="AfterBuild">
<WeavingEntityTask SolutionDir=".\\bin\$(Configuration)" FilePattern="GameNotice.exe" />
</Target> ... ...
</Project>

(小提示:使用ILSpy工具反编译可以查看Model的Notice类属性会被修改)

2.3     创建数据库

使用SQL Server2005建立一个GameData库 ;

2.4     定义协议接口

打开协议生成器工具,增加一个“GameNotice”项目方案,接着在增加公告信息(接口编号2001)协议,请求参数和下发参数;如图:

2.5     编写脚本

导入脚本库

复制Scut/PythonLib/目录下所有文件到项目PyScript目录下,并包括到项目中,并修改路由配置表(Route.config.xml)的Python安装类库路径;如图:

新增脚本

在Action目录下创建脚本协议接口action2001.py,把协议工具生成的2001的脚本代码复制到action2001.py文件;接着将2001接口增加到路由表中,设置” ignoreAuthorize”为true;以下是需要修改的部分代码:

#注册DLL和引用命名空间
import clr, sys
from action import *
clr.AddReference('ZyGames.Framework')
clr.AddReference('ZyGames.Framework.Common')
clr.AddReference('ZyGames.Framework.Game')
clr.AddReference('GameNotice')
from ZyGames.Framework.Common import *
from ZyGames.Framework.Cache.Generic import *
from ZyGames.Framework.Game.Cache import *
from ZyGames.Framework.Game.Service import *
from GameNotice.Model import *
... ...
def takeAction(urlParam, parent):
actionResult = ActionResult()
noticeList = ShareCacheStruct[Notice]().FindAll()
result = MathUtils.GetPaging[Notice](noticeList, urlParam.PageIndex, urlParam.PageSize)
if result:
actionResult.dsItemCollect = result[]
actionResult.PageCount = result[]
return actionResult def buildPacket(writer, urlParam, actionResult):
writer.PushIntoStack(actionResult.PageCount)
writer.PushIntoStack(len(actionResult.dsItemCollect))
for info in actionResult.dsItemCollect:
dsItem = DataStruct()
dsItem.PushIntoStack(info.Title)
dsItem.PushIntoStack(info.Content)
dsItem.PushIntoStack(info.CreateDate.ToString("yyyy-MM-dd HH:mm:ss"))
writer.PushIntoStack(dsItem)
return True

运行结果

F5启动程序后,使用协议工具的单元测试功能发起请求测试;

 开源地址:

GitHub地址:https://github.com/ScutGame

观看视频:http://v.youku.com/v_show/id_XNTk1NzQ3MzAw.html

Scut游戏服务器免费开源框架--快速开发(2)的更多相关文章

  1. Scut游戏服务器免费开源框架--快速开发(3)

    Scut快速开发(3) 1     开发环境 Scut Lib版本:5.2.3.2 需要安装的软件 a)        IIS和消息队列(MSMQ) b)        数据库,Sql2005以上版本 ...

  2. Scut游戏服务器免费开源框架--快速开发(1)

    Scut快速开发(1) 1        开发环境 需要安装的软件 a)        VS2010开发工具(.Net Framework 4.0以上) 2        HelloWorld 2.1 ...

  3. Scut游戏服务器免费开源框架-3

    Scut游戏服务器免费开源框架--快速开发(3) Scut快速开发(3) 1        开发环境 需要安装的软件 a)        消息队列 b)        数据库,Sql2005以上版本 ...

  4. Scut游戏服务器引擎6.1.5.6发布,直接可运行,支持热更新

    1. 增加exe版(console),web版本(IIS)的游戏服宿主程序 2. 增加Model支持脚本化,实现不停服更新 3. 增加Language支持脚本化 4. 修改Sns与Pay Center ...

  5. 使用 CodeIgniter 框架快速开发 PHP 应用(一)

    原文:使用 CodeIgniter 框架快速开发 PHP 应用(一) 对 CodeIgniter 的介绍大多数PHPer都想写出运行状态良好的应用程序,而且希望尽可能做得简单且不费事.这篇文章是有关 ...

  6. 使用 CodeIgniter 框架快速开发 PHP 应用(二)

    原文:使用 CodeIgniter 框架快速开发 PHP 应用(二) 二分钟: 建立一个 CodeIgniter 网站用CI建一个网站很容易. 这一章很短,解释了用CI制作网站时发生了些什么,哪些文件 ...

  7. Scut游戏服务器引擎之Unity3d接入

    Scut提供Unity3d Sdk包,方便开发人员快速与Scut游戏服务器对接: 先看Unity3d示例如下: 启动Unity3d项目 打开Scutc.svn\SDK\Unity3d\Assets目录 ...

  8. 使用 CodeIgniter 框架快速开发 PHP 应用(七)

    原文:使用 CodeIgniter 框架快速开发 PHP 应用(七) CodeIgniter 和对象这是玩家章节.它讲述的是 CodeIgniter 的工作原理,也就是揭开CI头上'神秘的面纱'.如果 ...

  9. 使用 CodeIgniter 框架快速开发 PHP 应用(六)

    原文:使用 CodeIgniter 框架快速开发 PHP 应用(六) 简化使用 Session 和安全理论说得够多了! 现在让我们开始写我们自己的应用. 在这一章里,我们将会大致描述一下我们要建立的一 ...

随机推荐

  1. HDU 4118 Holiday's Accommodation

    Holiday's Accommodation Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 200000/200000 K (Jav ...

  2. IIS安全工具UrlScan介绍 ASP.NET 两种超强SQL 注入免费解决方案( 基于IIS,使用免费工具) 批改或隐藏IIS7.5的Server头信息 移除X-Powered-By,MVC,ASP.NET_SessionId 的 HTTP头或者cookie名称

    微软给了我们一个很好的工具用来使IIS安全的运行-------UrlScan,下面是它的配置文件介绍 [options]UseAllowVerbs=1                ; 若为1,则使用 ...

  3. 使用eclipse上传项目到开源中国代码托管Git@osc教程

    创建项目 安装EGit插件 没有的话看下图 生成公钥 注册git账号 新建git项目 添加公钥 建立本地代码库 本文章版权归博主所有,如需转载请私信.

  4. Cesium简介

    一.Cesium介绍 Cesium是国外一个基于JavaScript编写的使用WebGL的地图引擎.Cesium支持3D,2D,2.5D形式的地图展示,可以自行绘制图形,高亮区域,并提供良好的触摸支持 ...

  5. Flash Air 打包安卓 ane

    工具: 1.flash builder 2.adt打包工具 3.数字证书 一. 创建 jar 文件 1. 打开flash builder, 新建一个java 项目. 2.点击项目属性,选择Java构建 ...

  6. Openstack-Mitaka Ceilometer 部署心得

    Openstack-Mitaka Ceilometer 部署心得 标签 : Openstack Ceilometer 是 Openstack 的监控管理计费模块,我所用的版本为 Mitaka 版本.C ...

  7. Card objects

    There are fifty-two cards in a deck, each of which belongs to one of four suits and one of thirteen ...

  8. 操作系统是怎么工作的——函数的堆栈框架/嵌入式代码

    1.函数堆栈框架 1.1框架模型 call指令: 1)将eip中的下一条指令的地址A保存在栈顶: 2)设置eip指向被调用程序的代码处. ret指令:将地址A恢复到eip中 这样就将函数的调用变为顺序 ...

  9. ajax和servlet交互

    网上有比较多的教程来将如何实现ajax与servlet的交互了,这里和这里的教程可以参考参考,在此处我只简单说明一下,并记录一下我这次遇到的问题. 整个思路是:写个js函数,在里面使用XHR(ajax ...

  10. html5相关

    1.语义化标签: header\section\aside\footer 2.音视频播放: video\audio 其中video支持ogg\mpeg4\webm格式的视频: 3.canvas 一.画 ...