示例#1
0
 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 });
     }
 }
示例#2
0
        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();
            }
        }
示例#3
0
        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);
        }
示例#4
0
        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);
        }
示例#5
0
 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");
     }
 }
示例#6
0
 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")));
     }
 }
示例#7
0
 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
         {
         }
     }
 }
示例#8
0
 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);
     }
 }
示例#10
0
 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")));
     }
 }
示例#11
0
 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);
 }
示例#12
0
        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");
        }
示例#13
0
        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);
                }
            }
        }
示例#14
0
        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();
            }
        }
示例#15
0
        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);
        }