mirror of
https://github.com/islehorse/HISP.git
synced 2025-04-07 21:55:42 +12:00
update
This commit is contained in:
parent
9ea1cd587b
commit
c41364ab9e
2 changed files with 35 additions and 114 deletions
|
@ -75,7 +75,6 @@ namespace HISP.Server
|
||||||
|
|
||||||
connectedClients.Add(this);
|
connectedClients.Add(this);
|
||||||
|
|
||||||
|
|
||||||
SocketAsyncEventArgs evt = new SocketAsyncEventArgs();
|
SocketAsyncEventArgs evt = new SocketAsyncEventArgs();
|
||||||
evt.Completed += receivePackets;
|
evt.Completed += receivePackets;
|
||||||
evt.SetBuffer(workBuffer, 0, workBuffer.Length);
|
evt.SetBuffer(workBuffer, 0, workBuffer.Length);
|
||||||
|
@ -87,16 +86,12 @@ namespace HISP.Server
|
||||||
|
|
||||||
public static void CreateClient(object sender, SocketAsyncEventArgs e)
|
public static void CreateClient(object sender, SocketAsyncEventArgs e)
|
||||||
{
|
{
|
||||||
restart2:;
|
do
|
||||||
Socket eSocket = e.AcceptSocket;
|
|
||||||
new GameClient(eSocket);
|
|
||||||
SocketAsyncEventArgs evt = new SocketAsyncEventArgs();
|
|
||||||
evt.Completed += GameClient.CreateClient;
|
|
||||||
if (!GameServer.ServerSocket.AcceptAsync(evt))
|
|
||||||
{
|
{
|
||||||
e = evt;
|
Socket eSocket = e.AcceptSocket;
|
||||||
goto restart2;
|
new GameClient(eSocket);
|
||||||
}
|
e.AcceptSocket = null;
|
||||||
|
} while (!GameServer.ServerSocket.AcceptAsync(e));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Disconnect()
|
public void Disconnect()
|
||||||
|
@ -127,120 +122,47 @@ namespace HISP.Server
|
||||||
|
|
||||||
private void receivePackets(object sender, SocketAsyncEventArgs e)
|
private void receivePackets(object sender, SocketAsyncEventArgs e)
|
||||||
{
|
{
|
||||||
restart:;
|
do
|
||||||
// HI1 Packets are terminates by 0x00 so we have to read until we receive that terminator
|
|
||||||
|
|
||||||
if (!ClientSocket.Connected)
|
|
||||||
{
|
{
|
||||||
Disconnect();
|
// HI1 Packets are terminates by 0x00 so we have to read until we receive that terminator
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(e.SocketError != SocketError.Success)
|
|
||||||
{
|
|
||||||
Disconnect();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
if (!ClientSocket.Connected)
|
||||||
int availble = e.BytesTransferred;
|
|
||||||
if (availble >= 1)
|
|
||||||
{
|
|
||||||
|
|
||||||
for (int i = 0; i < availble; i++)
|
|
||||||
{
|
|
||||||
currentPacket.Add(e.Buffer[i]);
|
|
||||||
if (e.Buffer[i] == PacketBuilder.PACKET_TERMINATOR)
|
|
||||||
{
|
|
||||||
parsePackets(currentPacket.ToArray());
|
|
||||||
currentPacket.Clear();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isDisconnecting)
|
|
||||||
return;
|
|
||||||
|
|
||||||
SocketAsyncEventArgs evt = new SocketAsyncEventArgs();
|
|
||||||
evt.Completed += receivePackets;
|
|
||||||
evt.SetBuffer(workBuffer, 0, workBuffer.Length);
|
|
||||||
if (ClientSocket != null && !ClientSocket.ReceiveAsync(evt))
|
|
||||||
{
|
|
||||||
e = evt;
|
|
||||||
goto restart;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* public void Disconnect()
|
|
||||||
{
|
|
||||||
|
|
||||||
// Cant outright stop threads anymore in .NET core,
|
|
||||||
// Lets just let the thread stop gracefully.
|
|
||||||
|
|
||||||
this.isDisconnecting = true;
|
|
||||||
}
|
|
||||||
private bool receivePackets()
|
|
||||||
{
|
|
||||||
// HI1 Packets are terminates by 0x00 so we have to read until we receive that terminator
|
|
||||||
Logger.DebugPrint("Reciving Packets...");
|
|
||||||
|
|
||||||
while (ClientSocket.Connected && !isDisconnecting)
|
|
||||||
{
|
|
||||||
if (isDisconnecting)
|
|
||||||
break;
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
int availble = ClientSocket.Available;
|
|
||||||
if (availble >= 1)
|
|
||||||
{
|
|
||||||
byte[] buffer = new byte[availble];
|
|
||||||
ClientSocket.Receive(buffer);
|
|
||||||
|
|
||||||
for (int i = 0; i < availble; i++)
|
|
||||||
{
|
|
||||||
currentPacket.Add(buffer[i]);
|
|
||||||
if (buffer[i] == PacketBuilder.PACKET_TERMINATOR)
|
|
||||||
{
|
|
||||||
parsePackets(currentPacket.ToArray());
|
|
||||||
currentPacket.Clear();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (SocketException)
|
|
||||||
{
|
{
|
||||||
Disconnect();
|
Disconnect();
|
||||||
break;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
if (e.SocketError != SocketError.Success)
|
||||||
|
{
|
||||||
|
Disconnect();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Stop Timers
|
int availble = e.BytesTransferred;
|
||||||
if (inactivityTimer != null)
|
if (availble >= 1)
|
||||||
inactivityTimer.Dispose();
|
{
|
||||||
if (warnTimer != null)
|
|
||||||
warnTimer.Dispose();
|
|
||||||
if (kickTimer != null)
|
|
||||||
kickTimer.Dispose();
|
|
||||||
|
|
||||||
// Call OnDisconnect
|
for (int i = 0; i < availble; i++)
|
||||||
connectedClients.Remove(this);
|
{
|
||||||
GameServer.OnDisconnect(this);
|
currentPacket.Add(e.Buffer[i]);
|
||||||
LoggedIn = false;
|
if (e.Buffer[i] == PacketBuilder.PACKET_TERMINATOR)
|
||||||
|
{
|
||||||
|
parsePackets(currentPacket.ToArray());
|
||||||
|
currentPacket.Clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Close Socket
|
if (isDisconnecting)
|
||||||
ClientSocket.Close();
|
return;
|
||||||
ClientSocket.Dispose();
|
|
||||||
|
|
||||||
|
} while (!ClientSocket.ReceiveAsync(e));
|
||||||
|
|
||||||
return isDisconnecting; // Stop the task.
|
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
||||||
private void minuteTimerTick(object state)
|
private void minuteTimerTick(object state)
|
||||||
{
|
{
|
||||||
totalMinutesElapsed++;
|
totalMinutesElapsed++;
|
||||||
|
|
|
@ -8099,8 +8099,7 @@ namespace HISP.Server
|
||||||
|
|
||||||
SocketAsyncEventArgs e = new SocketAsyncEventArgs();
|
SocketAsyncEventArgs e = new SocketAsyncEventArgs();
|
||||||
e.Completed += GameClient.CreateClient;
|
e.Completed += GameClient.CreateClient;
|
||||||
if (!ServerSocket.AcceptAsync(e))
|
GameClient.CreateClient(null, e);
|
||||||
GameClient.CreateClient(null, e);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue