private void NetManagerOnSendToClient(NetManager.orig_SendToClient orig, Terraria.Net.NetManager self, NetPacket packet, int playerid) { //if (IsChatOpen()) { packet.ShrinkToFit(); _socket.AsyncSend(packet.Buffer.Data, 0, packet.Length, new SocketSendCallback(SendCallback), packet); //typeof(NetManager).GetMethod("SendData", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(Terraria.Net.NetManager.Instance, new object[] { connection.Socket, packet }); } }
private static void OnConnectionAccepted(ISocket client) { int num = Netplay.FindNextOpenClientSlot(); if (num != -1) { Netplay.Clients[num].Socket = client; Netplay.Clients[num].sendQueue.StartThread(); Console.WriteLine(client.GetRemoteAddress() + " is connecting to slot {0}...", num); } else { using (var stream = new MemoryStream()) { using (var writer = new BinaryWriter(stream)) { writer.Write((short)0); writer.Write((byte)2); writer.Write("Server is full."); short position = (short)writer.BaseStream.Position; writer.BaseStream.Position = 0L; writer.Write((short)position); byte[] data = stream.ToArray(); client.AsyncSend(data, 0, data.Length, delegate { }); } } client.Close(); } }
private static void KickClient(ISocket client, NetworkText kickMessage) { BinaryWriter writer = fullBuffer.writer; if (writer == null) { fullBuffer.ResetWriter(); writer = fullBuffer.writer; } writer.BaseStream.Position = 0L; long position = writer.BaseStream.Position; writer.BaseStream.Position += 2L; writer.Write((byte)2); kickMessage.Serialize(writer); if (Main.dedServ) { Console.WriteLine(Language.GetTextValue("CLI.ClientWasBooted", client.GetRemoteAddress().ToString(), kickMessage)); } int num = (int)writer.BaseStream.Position; writer.BaseStream.Position = position; writer.Write((short)num); writer.BaseStream.Position = num; client.AsyncSend(fullBuffer.writeBuffer, 0, num, ServerFullWriteCallBack, client); }
private static void KickClient(ISocket client, NetworkText kickMessage) { BinaryWriter writer = Netplay.fullBuffer.writer; if (writer == null) { Netplay.fullBuffer.ResetWriter(); writer = Netplay.fullBuffer.writer; } writer.BaseStream.Position = 0L; long position1 = writer.BaseStream.Position; writer.BaseStream.Position += 2L; writer.Write((byte)2); kickMessage.Serialize(writer); if (Main.dedServ) { Console.WriteLine(Language.GetTextValue("CLI.ClientWasBooted", (object)client.GetRemoteAddress().ToString(), (object)kickMessage)); } int position2 = (int)writer.BaseStream.Position; writer.BaseStream.Position = position1; writer.Write((short)position2); writer.BaseStream.Position = (long)position2; client.AsyncSend(Netplay.fullBuffer.writeBuffer, 0, position2, new SocketSendCallback(Netplay.ServerFullWriteCallBack), (object)client); }
public static void SendData(ISocket socket, NetPacket packet) { try { socket.AsyncSend(packet.Buffer.Data, 0, packet.Length, new SocketSendCallback(NetManager.SendCallback), (object)packet); } catch { Console.WriteLine(" Exception normal: Tried to send data to a client after losing connection"); } }
public static void SendData(ISocket socket, NetPacket packet) { try { socket.AsyncSend(packet.Buffer.Data, 0, packet.Length, new SocketSendCallback(NetManager.SendCallback), (object)packet); } catch { Console.WriteLine(Language.GetTextValue("Error.ExceptionNormal", (object)Language.GetTextValue("Error.DataSentAfterConnectionLost"))); } }
private void SendData(ISocket socket, NetPacket packet) { if (Main.netMode != 0) { packet.ShrinkToFit(); try { socket.AsyncSend(packet.Buffer.Data, 0, packet.Length, SendCallback, packet); } catch { } } }
private void SendData(ISocket socket, NetPacket packet) { if (Main.netMode == 0) { return; } packet.ShrinkToFit(); try { socket.AsyncSend(packet.Buffer.Data, 0, packet.Length, new SocketSendCallback(NetManager.SendCallback), (object)packet); } catch { } }
private void SendData(ISocket socket, NetPacket packet) { if (Main.netMode != 0) { packet.ShrinkToFit(); try { socket.AsyncSend(packet.Buffer.Data, 0, packet.Length, SendCallback, packet); } catch { } Main.ActiveNetDiagnosticsUI.CountSentModuleMessage(packet.Id, packet.Length); } }
private void SendData(ISocket socket, NetPacket packet) { if (Main.netMode == 0) { return; } packet.ShrinkToFit(); try { socket.AsyncSend(packet.Buffer.Data, 0, packet.Length, new SocketSendCallback(NetManager.SendCallback), (object)packet); } catch { Console.WriteLine(Language.GetTextValue("Error.ExceptionNormal", (object)Language.GetTextValue("Error.DataSentAfterConnectionLost"))); } }
private void SendData(ISocket socket, NetPacket packet) { if (Main.netMode == 0) { return; } packet.ShrinkToFit(); try { socket.AsyncSend(packet.Buffer.Data, 0, packet.Length, new SocketSendCallback(NetManager.SendCallback), (object)packet); } catch { } Main.ActiveNetDiagnosticsUI.CountSentModuleMessage((int)packet.Id, packet.Length); }
private void ServerLoop(object context) { TcpListener listener = context as TcpListener; TcpClient client = listener.AcceptTcpClient(); TcpSocket terrariaSocket = new TcpSocket(client); ISocket socket = terrariaSocket as ISocket; Console.WriteLine("server loop started"); RemoteServer server = new RemoteServer(); server.Socket = terrariaSocket; while (false) { try { if (socket.IsConnected()) { if (socket.IsDataAvailable()) { client.GetStream().Flush(); byte[] data = new byte[ushort.MaxValue]; using (MemoryStream stream = new MemoryStream(data)) { BinaryWriter writer = new BinaryWriter(stream); socket.AsyncSend(writer.BaseStream.ReadAllBytes(), 0, 256, new SocketSendCallback(Netplay.Connection.ClientWriteCallBack), null); } } } } catch (Exception e) { Console.WriteLine(e); } } listener.Stop(); Console.WriteLine("server loop stopped"); }
private static void OnConnectionAccepted(ISocket client) { int num = FindNextOpenClientSlot(); if (num != -1) { Clients[num].Reset(); Clients[num].Socket = client; Console.WriteLine(string.Concat(client.GetRemoteAddress(), " is connecting...")); } else { lock (fullBuffer) { BinaryWriter writer = fullBuffer.writer; if (writer == null) { fullBuffer.ResetWriter(); writer = fullBuffer.writer; } writer.BaseStream.Position = 0L; long position = writer.BaseStream.Position; writer.BaseStream.Position += 2L; writer.Write((byte)2); string value = Lang.mobile[62].Value; writer.Write(value); if (Main.dedServ) { Console.WriteLine(client.GetRemoteAddress().ToString() + " was booted: " + value); } int num2 = (int)writer.BaseStream.Position; writer.BaseStream.Position = position; writer.Write((short)num2); writer.BaseStream.Position = num2; client.AsyncSend(fullBuffer.writeBuffer, 0, num2, ServerFullWriteCallBack, client); } } }
private static void OnConnectionAccepted(ISocket client) { int num = Netplay.FindNextOpenClientSlot(); if (num != -1) { Netplay.Clients[num].Socket = client; Netplay.Clients[num].sendQueue.StartThread(); Console.WriteLine(client.GetRemoteAddress() + " is connecting to slot {0}...", num); } else { using (var stream = new MemoryStream()) { using (var writer = new BinaryWriter(stream)) { writer.Write((short)0); writer.Write((byte)2); writer.Write("Server is full."); short position = (short)writer.BaseStream.Position; writer.BaseStream.Position = 0L; writer.Write((short)position); byte[] data = stream.ToArray(); client.AsyncSend(data, 0, data.Length, delegate { }); } } client.Close(); } }
public bool Detect() { try { _socket = CreateSocket(); _working = true; Log("start working"); _socket.Connect(new TcpAddress(IPAddress.Loopback, TShock.Config.ServerPort)); if (_socket.IsConnected()) { Log("connected"); } else { throw new SocketException(ConnectionRefusedCode); } } catch (SocketException ex) { if (ex.ErrorCode == ConnectionRefusedCode) { Log("connection failed"); } Log(ex.ToString()); CloseSocket(); return(true); } try { _socket.AsyncSend(_writeBuffer, 0, _versionStrLength, SendCallback); _socket.AsyncReceive(_readBuffer, 0, _readBuffer.Length, ReceiveCallback); for (var i = 0; i < 3; i++) { if (!_working) { break; } Thread.Sleep(1000); } } catch (Exception ex) { Log("Unhandled exception in socket send & receive"); Log(ex.ToString()); } finally { CloseSocket(); } return(_working || _status); }