public void SendPacket(IBuilderLite retpb) { if (udpClient == null) { return; } if (IsClose) { return; } //LogHelper.Log("UDP", "SendPacket: "+retpb.ToString()); ServerBundle bundle; var bytes = ServerBundle.sendImmediateError(retpb, 0, 0, out bundle); ServerBundle.ReturnBundle(bundle); var mb = new MsgBuffer() { position = 0, buffer = bytes, bundle = bundle, remoteEnd = remoteEnd }; socketServer.SendUDPPacket(mb); }
public void SendPacket(IBuilderLite retpb, uint flowId, int errorCode) { if (currentCon == null || currentCon.isClose) { return; } var bytes = ServerBundle.sendImmediateError(retpb, flowId, errorCode); Debug.Log("DemoServer: Send Packet " + flowId); lock (currentCon.msgBuffer) { currentCon.msgBuffer.Add(bytes); } }
private void InitPlayerId() //初始化客户端Player的ID,为每个Actor的专属ID,由ActorManager统一管理 { var cmd = GCPlayerCmd.CreateBuilder(); cmd.Result = string.Format("Init {0}", Id); ServerBundle bundle; var bytes = ServerBundle.sendImmediateError(cmd, 0, 0, out bundle); ServerBundle.ReturnBundle(bundle); agent.SendBytes(bytes); }
private void BroadcastToAll(GCPlayerCmd.Builder cmd) //广播消息 { var parr = players; ServerBundle bundle; var bytes = ServerBundle.sendImmediateError(cmd, 0, 0, out bundle); ServerBundle.ReturnBundle(bundle); foreach (var p in parr) { p.GetAgent().SendBytes(bytes); } }
/// <summary> /// 内部Actor将Agent要发送的消息推送给客户端 /// SendPacket 应该以SendBuff行驶发送 /// 同一个Socket的Write Read只能加入一次 epoll /// Read在初始化的时候加入 /// Write在每次要写入的时候加入 /// </summary> public void SendPacket(IBuilderLite retpb, byte flowId, byte errorCode) //序列化Protobuff后发送数据 { if (isClose) { return; } var proto = retpb as GCPlayerCmd.Builder; var result = proto.Result; ServerBundle bundle; var bytes = ServerBundle.sendImmediateError(retpb, flowId, errorCode, out bundle); //Debug.Log ("SendBytes: " + bytes.Length); mSendPacketCount += 1; mSendPacketSizeCount += (ulong)bytes.Length; LogHelper.LogSendPacket(string.Format("actor={0} result={1} size={2}", id, result, bytes.Length)); var mb = new MsgBuffer() { position = 0, buffer = bytes, bundle = bundle }; var send = false; lock (msgBuffer) { msgBuffer.Add(mb); if (msgBuffer.Count == 1) //当msgBuffer为空并新加入一个消息时,我们才开始发送,不然在OnSend的回调中一直在发送buff,两边同时发送会有问题, { send = true; } } if (send) { try { mSocket.BeginSend(mb.buffer, mb.position, mb.Size, SocketFlags.None, OnSend, null); } catch (Exception exception) { Debug.LogError(exception.Message); Close(); } } }