Skip to content
ScutGame edited this page Jul 6, 2015 · 6 revisions

此章节介绍HelloWorld示例--C#脚本

通过Helloworld程序简单介绍下Scut服务端开发的流程,客户端的这里就不介绍了可以查看客户端的Lua源码。

功能概述

客户端使用Socket协议发送一个请求到服务端,服务端接收到请求后响应一段字符串给客户端,接收客户端接收到后显示出来。 序列图如下:

Hello sequence

开发流程

  • 设计接口协议

通过协议工具平台定义一个与客户端通讯的Action接口协议,Action编号为100(编号规则以3位数开始,低于3位数的Scut预留使用);

增加一个string类型,名称为content的返回参数,请求参数可以不加,如图:

contract action

在右边会自动生成服务端与客户端的通讯接口脚本,可以直接复制到项目中;

  • 创建项目

通过打开VS创建“HelloWorld”项目,详细创建参考如何搭建服务端项目工程;在Script/CsScript/Action的目录下新建立Action100类文件;然后将协议平台生成的服务端协议脚本复制到文件中;修改如下:

#!Action100.cs
using System;
using System.Collections.Generic;


namespace GameServer.CsScript.Action
{
   
    /// <summary>
    /// Hello World
    /// </summary>
    /// <remarks>继续BaseStruct类:不检查用户合法性请求;AuthorizeAction:有验证合法性</remarks>
    public class Action100 : AuthorizeAction
    {
        private string _content;
        

        public Action100(ActionGetter actionGetter)
            : base((short)100, actionGetter)
        {
            
        }

        /// <summary>
        /// 检查的Action是否需要授权访问
        /// </summary>
        protected override bool IgnoreActionId
        {
            get{ return true; }
        }

        /// <summary>
        /// 客户端请求的参数较验
        /// </summary>
        /// <returns>false:中断后面的方式执行并返回Error</returns>
        public override bool GetUrlElement()
        {
            //这里可以处理客户端上传的参数,通知actionGetter类获取
            return true;
        }

        /// <summary>
        /// 业务逻辑处理
        /// </summary>
        /// <returns>false:中断后面的方式执行并返回Error</returns>
        public override bool TakeAction()
        {
            //这里增加影响一段字符串
            content = "Hello World for C#!";

            return true;
        }

        /// <summary>
        /// 下发给客户的包结构数据
        /// </summary>
        public override void BuildPacket()
        {
            //这里对数据进行封包操作,使用Scut的二进制流格式,也可以自定义,高级篇会有介绍
            this.PushIntoStack(_content);

        }

    }
}

配置置Action的请求分发路由规则,如:Action100类中的命名空间是“GameServer.CsScript.Action”,则配置如下:

#!GameServer.exe.config

<add key="Game.Action.Script.TypeName" value="GameServer.CsScript.Action.Action{0}"/>
<add key="Script_IsDebug" value="True"/>

注:配置说明

  1. Game.Action.Script.TypeName配置:Action{0}:表示Action100类的名称,{0}是Action的编号变量,前面的串就是类的命名空间;
  2. Script_IsDebug配置:True:表示可以调试代码,否则不能调试,发布时为了提高性能,需要将这个调试选项关闭;
  • 启动服务并调试
  1. 服务端需要依赖的服务包括:Redis服务器;在启动服务端之前需要先启动Redis服务器,Redis服务器相当于一个数据库,一个服务端对应一个 Redis实例;如果connectionStrings节点配置为空,可以不需要Sql数据库。

  2. 按F5启动服务端,如果不能启动说明调试配置项没有配对;如果控制台没有打印出“Server has started Successfully”的字串,说明启动失败,详情需要在Nlog日志文件中查看出错信息,文件位置可以查看Nlog.config文件里的配置路径。

  3. 启动客户端,打开Sample的源码仓库Sample\HelloWorld\Client目录下的MainApp.exe,点击“Send”按键,发送请求;如果连接失败,需要检查客户端LoginScene.lua脚本配置的服务器地址是否正确;成功示例:

    hello client

Clone this wiki locally