1 //
2 // Copyright (c) 2010-2022 Antmicro
3 // Copyright (c) 2011-2015 Realtime Embedded
4 //
5 // This file is licensed under the MIT License.
6 // Full license text is available in 'licenses/MIT.txt'.
7 //
8 
9 using System;
10 using Antmicro.Renode.Core;
11 using Antmicro.Renode.Utilities;
12 
13 using Antmicro.Migrant;
14 namespace Antmicro.Renode.Backends.Terminals
15 {
16     public static class ServerSocketTerminalExtensions
17     {
CreateServerSocketTerminal(this Emulation emulation, int port, string name, bool emitConfig = true, bool flushOnConnect = false)18         public static void CreateServerSocketTerminal(this Emulation emulation, int port, string name, bool emitConfig = true, bool flushOnConnect = false)
19         {
20             emulation.ExternalsManager.AddExternal(new ServerSocketTerminal(port, emitConfig, flushOnConnect), name);
21         }
22     }
23 
24     [Transient]
25     public class ServerSocketTerminal : BackendTerminal, IDisposable
26     {
ServerSocketTerminal(int port, bool emitConfigBytes = true, bool flushOnConnect = false)27         public ServerSocketTerminal(int port, bool emitConfigBytes = true, bool flushOnConnect = false)
28         {
29             server = new SocketServerProvider(emitConfigBytes, flushOnConnect, serverName: "Terminal");
30             server.DataReceived += b => CallCharReceived((byte)b);
31 
32             server.Start(port);
33         }
34 
WriteChar(byte value)35         public override void WriteChar(byte value)
36         {
37             server.SendByte(value);
38         }
39 
Dispose()40         public void Dispose()
41         {
42             server.Stop();
43         }
44 
45         private readonly SocketServerProvider server;
46     }
47 }
48 
49