在使用Supersocket Server的过程中,发现Server是不支持.net 3.5的.


1.Server端中的几个Command:

 namespace SuperSocketProtoServer.Protocol.Command
{
public class CallMessage : CommandBase<ProtobufAppSession, ProtobufRequestInfo>
{
public override void ExecuteCommand(ProtobufAppSession session, ProtobufRequestInfo requestInfo)
{
Console.WriteLine("CallMessage:{0}", requestInfo.Body.CallMessage.Content);
var backMessage = global::SuperSocketProtoServer.Pack.BackMessage.CreateBuilder().SetContent("Hello I am from C# server by SuperSocket")
.Build(); var message = DefeatMessage.CreateBuilder().SetType(DefeatMessage.Types.Type.BackMessage)
.SetBackMessage(backMessage).Build();
using (var stream = new MemoryStream())
{
CodedOutputStream cos = CodedOutputStream.CreateInstance(stream);
cos.WriteMessageNoTag(message);
cos.Flush();
byte[] data = stream.ToArray();
session.Send(new ArraySegment<byte>(data));
}
}
}
} namespace SuperSocketProtoServer.Protocol.Command
{
public class BackMessage : CommandBase<ProtobufAppSession, ProtobufRequestInfo>
{
public override void ExecuteCommand(ProtobufAppSession session, ProtobufRequestInfo requestInfo)
{
Console.WriteLine("BackMessage:{0}", requestInfo.Body.BackMessage.Content);
}
}
} namespace SuperSocketProtoServer.Protocol.Command
{
public class PersonMessage:CommandBase<ProtobufAppSession, ProtobufRequestInfo>
{
public override void ExecuteCommand(ProtobufAppSession session, ProtobufRequestInfo requestInfo)
{
Console.WriteLine("Recv Person Message From Client.");
Console.WriteLine("person's id = {0}, person's name = {1}, person's sex = {2}, person's phone = {3}",
requestInfo.Body.PersonMessage.Id,
requestInfo.Body.PersonMessage.Name,
requestInfo.Body.PersonMessage.Sex,
requestInfo.Body.PersonMessage.Phone); var person = Pack.PersonMessage.CreateBuilder().SetAge().SetId()
.SetName("native .net to unity3d message").SetSex(Pack.PersonMessage.Types.Sex.Male).SetPhone("+86 110")
.Build();
var message = DefeatMessage.CreateBuilder().SetType(DefeatMessage.Types.Type.PersonMessage)
.SetPersonMessage(person).Build();
using (var stream = new MemoryStream())
{
CodedOutputStream cos = CodedOutputStream.CreateInstance(stream);
cos.WriteMessageNoTag(message);
cos.Flush();
byte[] data = stream.ToArray();
session.Send(new ArraySegment<byte>(data));
}
}
}
}

2.Client(unity3d)端中的代码:

 using System;
