last battle
海涛高软
这个作者很懒,什么都没留下…
展开
-
客户端输入用户名和密码后提交触发
//登陆 public void Login(string account, string pass) { SelectServerData.Instance.SetServerInfo((int)SdkManager.Instance.GetPlatFrom(), account, pass); NetworkM...原创 2018-03-06 17:58:57 · 913 阅读 · 0 评论 -
c++指针池
class NetPointerPool{public: typedef typename std::vector<T*> PointerList; typedef typename std::vector<T*>::iterator PointerListIt; NetPointerPool() { memset(mPointers,0,size原创 2018-02-24 11:48:24 · 259 阅读 · 0 评论 -
最后一站 session相关
ucnet.h#ifndef UCODE_UCNET_H_#define UCODE_UCNET_H_#include "ucbase.h"#include "ucconfig.h"#include "uclogger.h"namespace UCODE{/** * @brief UCNet组件模块版本 */static const SUCODEVersio...原创 2017-12-11 21:18:42 · 441 阅读 · 0 评论 -
c++ virtual =0 纯虚方法
备注: 纯虚函数必须被子类实现,否则会编译报错FR:海涛高软(hunk Xu)原创 2018-02-24 10:21:55 · 9844 阅读 · 0 评论 -
登陆服收到一条登录消息后做了什么
从上面的Log可以看出 ,最明显的就是:服务器收到一条消息就创建一个session对象,结束时释放这个session对象FR:海涛高软(hunk Xu)原创 2018-03-02 14:26:34 · 186 阅读 · 0 评论 -
session
FR:徐海涛(hunk Xu) QQ技术交流群:386476712原创 2018-02-22 21:55:29 · 447 阅读 · 0 评论 -
服务器端 INetSession::OnRecv
下面是服务器端收到消息后处理方式下面是客户端发送消息的格式c长度=a值-8 a和b都是int型 ,各占4个字节 依据消息类型进行反序列化依据session找静态单例handle,在handle中根据消息号,找到对应的处理该消息的方法同时要注意在消息传递的时候,要将session的id带过去,这样才能保证将处理后的结果正确返回给客户端FR:海涛高软(hunk Xu)原创 2018-03-01 10:56:29 · 410 阅读 · 0 评论 -
c++ map具体使用
FR:海涛高软(QQ技术交流群:386476712)原创 2018-02-21 17:57:02 · 142 阅读 · 0 评论 -
std::function和std::bind
std::function<int(int)> fr2 = std::bind(&MyClass::getChengFa,mm,_1,6);cout << fr2(4) << endl; //打印结果:360上面代码意思是: 调用mm对象的getChengFa方法,传入两个实参4和6FR:海涛高软(QQ技术交流群:...原创 2018-02-20 18:06:15 · 148 阅读 · 0 评论 -
std::bind用法
auto hh2 = std::bind(&MyClass::aa, mm2); hh2(); 其实就是调用mm2对象的aa属性auto hh22 = std::bind(&MyClass::getChengFa, mm2); hh22(); 其实就是调用mm2对象的getChengFa方法FR:海涛高软(hunk Xu)...原创 2018-02-20 11:32:58 · 841 阅读 · 0 评论 -
c++ 静态属性使用
最后编译后打印结果为:15FR:海涛高软(hunk Xu) QQ技术交流群:386476712原创 2018-02-24 15:57:58 · 902 阅读 · 0 评论 -
std::string使用
FR:海涛高软(hunk Xu) QQ技术交流群:386476712原创 2018-02-24 17:52:46 · 249 阅读 · 0 评论 -
int *和*(int*) 区别
FR:海涛高软(hunk Xu) QQ技术交流群:386476712原创 2018-02-25 22:25:45 · 27942 阅读 · 1 评论 -
c++ async_wait和.expires_from_now
boost::asio::io_service io_service; boost::asio::deadline_timer timer(io_service, boost::posix_time::seconds(5)); //定义一个5秒的计时器 ,这里指定的是绝对时间 timer.async_wait(handler); //计时时间一到,开始执行handler函数 ...原创 2018-02-25 21:26:16 · 9508 阅读 · 0 评论 -
boost::asio::io_service::work
由于io_service并不会主动常见调度线程,需要我们手动分配,常见的方式是给其分配一个线程,然后执行run函数。但run函数在io事件完成后会退出,线程会终止,后续基于该对象的异步io任务无法得到调度。解决这个问题的方法是通过一个asio::io_service::work对象来守护io_service。这样,即使所有io任务都执行完成,也不会退出,继续等待新的io任务。 boo...原创 2018-02-25 21:18:37 · 3966 阅读 · 1 评论 -
客户端输入用户名密码登陆后服务器的连续两次响应
返回服务器列表信息:CBalanceSession 返回登陆成功:bool CBalanceSession::Msg_Handle_OneClientLoginCheck( const char* pMsg, int n32MsgLength, INetSession* vthis, int n32MsgID ){ ELOG(LOG_DBBUG, " CBalanceSession::Ms原创 2018-03-04 21:08:51 · 859 阅读 · 0 评论 -
c++ memcpy内存拷贝
void *memcpy(void *dest, const void *src, size_t n);解释: memcpy指的是c和c++使用的内存拷贝函数,memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中下面是游戏开发中的一个具体的应用: FR:徐海涛(hunk Xu) QQ技术交流群:386...原创 2018-02-25 15:17:06 · 8042 阅读 · 0 评论 -
c++ realloc
realloc原型是extern void *realloc(void *mem_address, unsigned int newsize);指针名=(数据类型*)realloc(要改变内存大小的指针名,新的大小)。功能:先判断当前的指针是否有足够的连续空间,如果有,扩大mem_address指向的地址,并且将mem_address返回,如果空间不够,先按照newsize指定的大小分配空间,将原原创 2018-02-25 15:01:35 · 4215 阅读 · 0 评论 -
C++ GetPrivateProfileInt方法
下面是具体使用代码gLsConfig.client_listen_port = GetPrivateProfileInt(_T("MainGC"),_T("ListernPortForClient"),0,_T("LSConfig\\Setup.ini"));下面是GetPrivateProfileInt方法的定义:下面是(.ini格式的)配置文件...原创 2018-02-25 11:15:42 · 5632 阅读 · 0 评论 -
c++ _getche()用法
上面代码编译后运行结果: FR:海涛高软(hunk Xu) QQ技术交流群:386476712原创 2018-02-25 10:59:13 · 3914 阅读 · 0 评论 -
c++ _kbhit() 具体使用
FR:海涛高软(hunk Xu) QQ技术交流群:386476712原创 2018-02-24 18:17:51 · 7928 阅读 · 1 评论 -
memset 使用
FR:海涛高软(hunk Xu) www.xuhaitao123.com原创 2018-02-19 17:08:10 · 140 阅读 · 0 评论 -
strcpy_s使用
strcpy_s(b, a)意思是将a拷贝给b,但是一定要保证b装的下a,否则会报错FR:海涛高软(hunk Xu) QQ技术交流群:386476712原创 2018-02-19 16:26:51 · 9752 阅读 · 0 评论 -
boost::algorithm::split
typedef vector< string > split_vector_type;split_vector_type ssIndexVec;boost::algorithm::split( ssIndexVec, ssIndexStr, boost::algorithm::is_any_of(";") );FR:海涛高软(hun原创 2018-02-18 21:35:00 · 1915 阅读 · 0 评论 -
最后一站 登录点击
输入用户名和密码,点击选择服务器后: LoginWindow.csvoid OnLoginSubmit(GameObject go){#if UNITY_STANDALONE_WINif(string.IsNullOrEmpty(mLoginAccountInput.value))return;mLoginPassInput.value = "123";#elseif(string.原创 2017-12-17 22:02:21 · 316 阅读 · 0 评论 -
GC(游戏客户端)如何处理服务器的响应
NetworkManager.cs中Update函数 调用DealWithMsg进行消息的不断处理 public void Update(float fDeltaTime) //逐帧调用 { if (m_Client != null) { DealWithMsg(); //关注这一行 p原创 2017-12-18 05:01:18 · 610 阅读 · 0 评论 -
用户信息注册页面 提交按钮
服务器向客户端连续推送3条信息: Int32 OnNetMsg_NotifyUserBaseInfo(System.IO.Stream stream) { print ("OnNetMsg_NotifyUserBaseInfo"); GSToGC.UserBaseInfo pMsg; if (!ProtoDes(out pMsg, stream原创 2017-12-24 17:40:24 · 2134 阅读 · 0 评论 -
开始游戏按钮点击后干了什么
LoginWindow.csUIEventListener.Get(mPlaySubmitBtn.gameObject).onClick += OnPlaySubmit;void OnPlaySubmit(GameObject go){ mWaitingParent.gameObject.SetActive(true); UIEventListener.Get(mPlaySubmitBtn原创 2017-12-20 00:58:20 · 676 阅读 · 0 评论 -
GameObject.find和obj.transform.find的区别
using System.Collections;using System.Collections.Generic;using UnityEngine;public class uu : MonoBehaviour { public GameObject gg; private Transform mm; void Start () { mm = gg.原创 2017-12-24 13:23:31 · 1051 阅读 · 0 评论 -
消息的接收和处理
上面代码,session接到数据后,找handle,下面就看看session中的handle是怎么赋值的其它的session中,handle的赋值也是按照这个套路来的#include "stdafx.h"#include "GSKernel.h"#include <iostream>#include <fstream>#include "GSSSInfo.h"using namespace原创 2017-12-13 18:18:46 · 1226 阅读 · 0 评论 -
最后一站 消息注册及发送
FR:海涛高软(hunk Xu)原创 2017-12-11 12:51:33 · 191 阅读 · 0 评论 -
最后一站网络模块图解
FR:海涛高软(hunk Xu)原创 2017-12-09 21:51:08 · 280 阅读 · 0 评论 -
点击登录服务器按钮后干了什么
在这个Update函数中会一直检测是否连接上,如果没连接,会一直触发调用 Connect这个方法Probuf序列化发送的消息:控制台打印结果:备注:OnConnected :一旦与服务器连接上后紧接着就执行一次这个方法FR:海涛高软(Hunk Xu) QQ技术交流群:386476712原创 2017-11-29 20:18:21 · 419 阅读 · 0 评论 -
新手指引中的 MVC思想
LobbyWindow.cs //窗口控件初始化 protected override void InitWidget() { mHomepage = mRoot.FindChild("StartMenuManager/StartMenuBtn/Homepage").GetComponent<UIToggle>();原创 2018-01-01 21:40:39 · 193 阅读 · 0 评论 -
unity 新手引导
case (int)GSToGC.MsgID.eMsgToGCFromGS_GuideResp: print ("eMsgToGCFromGS_GuideResp"); OnNetMsg_NotifyGuideResp(stream); break; Int32 OnNetMsg_NotifyGuideRe原创 2017-12-27 11:02:30 · 2477 阅读 · 0 评论 -
c++利用指针实现C#字典的功能
上面代码编译后运行结果: FR:徐海涛(hunk Xu) QQ技术交流群:386476712原创 2018-02-27 18:35:37 · 412 阅读 · 0 评论 -
c++使用指针做出类似C#委托的功能
可以将typedef int(*haitao) (int age1, int age2);这行代码放入stdafx.h文件中,效果是一样的typedef int(*haitao) (int age1, int age2); 这行代码相当于C#中声明一个委托FR:海涛高软(hunk Xu)...原创 2018-02-27 16:24:18 · 337 阅读 · 0 评论 -
c++ 命名习惯
FR:海涛高软(hunk Xu) QQ技术交流群:386476712原创 2018-02-27 15:29:13 · 367 阅读 · 0 评论 -
c++ EnterCriticalSection和LeaveCriticalSection
多线程中用来确保同一时刻只有一个线程操作被保护的数据的操作函数为了让CRITICAL_SECTION发挥作用,我们必须在访问dwTime的任何一个地方都加上 EnterCriticalSection(&cs)和LeaveCriticalSection(&cs)语句。再次强调一次,没有任何资源被“锁定”,CRITICAL_SECTION这个东东不是针对于资源的,而是针对于不同线程间的代码段的!我们能够原创 2018-02-27 14:09:06 · 1792 阅读 · 0 评论 -
C++ Assert函数的使用
游戏开发中用到Assert函数地方如下: void assert( int expression );assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。使用assert的缺点是,频繁的调用会极大的影响程序的性能,增加额外的开销。 程序一般分为Debug 版本和Release 版本,De原创 2018-02-27 13:55:02 · 841 阅读 · 0 评论