首先在Unity中创建一个空场景,在创建一个空物体,起名为NetClient,并为其挂上脚本Net Client
在自己添加一个脚本Log,挂载在灯光上,这样可以一启动便触发。
添加脚本如下:
void Start () {
//连接服务器
Network.NetClient.Instance.Init("127.0.0.1",8000);
Network.NetClient.Instance.Connect();
}
因为只用一台机器开发,所以客户端和服务器都一样,所以必须是“127.0.0.1”
下一步在协议中添加测试消息
message NetMessageRequest{
UserRegisterRequest userRegister = 1;
UserLoginRequest userLogin = 2;
UserCreateCharacterRequest createChar = 3;
UserGameEnterRequest gameEnter = 4;
UserGameLeaveRequest gameLeave = 5;
MapCharacterEnterRequest mapCharacterEnter = 6;
MapEntitySyncRequest mapEntitySync = 8;
MapTeleportRequest mapTeleport = 9;
FirstTestRequest firstRequest = 10;
}
message FirstTestRequest {
string helloworld = 1;
}
添加完协议记得去生成一下协议
一定要先去服务器在解决方案全部生成一下,有三个成功才算是成功了
接下来将刚生成的文件放到客户端目录下进行替换
替换以后就可以在Log脚本里进行消息发送
void Start () {
//连接服务器
Network.NetClient.Instance.Init("127.0.0.1",8000);
Network.NetClient.Instance.Connect();
//发送消息
SkillBridge.Message.NetMessage msg = new SkillBridge.Message.NetMessage();
msg.Request = new SkillBridge.Message.NetMessageRequest();
msg.Request.firstRequest = new SkillBridge.Message.FirstTestRequest();
msg.Request.firstRequest.Helloworld = "Hello World";
Network.NetClient.Instance.SendMessage(msg);
}
客户端现在已经发出消息,想要在服务端收到消息首先在服务端的Service文件中新建一个类Hello WorldService,为其添加代码,使其成为单例。
internal class HelloWorldServices : Singleton<HelloWorldServices>
{
public void Init()
{
}
public void Start()
{
MessageDistributer<NetConnection<NetSession>>.Instance.Subscribe<FirstTestRequest>(this.OnFirstTestRequest);
}
void OnFirstTestRequest(NetConnection<NetSession> sender, FirstTestRequest request)
{
Log.InfoFormat("FirstTestRequest: Helloworld:{0}", request.Helloworld);
}
}
在GameService中启动刚刚写的HelloWorldService
class GameServer
{
Thread thread;
bool running = false;
NetService network;
public bool Init()
{
network = new NetService();
network.Init(8000);
HelloWorldServices.Instance.Init();
DBService.Instance.Init();
thread = new Thread(new ThreadStart(this.Update));
return true;
}
public void Start()
{
running = true;
HelloWorldServices.Instance.Start();
thread.Start();
network.Start();
}
}
最后一步在MessageDispatch中进行消息分发。
if (message.firstRequest != null) { MessageDistributer<T>.Instance.RaiseEvent(sender, message.firstRequest); }
然后就成功啦