using System.IO;
using System.Net;
using Google.ProtocolBuffers;
using Pack;
using SuperSocket.ClientEngine;
using SuperSocketProtoClient.Protocol;
using UnityEngine; public class SupersocketClientHelper : SingletonGeneric<SupersocketClientHelper>
{
private EasyClient client;
private static SupersocketClientHelperStub stub = new GameObject("SupersocketClientHelperStub").AddComponent<SupersocketClientHelperStub>(); private SupersocketClientHelper()
{ } public void Initialize()
{
client = new EasyClient();
client.Initialize(new ProtobufReceiveFilter(), packageInfo =>
{
switch (packageInfo.Type)
{
case DefeatMessage.Types.Type.BackMessage:
Debug.LogFormat("BackMessage:{0}", packageInfo.Body.BackMessage.Content);
break;
case DefeatMessage.Types.Type.CallMessage:
Debug.LogFormat("CallMessage:{0}", packageInfo.Body.CallMessage.Content);
break;
case DefeatMessage.Types.Type.PersonMessage:
Debug.Log("Recv Person Message From SuperSocket Server.");
Debug.LogFormat("person's id = {0}, person's name = {1}, person's sex = {2}, person's phone = {3}",
packageInfo.Body.PersonMessage.Id,
packageInfo.Body.PersonMessage.Name,
packageInfo.Body.PersonMessage.Sex,
packageInfo.Body.PersonMessage.Phone);
break;
}
}); // .net35的SuperSocket.ClientEngine没有实现或者说不支持该函数
//var flag = client.ConnectAsync(new DnsEndPoint("127.0.0.1", 2017));
client.BeginConnect(new DnsEndPoint("127.0.0.1", ));
client.Connected += (sender, args) =>
{
var callMessage = CallMessage.CreateBuilder()
.SetContent("Hello I am form C# client by SuperSocket ClientEngine").Build();
var message = DefeatMessage.CreateBuilder()
.SetType(DefeatMessage.Types.Type.CallMessage)
.SetCallMessage(callMessage).Build(); using (var stream = new MemoryStream())
{
CodedOutputStream os = CodedOutputStream.CreateInstance(stream);
os.WriteMessageNoTag(message);
os.Flush();
byte[] data = stream.ToArray();
client.Send(new ArraySegment<byte>(data));
} // 发送PersonMessage
var personMessage = PersonMessage.CreateBuilder()
.SetId().SetAge().SetSex(PersonMessage.Types.Sex.Male).SetName("zstudio").SetPhone("").Build();
message = DefeatMessage.CreateBuilder().SetType(DefeatMessage.Types.Type.PersonMessage)
.SetPersonMessage(personMessage).Build();
using (var stream = new MemoryStream())
{
CodedOutputStream cos = CodedOutputStream.CreateInstance(stream);
cos.WriteMessageNoTag(message);
cos.Flush();
byte[] data = stream.ToArray();
client.Send(new ArraySegment<byte>(data));
}
};
} public void Destory()
{
client.Close();
}
} internal sealed class SupersocketClientHelperStub : MonoBehaviour
{
private void Awake()
{
DontDestroyOnLoad(this);
} private void OnDestroy()
{
SupersocketClientHelper.Instance.Destory();
}
}

3.消息使用Google.ProtocolBuffers:

message CallMessage
{
optional string content = 1;
} message BackMessage
{
optional string content = 1;
} message PersonMessage
{
required int32 id = 1;
required string name = 2;
enum Sex
{
Male = 1;
Female = 2;
}
required Sex sex = 3 [default = Male];
required uint32 age = 4;
required string phone = 5;
} import "BackMessage.proto";
import "CallMessage.proto";
import "PersonMessage.proto"; message DefeatMessage
{
enum Type
{
CallMessage = 1;
BackMessage = 2;
PersonMessage = 3;
}
required Type type = 1;
optional CallMessage callMessage = 2;
optional BackMessage backMessage = 3;
optional PersonMessage personMessage = 4;
}

