123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- using SuperSocket.ClientEngine;
- using System;
- using System.Net;
- namespace ET.Server
- {
- [FriendOf(typeof(FastStreamComponent))]
- public static class FastStreamComponentSystem
- {
- public class FastStreamComponentAwakeSystem: AwakeSystem<FastStreamComponent>
- {
- protected override void Awake(FastStreamComponent self)
- {
- FastStreamComponent.Instance = self;
- self.FastStreamClient = new EasyClient();
- self.FastStreamClient.Initialize<FastStreamBuffer>(new FastStreamMessageDecoder(FastStreamMessageDecoder.LEN_HEAD), OnSessionDataReceived);
- self.FastStreamClient.NoDelay = true;
- self.FastStreamClient.ReceiveBufferSize = 10 * 1024 * 1024;
- self.FastStreamClient.Connected += new EventHandler(OnSessionConnected);
- self.FastStreamClient.Error += new EventHandler<ErrorEventArgs>(OnSessionError);
- self.FastStreamClient.Closed += new EventHandler(OnSessionClosed);
- //IPAddress ipAddress = Dns.GetHostAddresses("localhost")[0];
- IPEndPoint endpoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 3370);
- // IPEndPoint endpoint = new IPEndPoint(IPAddress.Parse("47.98.144.16"), 3370);
- self.FastStreamClient.ConnectAsync(endpoint);
- }
- }
- public class FastStreamComponentDestroySystem: DestroySystem<FastStreamComponent>
- {
- protected override void Destroy(FastStreamComponent self)
- {
- Log.Info($"Ice component destroyed");
- self.FastStreamClient?.Close();
- self.FastStreamClient = null;
- }
- }
- //===component扩展=============
- public static void SendData(this FastStreamComponent self, string key, byte[] value)
- {
- ByteBuffer buff = ByteBuffer.Allocate(2048, true);
- buff.WriteShort((short)key.Length);
- buff.WriteInt(value.Length);
- buff.WriteBytes(key.ToUtf8());
- buff.WriteBytes(value);
- self.FastStreamClient.Send(new ArraySegment<byte>(buff.GetBuffer(), 0, buff.ReadableBytes));
- }
- //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- private static void OnSessionConnected(object sender, EventArgs e)
- {
- Log.Debug("fast stream session connected");
- FastStreamComponent.Instance.SendData("connetorId", ("bs-" + ConstGame.GameServerId.ToString()).ToUtf8());
- }
- private static void OnSessionDataReceived(FastStreamBuffer pack)
- {
- long usrid = (long)pack.Key;
- byte[] data = pack.Data;
- //Log.Debug($"receive fast stream data, uid({usrid}), msglen:{data.Length}");
- //找到此unit对应的Player(id相同)
- WNPlayer player = FastStreamComponent.Instance.DomainScene().GetComponent<GamePlayerComponent>().Get(usrid);
- if (player != null)
- {
- MessageHelper.SendToClient(player, new BattleEventPush() { key = (ushort)BattlePushCnst.FastStreamPush, data = data});
- }
- // else
- // {
- // Log.Error($"Not found player({usrid}) @faststream data");
- // }
- }
- private static void OnSessionError(object sender, ErrorEventArgs e)
- {
- Log.Error("fast stream session error");
- }
- private static void OnSessionClosed(object sender, EventArgs e)
- {
- Log.Warning("fast stream session closed");
- }
- }
- }
|