|
@@ -1,8 +1,9 @@
|
|
|
using SuperSocket.ClientEngine;
|
|
|
+using SuperSocket.ProtoBase;
|
|
|
using System;
|
|
|
+using System.Linq;
|
|
|
using System.Net;
|
|
|
-using System.Reflection;
|
|
|
-using System.Threading;
|
|
|
+using ET;
|
|
|
|
|
|
namespace ET.Server
|
|
|
{
|
|
@@ -15,20 +16,20 @@ namespace ET.Server
|
|
|
{
|
|
|
FastStreamComponent.Instance = self;
|
|
|
|
|
|
- var session = new AsyncTcpSession();
|
|
|
- self.Session = session;
|
|
|
- session.NoDelay = true;
|
|
|
- session.ReceiveBufferSize = 10* 1024;
|
|
|
+ var client = new EasyClient();
|
|
|
+ self.FastStreamClient = client;
|
|
|
+ client.Initialize<FastStreamBuffer>(new FastStreamMessageDecoder(FastStreamMessageDecoder.LEN_HEAD), (package) => { OnSessionDataReceived(package); });
|
|
|
+ client.NoDelay = true;
|
|
|
+ client.ReceiveBufferSize = 10* 1024 * 1024;
|
|
|
|
|
|
- session.Connected += new EventHandler(OnSessionConnected);
|
|
|
- session.Error += new EventHandler<ErrorEventArgs>(OnSessionError);
|
|
|
- session.Closed += new EventHandler(OnSessionClosed);
|
|
|
- session.DataReceived += new EventHandler<DataEventArgs>(OnSessionDataReceived);
|
|
|
+ client.Connected += new EventHandler(OnSessionConnected);
|
|
|
+ client.Error += new EventHandler<ErrorEventArgs>(OnSessionError);
|
|
|
+ client.Closed += new EventHandler(OnSessionClosed);
|
|
|
|
|
|
//IPAddress ipAddress = Dns.GetHostAddresses("localhost")[0];
|
|
|
IPAddress ip = IPAddress.Parse("127.0.0.1");
|
|
|
IPEndPoint endpoint = new IPEndPoint(ip, 3370);
|
|
|
- session.Connect(endpoint);
|
|
|
+ client.ConnectAsync(endpoint);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -37,12 +38,12 @@ namespace ET.Server
|
|
|
protected override void Destroy(FastStreamComponent self)
|
|
|
{
|
|
|
Log.Info($"Ice component destroyed");
|
|
|
- self.Session?.Close();
|
|
|
- self.Session = null;
|
|
|
+ self.FastStreamClient?.Close();
|
|
|
+ self.FastStreamClient = null;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- public static void SendData(TcpClientSession session, string key, string value)
|
|
|
+ public static void SendData(EasyClient session, string key, string value)
|
|
|
{
|
|
|
ByteBuffer buff = ByteBuffer.Allocate(64, true);
|
|
|
buff.WriteShort((short)key.Length);
|
|
@@ -55,38 +56,57 @@ namespace ET.Server
|
|
|
private static void OnSessionConnected(object sender, EventArgs e)
|
|
|
{
|
|
|
Log.Debug("fast stream session connected");
|
|
|
- SendData(sender as AsyncTcpSession, "connetorId", "bs-" + Global.GameServerId.ToString());
|
|
|
+ SendData(sender as EasyClient, "connetorId", "bs-" + Global.GameServerId.ToString());
|
|
|
}
|
|
|
|
|
|
- private static void OnSessionDataReceived(object sender, DataEventArgs e)
|
|
|
+ private static void OnSessionDataReceived(FastStreamBuffer pack)
|
|
|
{
|
|
|
- var len = e.Length;
|
|
|
- Log.Debug($"receive fast stream data: len({len})");
|
|
|
- Log.Debug("======================================");
|
|
|
- var buff = ByteBuffer.Allocate(len, true);
|
|
|
- var keylen = buff.ReadShort();
|
|
|
- var vallen = buff.ReadInt();
|
|
|
- if(keylen + vallen > len)
|
|
|
+ var usrid = (long)pack.Key;
|
|
|
+ var data = pack.Data;
|
|
|
+ Log.Debug($"receive fast stream data, uid({usrid}), msglen:{data.Length}");
|
|
|
+
|
|
|
+ //找到此unit对应的Player(instance id相同)
|
|
|
+ //TODO: 有点绕,可以直接在所有scene的UnitComponent里找
|
|
|
+ var player = PlayerComponentSystem.SearchAll(usrid);
|
|
|
+ if(player != null )
|
|
|
{
|
|
|
- Log.Debug("unknow content");
|
|
|
+ var gatemap = player.GetComponent<GateMapComponent>();
|
|
|
+ if(gatemap == null)
|
|
|
+ {
|
|
|
+ Log.Error($"player({usrid}) not entermap");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ var unitcomponet = gatemap.Scene.GetComponent<UnitComponent>();
|
|
|
+ var unit = unitcomponet.GetChild<Unit>(usrid);
|
|
|
+ if(unit != null)
|
|
|
+ {
|
|
|
+ MessageHelper.SendToClient(unit, new BattleEventPush() { key = (ushort)BattlePushCnst.FastStreamPush, data = data});
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ Log.Error($"unit({usrid}) not exist @scene");
|
|
|
+ }
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- var key = buff.ReadString(keylen);
|
|
|
- var val = buff.ReadString(vallen);
|
|
|
- Log.Debug($"{key} = {val}");
|
|
|
+ Log.Error($"Not found player({usrid}) @faststream data");
|
|
|
+ return;
|
|
|
}
|
|
|
- Log.Debug("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^");
|
|
|
}
|
|
|
|
|
|
private static void OnSessionError(object sender, ErrorEventArgs e)
|
|
|
{
|
|
|
Log.Warning("fast stream session error");
|
|
|
+
|
|
|
+ var self = FastStreamComponent.Instance;
|
|
|
+ //TODO: ReConnect战斗服
|
|
|
}
|
|
|
|
|
|
private static void OnSessionClosed(object sender, EventArgs e)
|
|
|
{
|
|
|
Log.Warning("fast stream session closed");
|
|
|
+ //TODO: ReConnect战斗服
|
|
|
}
|
|
|
}
|
|
|
|