mirror of
https://github.com/islehorse/HISP.git
synced 2025-04-23 21:25:52 +12:00
Add Multiple transports system, begin work on WebSockets
This commit is contained in:
parent
e869a23463
commit
e74f66a439
22 changed files with 3752 additions and 3301 deletions
101
HorseIsleServer/LibHISP/Server/Network/Hybrid.cs
Normal file
101
HorseIsleServer/LibHISP/Server/Network/Hybrid.cs
Normal file
|
@ -0,0 +1,101 @@
|
|||
using System;
|
||||
using System.Net.Sockets;
|
||||
|
||||
namespace HISP.Server.Network
|
||||
{
|
||||
public class Hybrid : Transport
|
||||
{
|
||||
|
||||
Transport actualTransport = null;
|
||||
|
||||
|
||||
public override string Name
|
||||
{
|
||||
get
|
||||
{
|
||||
if(actualTransport == null)
|
||||
return "TransportDeterminer";
|
||||
else
|
||||
return actualTransport.Name;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public override bool Disconnected
|
||||
{
|
||||
get
|
||||
{
|
||||
if (actualTransport == null)
|
||||
return base.Disconnected;
|
||||
else
|
||||
return actualTransport.Disconnected;
|
||||
}
|
||||
}
|
||||
|
||||
public override string Ip
|
||||
{
|
||||
get
|
||||
{
|
||||
if (actualTransport == null)
|
||||
return base.Ip;
|
||||
else
|
||||
return actualTransport.Ip;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public override void Disconnect()
|
||||
{
|
||||
if (actualTransport == null)
|
||||
{
|
||||
base.Disconnect();
|
||||
}
|
||||
else
|
||||
{
|
||||
actualTransport.Disconnect();
|
||||
}
|
||||
}
|
||||
|
||||
public override void ProcessReceivedPackets(int available, byte[] buffer)
|
||||
{
|
||||
for (int i = 0; i < available; i++)
|
||||
base.currentPacket.Add(buffer[i]);
|
||||
|
||||
if (currentPacket.Count >= 3)
|
||||
{
|
||||
if (ConfigReader.EnableWebSocket && WebSocket.IsStartOfHandshake(currentPacket.ToArray()))
|
||||
{
|
||||
Logger.InfoPrint(this.Ip + " Switching to WebSocket");
|
||||
actualTransport = new WebSocket();
|
||||
|
||||
actualTransport.passObjects(this.socket, this.onReceiveCallback, this.onDisconnectCallback);
|
||||
actualTransport.ProcessReceivedPackets(available, buffer);
|
||||
actualTransport.Accept(base.socket, base.onReceiveCallback, base.onDisconnectCallback);
|
||||
}
|
||||
else
|
||||
{
|
||||
Logger.InfoPrint(this.Ip + " Switching to XmlSocket");
|
||||
actualTransport = new XmlSocket();
|
||||
|
||||
actualTransport.passObjects(this.socket, this.onReceiveCallback, this.onDisconnectCallback);
|
||||
actualTransport.ProcessReceivedPackets(available, buffer);
|
||||
actualTransport.Accept(base.socket, base.onReceiveCallback, base.onDisconnectCallback);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal override void receivePackets(object sender, SocketAsyncEventArgs e)
|
||||
{
|
||||
if (!base.checkForError(e))
|
||||
ProcessReceivedPackets(e.BytesTransferred, e.Buffer);
|
||||
}
|
||||
|
||||
public override void Send(byte[] data)
|
||||
{
|
||||
if(actualTransport == null)
|
||||
base.Send(data);
|
||||
else
|
||||
actualTransport.Send(data);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue