/// <summary> /// 序列化数据. /// </summary> /// <param name="mod">数据对象.</param> private byte[] Serialize(NetModel mod) { try { //内存流实例 using (MemoryStream ms = new MemoryStream()) { //ProtoBuf协议序列化数据对象 ProtoBuf.Serializer.Serialize <NetModel>(ms, mod); //创建临时结果数组 byte[] result = new byte[ms.Length]; //调整游标位置为0 ms.Position = 0; //开始读取,从0到尾 ms.Read(result, 0, result.Length); //返回结果 return(result); } } catch (Exception ex) { MyGameServer.LogInfo("Error: " + ex.ToString()); return(null); } }
private void UpdatePosition() { Thread.Sleep(5000); while (true) { Thread.Sleep(100); if (stopState) { try { t.Abort(); MyGameServer.LogInfo("SyncPositionThread Abort"); } catch (Exception e) { MyGameServer.LogInfo(e.Message); throw; } } else { SendPosition(); } } }
public void Run() { MyGameServer.LogInfo("SyncPositionThread Run"); t = new Thread(UpdatePosition); t.IsBackground = true; t.Priority = ThreadPriority.Normal; stopState = false; t.Start(); }
/// <summary> /// 反序列化数据. /// </summary> /// <returns>数据对象.</returns> /// <param name="data">源数据.</param> private NetModel DeSerialize(byte[] data) { try { //内存流实例 using (MemoryStream ms = new MemoryStream(data)) { //调整游标位置 ms.Position = 0; //ProtoBuf协议反序列化数据 NetModel mod = ProtoBuf.Serializer.Deserialize <NetModel> (ms); //返回数据对象 return(mod); } } catch (Exception ex) { MyGameServer.LogInfo("Error: " + ex.ToString()); return(null); } }
public override void OnOperationRequest(OperationRequest operationRequest, SendParameters sendParameters, MyPeer peer) { switch (operationRequest.OperationCode)//通过OpCode区分请求 { case 1: Dictionary <byte, object> data = operationRequest.Parameters; object intValue; object stringValue; data.TryGetValue(1, out intValue); data.TryGetValue(2, out stringValue); MyGameServer.LogInfo("服务器:得到客户端传来的参数数据是:" + intValue.ToString() + " " + stringValue.ToString()); //向客户端作出响应 OperationResponse opResponse = new OperationResponse(1); //向客户端发送参数 Dictionary <byte, object> data2 = new Dictionary <byte, object>(); data2.Add(1, 300); data2.Add(2, "服务器:给客户端发送参数数据"); opResponse.SetParameters(data2); peer.SendOperationResponse(opResponse, sendParameters); //给客户端一个响应,只能在这里调用,在其它地方无效 ///客户端在没有向服务器端发送请求,但服务器端想通知或发送数据给客户端时,就可以使用SendEvent方法, ///SendEvent方法可以在服务器任何地方调用。 //EventData ed = new EventData(1); //ed.Parameters = data2; //SendEvent(ed, new SendParameters()); break; case 2: break; default: break; } }
public void Stop() { MyGameServer.LogInfo("SyncPositionThread Stop"); stopState = true; }
public override void OnOperationRequest(OperationRequest operationRequest, SendParameters sendParameters, ClientPeer peer) { MyGameServer.LogInfo("Execute DefaultHandler OperationCode = " + operationRequest.OperationCode); }