Unity中引入Supersocket.ClientEngine并测试的更多相关文章

  1. 【Unity3D技巧】在Unity中使用事件/委托机制(event/delegate)进行GameObject之间的通信 (二) : 引入中间层NotificationCenter

    作者:王选易,出处:http://www.cnblogs.com/neverdie/ 欢迎转载,也请保留这段声明.如果你喜欢这篇文章,请点[推荐].谢谢! 一对多的观察者模式机制有什么缺点? 想要查看 ...

  2. Unity中使用WebView

    Unity中使用WebView @(设计) 需求,最近游戏中需要引入H5直播页面和更新比较频繁的赛事页面,需求包括:加密传参数.和Unity交互,在Unity框架下其实有几种方案: 内置函数Appli ...

  3. SuperSocket.ClientEngine介绍

    项目地址:https://github.com/kerryjiang/SuperSocket.ClientEngine 其中需要引入的SuperSocket.ProtoBase项目:SuperSock ...

  4. 在Unity中使用LitJson解析json文件

    LitJson 这个库需要找资源,找到LitJson.dll后将它放在Assets文件夹下,在脚本中使用using引入即可 测试代码 json文件: {"Archice":[{&q ...

  5. 关于Unity中的UGUI优化,你可能遇到这些问题

    https://blog.uwa4d.com/archives/QA_UGUI-1.html 关于Unity中的UGUI优化,你可能遇到这些问题 作者:admin / 时间:2016年11月08日 / ...

  6. 动画重定向技术分析和Unity中的应用

    http://www.jianshu.com/p/6e9ba1b9c99e 因为一些手游项目需要使用Unity引擎,但在动画部分需要使用重定向技术来实现动画复用,考虑到有些项目开发人员没有过这方面的经 ...

  7. 动画重定向技术分析及其在Unity中的应用

    前言 笔者新的手游项目使用Unity引擎,动画部分要使用重定向技术来实现动画复用.笔者之前在大公司工作的时候对这块了解比较深入,读过Havok引擎在这部分的实现源码,并基于自己的理解,在公司自研的手游 ...

  8. SUPERSOCKET.CLIENTENGINE 简单使用

    首先 引用 SuperSocket.ClientEngine.Core.dll和 SuperSocket.ClientEngine.Common.dll 然后 就可以使用ClientEngine了. ...

  9. Unity中使用Attribute

    Attribute是c#的语言特性 msdn说明如下: The Attribute class associates predefined system information or user-def ...

随机推荐

  1. 容错保护机制:Spring Cloud Hystrix

    最近在学习Spring Cloud的知识,现将容错保护机制Spring Cloud Hystrix 的相关知识笔记整理如下.[采用 oneNote格式排版]

  2. PHP0002:PHP基础1

    PHP基础 一个表单同时提交get 和 post php保存数据到文件

  3. PTA L2-029 | 特立独行的幸福 (打表+递归)

    题目描述 对一个十进制数的各位数字做一次平方和,称作一次迭代.如果一个十进制数能通过若干次迭代得到 \(1\),就称该数为幸福数.\(1\) 是一个幸福数.此外,例如 \(19\) 经过一次迭代得到 ...

  4. JavaDay10(上)

    Java learning_Day10(上) 本人学习视频用的是马士兵的,也在这里献上 <链接:https://pan.baidu.com/s/1qKNGJNh0GgvlJnitTJGqgA&g ...

  5. Secondary NameNode:它究竟有什么作用?

    前言 最近刚接触Hadoop, 一直没有弄明白NameNode和Secondary NameNode的区别和关系.很多人都认为,Secondary NameNode是NameNode的备份,是为了防止 ...

  6. python的优先级

    在编写程序时,我遇到麻烦!怎么找都找不到bug 最终我发现了是我搞错了运算符优先级 位运算要在加减后面(这可真奇怪) eg 10-10^11=11!!! 还是多加括号的好

  7. Codeforces Round #620 (Div. 2) A-F代码 (暂无记录题解)

    A. Two Rabbits (手速题) #include<bits/stdc++.h> using namespace std; typedef long long ll; int ma ...

  8. Python该怎么入门?Python入门教程(非常详细)

    Python要学多久可以学会,达到精通呢? 任何知识都是基础入门比较快,达到通晓的程序是需求时日的,这是一个逐渐激烈的进程. 通晓任何一门编程语言,都需求通过大量的实践来积累经验,解决遇到的各种疑难问 ...

  9. SpringBoot之Configuration

      在SpringBoot中可以通过@Configuration对某个类注解将该类申明为配置类,以此在代替先前spring版本中配置xml中的功能,并且增加了可读性与维护性.并且在注解类中的类方法中可 ...

  10. CPPU OJ | 开发日志

    2019.12.18 ~ 2019.12.22 用腾讯云的学生服务器测试搭建OJ(踩了无数的坑) 2019.12.25 ~ 2019.12.28 在模管中心办理申请虚拟服务器的手续 2019.12.3 ...