summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormarcinzelent <zelent.marcin@protonmail.com>2017-10-09 08:56:25 +0200
committermarcinzelent <zelent.marcin@protonmail.com>2017-10-09 08:56:25 +0200
commit295e3c10bb6d1c83796554edf8369e5aa87a20a8 (patch)
treef6ad54798c039b6db9aceca3099fd409f6ea4ba8
Initial commit.
-rw-r--r--Server/App.cs10
-rw-r--r--Server/ClientConnection.cs34
-rw-r--r--Server/LogSingleton.cs40
-rw-r--r--Server/MainWindow.cs76
-rw-r--r--Server/Program.cs19
-rw-r--r--Server/Server.csproj50
-rw-r--r--Server/TcpChatServer.cs50
-rw-r--r--Server/bin/Debug/Eto.Gtk2.dllbin0 -> 314368 bytes
-rw-r--r--Server/bin/Debug/Eto.Gtk3.dllbin0 -> 323584 bytes
-rw-r--r--Server/bin/Debug/Eto.dllbin0 -> 502784 bytes
-rw-r--r--Server/bin/Debug/Server.exebin0 -> 10752 bytes
-rw-r--r--Server/bin/Debug/Server.pdbbin0 -> 2668 bytes
-rw-r--r--Server/bin/Debug/Xwt.Gtk.dllbin0 -> 286720 bytes
-rw-r--r--Server/bin/Debug/Xwt.Gtk.dll.config22
-rw-r--r--Server/bin/Debug/Xwt.dllbin0 -> 414720 bytes
-rw-r--r--Server/bin/Debug/atk-sharp.dll.config8
-rw-r--r--Server/bin/Debug/gdk-sharp.dll.config14
-rw-r--r--Server/bin/Debug/gio-sharp.dll.config10
-rw-r--r--Server/bin/Debug/glib-sharp.dll.config8
-rw-r--r--Server/bin/Debug/gtk-dotnet.dll.config5
-rw-r--r--Server/bin/Debug/gtk-sharp.dll.config12
-rw-r--r--Server/bin/Debug/pango-sharp.dll.config12
-rw-r--r--Server/obj/x86/Debug/.NETFramework,Version=v4.5.AssemblyAttribute.cs2
-rw-r--r--Server/obj/x86/Debug/Server.csproj.CopyComplete0
-rw-r--r--Server/obj/x86/Debug/Server.csproj.CoreCompileInputs.cache1
-rw-r--r--Server/obj/x86/Debug/Server.csproj.FileListAbsolute.txt9
-rw-r--r--Server/obj/x86/Debug/Server.csproj.FilesWrittenAbsolute.txt13
-rw-r--r--Server/obj/x86/Debug/Server.csprojResolveAssemblyReference.cachebin0 -> 72279 bytes
-rw-r--r--Server/obj/x86/Debug/Server.exebin0 -> 10752 bytes
-rw-r--r--Server/obj/x86/Debug/Server.pdbbin0 -> 2668 bytes
-rw-r--r--Server/packages.config5
-rw-r--r--TcpChatX.sln23
-rw-r--r--TcpChatX.userprefs21
-rw-r--r--TcpChatX.zipbin0 -> 437272 bytes
-rw-r--r--packages/Xwt.0.2.40/LICENSE.txt21
-rw-r--r--packages/Xwt.0.2.40/README.markdown221
-rw-r--r--packages/Xwt.0.2.40/Xwt.0.2.40.nupkgbin0 -> 177505 bytes
-rw-r--r--packages/Xwt.0.2.40/lib/net40/Xwt.dllbin0 -> 414720 bytes
-rw-r--r--packages/Xwt.Gtk.0.2.40/LICENSE.txt21
-rw-r--r--packages/Xwt.Gtk.0.2.40/README.markdown221
-rw-r--r--packages/Xwt.Gtk.0.2.40/Xwt.Gtk.0.2.40.nupkgbin0 -> 138439 bytes
-rw-r--r--packages/Xwt.Gtk.0.2.40/build/Xwt.Gtk.dll.config22
-rw-r--r--packages/Xwt.Gtk.0.2.40/build/Xwt.Gtk.props10
-rw-r--r--packages/Xwt.Gtk.0.2.40/lib/net40/Xwt.Gtk.dllbin0 -> 286720 bytes
44 files changed, 960 insertions, 0 deletions
diff --git a/Server/App.cs b/Server/App.cs
new file mode 100644
index 0000000..8d02d69
--- /dev/null
+++ b/Server/App.cs
@@ -0,0 +1,10 @@
+sing System;
+namespace Server
+{
+ public class App
+ {
+ public App()
+ {
+ }
+ }
+}
diff --git a/Server/ClientConnection.cs b/Server/ClientConnection.cs
new file mode 100644
index 0000000..f2d8976
--- /dev/null
+++ b/Server/ClientConnection.cs
@@ -0,0 +1,34 @@
+using System;
+using System.IO;
+using System.Net.Sockets;
+using System.Threading.Tasks;
+
+namespace Server
+{
+ public class ClientConnection
+ {
+ public StreamReader StreamReader { get; set; }
+ public StreamWriter StreamWriter { get; set; }
+
+ public ClientConnection(TcpListener listener)
+ {
+ TcpClient connectionSocket = listener.AcceptTcpClient();
+ NetworkStream ns = connectionSocket.GetStream();
+ StreamReader = new StreamReader(ns);
+ StreamWriter = new StreamWriter(ns);
+ StreamWriter.AutoFlush = true;
+ Task.Run(() => EchoService(StreamReader, StreamWriter));
+ }
+
+ private async Task EchoService(StreamReader sr, StreamWriter sw)
+ {
+ while (true)
+ {
+ string message = await sr.ReadLineAsync();
+ LogSingleton.Instance.Log += $"{message}\n";
+ foreach (ClientConnection client in LogSingleton.Instance.ConnectedClients) client.StreamWriter.WriteLine(message);
+ message = "";
+ }
+ }
+ }
+}
diff --git a/Server/LogSingleton.cs b/Server/LogSingleton.cs
new file mode 100644
index 0000000..158440d
--- /dev/null
+++ b/Server/LogSingleton.cs
@@ -0,0 +1,40 @@
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Runtime.CompilerServices;
+
+namespace Server
+{
+ public class LogSingleton : INotifyPropertyChanged
+ {
+ private static LogSingleton _instance;
+ public static LogSingleton Instance => _instance ?? (_instance = new LogSingleton());
+
+ private string log;
+ public string Log
+ {
+ get
+ {
+ return log;
+ }
+ set
+ {
+ log = value;
+ OnPropertyChanged();
+ }
+ }
+
+ public List<ClientConnection> ConnectedClients { get; set; }
+
+ private LogSingleton()
+ {
+ ConnectedClients = new List<ClientConnection>();
+ }
+
+ public event PropertyChangedEventHandler PropertyChanged;
+
+ protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
+ {
+ PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
+ }
+ }
+}
diff --git a/Server/MainWindow.cs b/Server/MainWindow.cs
new file mode 100644
index 0000000..e8974d2
--- /dev/null
+++ b/Server/MainWindow.cs
@@ -0,0 +1,76 @@
+using System;
+using Xwt;
+using Xwt.Formats;
+
+namespace Server
+{
+ public class MainWindow : Window
+ {
+ TcpChatServer tcpChatServer;
+
+ public MainWindow()
+ {
+ Title = "TCP Chat X Server";
+ Width = 600;
+ Height = 400;
+
+ VBox mainVBox;
+ HBox connectionHBox, messageHBox;
+ TextEntry ipTextEntry = new TextEntry
+ {
+ PlaceholderText = "IP Address",
+ Text = "127.0.0.1",
+ };
+ TextEntry portTextEntry = new TextEntry
+ {
+ WidthRequest = 100,
+ PlaceholderText = "Port",
+ Text = "6789"
+ };
+ Button startButton = new Button
+ {
+ Label = "Start"
+ };
+ startButton.Clicked += (object sender, EventArgs e) =>
+ {
+ tcpChatServer = new TcpChatServer();
+ tcpChatServer.Start(ipTextEntry.Text, int.Parse(portTextEntry.Text));
+ };
+ RichTextView outputTextView = new RichTextView
+ {
+ ExpandHorizontal = true,
+ ExpandVertical = true,
+ MinHeight = 200
+ };
+ LogSingleton.Instance.PropertyChanged += (sender, args) =>
+ outputTextView.LoadText(LogSingleton.Instance.Log, TextFormat.Plain);
+
+ TextEntry messageTextEntry = new TextEntry()
+ {
+ PlaceholderText = "Message"
+ };
+ Button sendButton = new Button
+ {
+ Label = "Send"
+ };
+ sendButton.Clicked += (object sender, EventArgs e) =>
+ {
+ tcpChatServer.SendMessage($"Server: {messageTextEntry.Text}");
+ messageTextEntry.Text = "";
+ };
+
+ Content = mainVBox = new VBox();
+
+ mainVBox.PackStart(connectionHBox = new HBox());
+ connectionHBox.PackStart(ipTextEntry , true);
+ connectionHBox.PackStart(portTextEntry);
+ connectionHBox.PackStart(startButton);
+
+ mainVBox.PackStart(outputTextView, true, true);
+
+ mainVBox.PackStart(messageHBox = new HBox());
+ messageHBox.PackStart(messageTextEntry, true, true);
+ messageHBox.PackStart(sendButton);
+ }
+ }
+}
diff --git a/Server/Program.cs b/Server/Program.cs
new file mode 100644
index 0000000..35bf5e4
--- /dev/null
+++ b/Server/Program.cs
@@ -0,0 +1,19 @@
+using System;
+using Xwt;
+
+namespace Server
+{
+ class Program
+ {
+ [STAThread]
+ static void Main()
+ {
+ Application.Initialize();
+ var mainWindow = new MainWindow();
+ mainWindow.Show();
+ Application.Run();
+ mainWindow.Dispose();
+ }
+ }
+
+}
diff --git a/Server/Server.csproj b/Server/Server.csproj
new file mode 100644
index 0000000..5b68532
--- /dev/null
+++ b/Server/Server.csproj
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="..\packages\Xwt.Gtk.0.2.40\build\Xwt.Gtk.props" Condition="Exists('..\packages\Xwt.Gtk.0.2.40\build\Xwt.Gtk.props')" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">x86</Platform>
+ <ProjectGuid>{8CB98A13-75A8-42B1-9E03-4FA3ABCEAA3B}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <RootNamespace>Server</RootNamespace>
+ <AssemblyName>Server</AssemblyName>
+ <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug</OutputPath>
+ <DefineConstants>DEBUG;</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <PlatformTarget>x86</PlatformTarget>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release</OutputPath>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <PlatformTarget>x86</PlatformTarget>
+ </PropertyGroup>
+ <ItemGroup>
+ <Compile Include="Program.cs" />
+ <Compile Include="MainWindow.cs" />
+ <Compile Include="ClientConnection.cs" />
+ <Compile Include="LogSingleton.cs" />
+ <Compile Include="TcpChatServer.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <Reference Include="System" />
+ <Reference Include="Xwt">
+ <HintPath>..\packages\Xwt.0.2.40\lib\net40\Xwt.dll</HintPath>
+ </Reference>
+ <Reference Include="Xwt.Gtk">
+ <HintPath>..\packages\Xwt.Gtk.0.2.40\lib\net40\Xwt.Gtk.dll</HintPath>
+ </Reference>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="packages.config" />
+ </ItemGroup>
+ <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+</Project> \ No newline at end of file
diff --git a/Server/TcpChatServer.cs b/Server/TcpChatServer.cs
new file mode 100644
index 0000000..986bbf1
--- /dev/null
+++ b/Server/TcpChatServer.cs
@@ -0,0 +1,50 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Net;
+using System.Net.Sockets;
+using System.Threading.Tasks;
+
+namespace Server
+{
+ public class TcpChatServer
+ {
+ TcpListener serverSocket;
+
+ public void Start(string ipAddress, int port)
+ {
+ try
+ {
+ serverSocket = new TcpListener(IPAddress.Parse(ipAddress), port);
+ serverSocket.Start();
+ LogSingleton.Instance.Log += "Server started.\n";
+ Task.Run(() => Listen(serverSocket));
+ LogSingleton.Instance.Log += "Waiting for connections...\n";
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine(ex.Message);
+ }
+ }
+
+ private void Listen(TcpListener listener)
+ {
+ while (true)
+ {
+ ClientConnection cc = new ClientConnection(listener);
+ LogSingleton.Instance.ConnectedClients.Add(cc);
+ }
+ }
+
+ public void Stop()
+ {
+ serverSocket.Stop();
+ LogSingleton.Instance.Log += "Server stopped\n";
+ }
+
+ public void SendMessage(string message)
+ {
+ foreach (ClientConnection client in LogSingleton.Instance.ConnectedClients) client.StreamWriter.WriteLine(message);
+ }
+ }
+}
diff --git a/Server/bin/Debug/Eto.Gtk2.dll b/Server/bin/Debug/Eto.Gtk2.dll
new file mode 100644
index 0000000..c0fddb7
--- /dev/null
+++ b/Server/bin/Debug/Eto.Gtk2.dll
Binary files differ
diff --git a/Server/bin/Debug/Eto.Gtk3.dll b/Server/bin/Debug/Eto.Gtk3.dll
new file mode 100644
index 0000000..21bbb3d
--- /dev/null
+++ b/Server/bin/Debug/Eto.Gtk3.dll
Binary files differ
diff --git a/Server/bin/Debug/Eto.dll b/Server/bin/Debug/Eto.dll
new file mode 100644
index 0000000..306ef1d
--- /dev/null
+++ b/Server/bin/Debug/Eto.dll
Binary files differ
diff --git a/Server/bin/Debug/Server.exe b/Server/bin/Debug/Server.exe
new file mode 100644
index 0000000..482894d
--- /dev/null
+++ b/Server/bin/Debug/Server.exe
Binary files differ
diff --git a/Server/bin/Debug/Server.pdb b/Server/bin/Debug/Server.pdb
new file mode 100644
index 0000000..a70dc58
--- /dev/null
+++ b/Server/bin/Debug/Server.pdb
Binary files differ
diff --git a/Server/bin/Debug/Xwt.Gtk.dll b/Server/bin/Debug/Xwt.Gtk.dll
new file mode 100644
index 0000000..b80892c
--- /dev/null
+++ b/Server/bin/Debug/Xwt.Gtk.dll
Binary files differ
diff --git a/Server/bin/Debug/Xwt.Gtk.dll.config b/Server/bin/Debug/Xwt.Gtk.dll.config
new file mode 100644
index 0000000..f1630bb
--- /dev/null
+++ b/Server/bin/Debug/Xwt.Gtk.dll.config
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+ <dllmap os="!windows,osx" dll="libglib-2.0-0.dll" target="libglib-2.0.so.0"/>
+ <dllmap os="!windows,osx" dll="libgobject-2.0-0.dll" target="libgobject-2.0.so.0"/>
+ <dllmap os="!windows,osx" dll="libatk-1.0-0.dll" target="libatk-1.0.so.0"/>
+ <dllmap os="!windows,osx" dll="libgtk-win32-2.0-0.dll" target="libgtk-x11-2.0.so.0"/>
+ <dllmap os="!windows,osx" dll="libgdk-win32-2.0-0.dll" target="libgdk-x11-2.0.so.0"/>
+ <dllmap os="!windows,osx" dll="libpango-1.0-0.dll" target="libpango-1.0.so.0"/>
+ <dllmap os="!windows,osx" dll="libpangocairo-1.0-0.dll" target="libpangocairo-1.0.so.0"/>
+ <dllmap os="!windows,osx" dll="libwebkitgtk-1.0-0.dll" target="libwebkitgtk-1.0.so.0"/>
+ <dllmap os="!windows,osx" dll="fontconfig" target="libfontconfig.so.1"/>
+
+ <dllmap os="osx" dll="libglib-2.0-0.dll" target="libglib-2.0.0.dylib"/>
+ <dllmap os="osx" dll="libgobject-2.0-0.dll" target="libgobject-2.0.0.dylib"/>
+ <dllmap os="osx" dll="libatk-1.0-0.dll" target="libatk-1.0.0.dylib"/>
+ <dllmap os="osx" dll="libgtk-win32-2.0-0.dll" target="libgtk-quartz-2.0.0.dylib"/>
+ <dllmap os="osx" dll="libgdk-win32-2.0-0.dll" target="libgdk-quartz-2.0.0.dylib"/>
+ <dllmap os="osx" dll="libpango-1.0-0.dll" target="libpango-1.0.0.dylib"/>
+ <dllmap os="osx" dll="libpangocairo-1.0-0.dll" target="libpangocairo-1.0.0.dylib"/>
+ <dllmap os="osx" dll="libwebkitgtk-1.0-0.dll" target="libwebkitgtk-1.0.0.dylib"/>
+ <dllmap os="osx" dll="fontconfig" target="libfontconfig.1.dylib"/>
+</configuration>
diff --git a/Server/bin/Debug/Xwt.dll b/Server/bin/Debug/Xwt.dll
new file mode 100644
index 0000000..c50a574
--- /dev/null
+++ b/Server/bin/Debug/Xwt.dll
Binary files differ
diff --git a/Server/bin/Debug/atk-sharp.dll.config b/Server/bin/Debug/atk-sharp.dll.config
new file mode 100644
index 0000000..671f620
--- /dev/null
+++ b/Server/bin/Debug/atk-sharp.dll.config
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+ <dllmap os="!windows,osx" dll="libgobject-2.0-0.dll" target="libgobject-2.0.so.0"/>
+ <dllmap os="osx" dll="libgobject-2.0-0.dll" target="libgobject-2.0.0.dylib"/>
+
+ <dllmap os="!windows,osx" dll="libatk-1.0-0.dll" target="libatk-1.0.so.0"/>
+ <dllmap os="osx" dll="libatk-1.0-0.dll" target="libatk-1.0.0.dylib"/>
+</configuration>
diff --git a/Server/bin/Debug/gdk-sharp.dll.config b/Server/bin/Debug/gdk-sharp.dll.config
new file mode 100644
index 0000000..00917fd
--- /dev/null
+++ b/Server/bin/Debug/gdk-sharp.dll.config
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+ <dllmap os="!windows,osx" dll="libgio-2.0-0.dll" target="libgio-2.0.so.0"/>
+ <dllmap os="!windows,osx" dll="libglib-2.0-0.dll" target="libglib-2.0.so.0"/>
+ <dllmap os="!windows,osx" dll="libgobject-2.0-0.dll" target="libgobject-2.0.so.0"/>
+ <dllmap os="!windows,osx" dll="libgdk-3-0.dll" target="libgdk-3.so.0"/>
+ <dllmap os="!windows,osx" dll="libgdk_pixbuf-2.0-0.dll" target="libgdk_pixbuf-2.0.so.0"/>
+
+ <dllmap os="osx" dll="libgio-2.0-0.dll" target="libgio-2.0.0.dylib"/>
+ <dllmap os="osx" dll="libglib-2.0-0.dll" target="libglib-2.0.0.dylib"/>
+ <dllmap os="osx" dll="libgobject-2.0-0.dll" target="libgobject-2.0.0.dylib"/>
+ <dllmap os="osx" dll="libgdk-3-0.dll" target="libgdk-quartz-3.0.0.dylib"/>
+ <dllmap os="osx" dll="libgdk_pixbuf-2.0-0.dll" target="libgdk_pixbuf-2.0.0.dylib"/>
+</configuration>
diff --git a/Server/bin/Debug/gio-sharp.dll.config b/Server/bin/Debug/gio-sharp.dll.config
new file mode 100644
index 0000000..47c0700
--- /dev/null
+++ b/Server/bin/Debug/gio-sharp.dll.config
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+ <dllmap os="!windows,osx" dll="libgio-2.0-0.dll" target="libgio-2.0.so.0"/>
+ <dllmap os="!windows,osx" dll="libglib-2.0-0.dll" target="libglib-2.0.so.0"/>
+ <dllmap os="!windows,osx" dll="libgobject-2.0-0.dll" target="libgobject-2.0.so.0"/>
+
+ <dllmap os="osx" dll="libgio-2.0-0.dll" target="libgio-2.0.0.dylib"/>
+ <dllmap os="osx" dll="libglib-2.0-0.dll" target="libglib-2.0.0.dylib"/>
+ <dllmap os="osx" dll="libgobject-2.0-0.dll" target="libgobject-2.0.0.dylib"/>
+</configuration>
diff --git a/Server/bin/Debug/glib-sharp.dll.config b/Server/bin/Debug/glib-sharp.dll.config
new file mode 100644
index 0000000..2fd9ec4
--- /dev/null
+++ b/Server/bin/Debug/glib-sharp.dll.config
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+ <dllmap os="!windows,osx" dll="libglib-2.0-0.dll" target="libglib-2.0.so.0"/>
+ <dllmap os="!windows,osx" dll="libgobject-2.0-0.dll" target="libgobject-2.0.so.0"/>
+
+ <dllmap os="osx" dll="libglib-2.0-0.dll" target="libglib-2.0.0.dylib"/>
+ <dllmap os="osx" dll="libgobject-2.0-0.dll" target="libgobject-2.0.0.dylib"/>
+</configuration>
diff --git a/Server/bin/Debug/gtk-dotnet.dll.config b/Server/bin/Debug/gtk-dotnet.dll.config
new file mode 100644
index 0000000..ebd8040
--- /dev/null
+++ b/Server/bin/Debug/gtk-dotnet.dll.config
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+ <dllmap os="!windows,osx" dll="libgdk-3-0.dll" target="libgdk-3.so.0"/>
+ <dllmap os="osx" dll="libgdk-3-0.dll" target="libgdk-quartz-3.0.0.dylib"/>
+</configuration>
diff --git a/Server/bin/Debug/gtk-sharp.dll.config b/Server/bin/Debug/gtk-sharp.dll.config
new file mode 100644
index 0000000..2914bb7
--- /dev/null
+++ b/Server/bin/Debug/gtk-sharp.dll.config
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+ <dllmap os="!windows,osx" dll="libglib-2.0-0.dll" target="libglib-2.0.so.0"/>
+ <dllmap os="!windows,osx" dll="libgobject-2.0-0.dll" target="libgobject-2.0.so.0"/>
+ <dllmap os="!windows,osx" dll="libatk-1.0-0.dll" target="libatk-1.0.so.0"/>
+ <dllmap os="!windows,osx" dll="libgtk-3-0.dll" target="libgtk-3.so.0"/>
+
+ <dllmap os="osx" dll="libglib-2.0-0.dll" target="libglib-2.0.0.dylib"/>
+ <dllmap os="osx" dll="libgobject-2.0-0.dll" target="libgobject-2.0.0.dylib"/>
+ <dllmap os="osx" dll="libatk-1.0-0.dll" target="libatk-1.0.0.dylib"/>
+ <dllmap os="osx" dll="libgtk-3-0.dll" target="libgtk-3.0.dylib"/>
+</configuration>
diff --git a/Server/bin/Debug/pango-sharp.dll.config b/Server/bin/Debug/pango-sharp.dll.config
new file mode 100644
index 0000000..2ec8168
--- /dev/null
+++ b/Server/bin/Debug/pango-sharp.dll.config
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+ <dllmap os="!windows,osx" dll="libglib-2.0-0.dll" target="libglib-2.0.so.0"/>
+ <dllmap os="!windows,osx" dll="libgobject-2.0-0.dll" target="libgobject-2.0.so.0"/>
+ <dllmap os="!windows,osx" dll="libpango-1.0-0.dll" target="libpango-1.0.so.0"/>
+ <dllmap os="!windows,osx" dll="libpangocairo-1.0-0.dll" target="libpangocairo-1.0.so.0"/>
+
+ <dllmap os="osx" dll="libglib-2.0-0.dll" target="libglib-2.0.0.dylib"/>
+ <dllmap os="osx" dll="libgobject-2.0-0.dll" target="libgobject-2.0.0.dylib"/>
+ <dllmap os="osx" dll="libpango-1.0-0.dll" target="libpango-1.0.0.dylib"/>
+ <dllmap os="osx" dll="libpangocairo-1.0-0.dll" target="libpangocairo-1.0.0.dylib"/>
+</configuration>
diff --git a/Server/obj/x86/Debug/.NETFramework,Version=v4.5.AssemblyAttribute.cs b/Server/obj/x86/Debug/.NETFramework,Version=v4.5.AssemblyAttribute.cs
new file mode 100644
index 0000000..fdcb678
--- /dev/null
+++ b/Server/obj/x86/Debug/.NETFramework,Version=v4.5.AssemblyAttribute.cs
@@ -0,0 +1,2 @@
+// <autogenerated />
+[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.5", FrameworkDisplayName = "")]
diff --git a/Server/obj/x86/Debug/Server.csproj.CopyComplete b/Server/obj/x86/Debug/Server.csproj.CopyComplete
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Server/obj/x86/Debug/Server.csproj.CopyComplete
diff --git a/Server/obj/x86/Debug/Server.csproj.CoreCompileInputs.cache b/Server/obj/x86/Debug/Server.csproj.CoreCompileInputs.cache
new file mode 100644
index 0000000..b760382
--- /dev/null
+++ b/Server/obj/x86/Debug/Server.csproj.CoreCompileInputs.cache
@@ -0,0 +1 @@
+288dbf2ed052e53bd705274b9a599fcb3c80460a
diff --git a/Server/obj/x86/Debug/Server.csproj.FileListAbsolute.txt b/Server/obj/x86/Debug/Server.csproj.FileListAbsolute.txt
new file mode 100644
index 0000000..531304f
--- /dev/null
+++ b/Server/obj/x86/Debug/Server.csproj.FileListAbsolute.txt
@@ -0,0 +1,9 @@
+/home/marcin/MonoDevelop Projects/TcpChatX/Server/bin/Debug/Server.exe
+/home/marcin/MonoDevelop Projects/TcpChatX/Server/bin/Debug/Server.pdb
+/home/marcin/MonoDevelop Projects/TcpChatX/Server/bin/Debug/Xwt.dll
+/home/marcin/MonoDevelop Projects/TcpChatX/Server/obj/x86/Debug/Server.csproj.CoreCompileInputs.cache
+/home/marcin/MonoDevelop Projects/TcpChatX/Server/obj/x86/Debug/Server.exe
+/home/marcin/MonoDevelop Projects/TcpChatX/Server/obj/x86/Debug/Server.pdb
+/home/marcin/MonoDevelop Projects/TcpChatX/Server/bin/Debug/Xwt.Gtk.dll.config
+/home/marcin/MonoDevelop Projects/TcpChatX/Server/bin/Debug/Xwt.Gtk.dll
+/home/marcin/MonoDevelop Projects/TcpChatX/Server/obj/x86/Debug/Server.csprojResolveAssemblyReference.cache
diff --git a/Server/obj/x86/Debug/Server.csproj.FilesWrittenAbsolute.txt b/Server/obj/x86/Debug/Server.csproj.FilesWrittenAbsolute.txt
new file mode 100644
index 0000000..5ab07d3
--- /dev/null
+++ b/Server/obj/x86/Debug/Server.csproj.FilesWrittenAbsolute.txt
@@ -0,0 +1,13 @@
+/home/marcin/MonoDevelop Projects/TcpChatX/Server/obj/x86/Debug/.NETFramework,Version=v4.5.AssemblyAttribute.cs
+/home/marcin/MonoDevelop Projects/TcpChatX/Server/bin/Debug/Eto.dll
+/home/marcin/MonoDevelop Projects/TcpChatX/Server/bin/Debug/Eto.Gtk3.dll
+/home/marcin/MonoDevelop Projects/TcpChatX/Server/bin/Debug/Server.pdb
+/home/marcin/MonoDevelop Projects/TcpChatX/Server/bin/Debug/Server.exe
+/home/marcin/MonoDevelop Projects/TcpChatX/Server/obj/x86/Debug/Server.exe
+/home/marcin/MonoDevelop Projects/TcpChatX/Server/obj/x86/Debug/Server.pdb
+/home/marcin/MonoDevelop Projects/TcpChatX/Server/bin/Debug/Eto.Gtk2.dll
+/home/marcin/MonoDevelop Projects/TcpChatX/Server/bin/Debug/Xwt.Gtk.dll.config
+/home/marcin/MonoDevelop Projects/TcpChatX/Server/bin/Debug/Xwt.dll
+/home/marcin/MonoDevelop Projects/TcpChatX/Server/bin/Debug/Xwt.Gtk.dll
+/home/marcin/MonoDevelop Projects/TcpChatX/Server/bin/Debug/Xwt.WPF.dll
+/home/marcin/MonoDevelop Projects/TcpChatX/Server/bin/Debug/Xwt.Gtk.Windows.dll
diff --git a/Server/obj/x86/Debug/Server.csprojResolveAssemblyReference.cache b/Server/obj/x86/Debug/Server.csprojResolveAssemblyReference.cache
new file mode 100644
index 0000000..0cdf7de
--- /dev/null
+++ b/Server/obj/x86/Debug/Server.csprojResolveAssemblyReference.cache
Binary files differ
diff --git a/Server/obj/x86/Debug/Server.exe b/Server/obj/x86/Debug/Server.exe
new file mode 100644
index 0000000..482894d
--- /dev/null
+++ b/Server/obj/x86/Debug/Server.exe
Binary files differ
diff --git a/Server/obj/x86/Debug/Server.pdb b/Server/obj/x86/Debug/Server.pdb
new file mode 100644
index 0000000..a70dc58
--- /dev/null
+++ b/Server/obj/x86/Debug/Server.pdb
Binary files differ
diff --git a/Server/packages.config b/Server/packages.config
new file mode 100644
index 0000000..5714f0f
--- /dev/null
+++ b/Server/packages.config
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+ <package id="Xwt" version="0.2.40" targetFramework="net45" />
+ <package id="Xwt.Gtk" version="0.2.40" targetFramework="net45" />
+</packages> \ No newline at end of file
diff --git a/TcpChatX.sln b/TcpChatX.sln
new file mode 100644
index 0000000..66e9ea4
--- /dev/null
+++ b/TcpChatX.sln
@@ -0,0 +1,23 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2012
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Server", "Server\Server.csproj", "{8CB98A13-75A8-42B1-9E03-4FA3ABCEAA3B}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Client", "..\TcpChatGui\Client\Client.csproj", "{73154F68-BBEB-48FC-86C4-BB4909C1C7B4}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|x86 = Debug|x86
+ Release|x86 = Release|x86
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {8CB98A13-75A8-42B1-9E03-4FA3ABCEAA3B}.Debug|x86.ActiveCfg = Debug|x86
+ {8CB98A13-75A8-42B1-9E03-4FA3ABCEAA3B}.Debug|x86.Build.0 = Debug|x86
+ {8CB98A13-75A8-42B1-9E03-4FA3ABCEAA3B}.Release|x86.ActiveCfg = Release|x86
+ {8CB98A13-75A8-42B1-9E03-4FA3ABCEAA3B}.Release|x86.Build.0 = Release|x86
+ {73154F68-BBEB-48FC-86C4-BB4909C1C7B4}.Debug|x86.ActiveCfg = Debug|x86
+ {73154F68-BBEB-48FC-86C4-BB4909C1C7B4}.Debug|x86.Build.0 = Debug|x86
+ {73154F68-BBEB-48FC-86C4-BB4909C1C7B4}.Release|x86.ActiveCfg = Release|x86
+ {73154F68-BBEB-48FC-86C4-BB4909C1C7B4}.Release|x86.Build.0 = Release|x86
+ EndGlobalSection
+EndGlobal
diff --git a/TcpChatX.userprefs b/TcpChatX.userprefs
new file mode 100644
index 0000000..c461aec
--- /dev/null
+++ b/TcpChatX.userprefs
@@ -0,0 +1,21 @@
+<Properties StartupConfiguration="{8CB98A13-75A8-42B1-9E03-4FA3ABCEAA3B}|Default">
+ <MonoDevelop.Ide.Workbench ActiveDocument="Server/Program.cs">
+ <Files>
+ <File FileName="Server/App.cs" Line="1" Column="1" />
+ <File FileName="Server/Program.cs" Line="17" Column="3" />
+ <File FileName="Server/MainWindow.cs" Line="18" Column="37" />
+ <File FileName="Server/ClientConnection.cs" Line="1" Column="1" />
+ <File FileName="Server/LogSingleton.cs" Line="1" Column="1" />
+ <File FileName="Server/packages.config" Line="1" Column="1" />
+ <File FileName="Server/TcpChatServer.cs" Line="24" Column="24" />
+ </Files>
+ </MonoDevelop.Ide.Workbench>
+ <MonoDevelop.Ide.Workspace ActiveConfiguration="Debug|x86" />
+ <MonoDevelop.Ide.ItemProperties.Server PreferredExecutionTarget="MonoDevelop.Default" />
+ <MonoDevelop.Ide.DebuggingService.Breakpoints>
+ <BreakpointStore />
+ </MonoDevelop.Ide.DebuggingService.Breakpoints>
+ <MonoDevelop.Ide.DebuggingService.PinnedWatches />
+ <MultiItemStartupConfigurations />
+ <MonoDevelop.Ide.ItemProperties.Client PreferredExecutionTarget="MonoDevelop.Default" />
+</Properties> \ No newline at end of file
diff --git a/TcpChatX.zip b/TcpChatX.zip
new file mode 100644
index 0000000..3f8a961
--- /dev/null
+++ b/TcpChatX.zip
Binary files differ
diff --git a/packages/Xwt.0.2.40/LICENSE.txt b/packages/Xwt.0.2.40/LICENSE.txt
new file mode 100644
index 0000000..170a488
--- /dev/null
+++ b/packages/Xwt.0.2.40/LICENSE.txt
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014 Xamarin, Inc
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/packages/Xwt.0.2.40/README.markdown b/packages/Xwt.0.2.40/README.markdown
new file mode 100644
index 0000000..54de416
--- /dev/null
+++ b/packages/Xwt.0.2.40/README.markdown
@@ -0,0 +1,221 @@
+This document is an introduction to XWT, a cross-platform UI toolkit
+for creating desktop applications.
+
+If you have any question about XWT or do you want to contribute
+a discussion group for XWT is available here:
+
+http://groups.google.com/group/xwt-list
+
+Introduction
+============
+
+Xwt is a new .NET framework for creating desktop applications that run
+on multiple platforms from the same codebase. Xwt works by exposing
+one unified API across all environments that is mapped to a set of
+native controls on each platform.
+
+This means that Xwt tends to focus on providing controls that will
+work across all platforms. However, that doesn't mean that the
+functionality available is a common denominator of all platforms.
+If a specific feature or widget is not available in the
+native framework of a platform, it will be emulated or implemented
+as a set of native widgets.
+
+Xwt can be used as a standalone framework to power the entire application
+or it can be embedded into an existing host. This allows developers
+to develop their "shell" using native components (for example a Ribbon
+on Windows, toolbars on Linux) and use Xwt for specific bits of the
+application, like dialog boxes or cross platform surfaces.
+
+Xwt works by creating an engine at runtime that will map to the
+underlying platform. These are the engines that are supported on
+each platform:
+
+* Windows: WPF engine, Gtk engine (using Gtk#)
+* MacOS X: Cocoa engine (using Xamarin.Mac) and Gtk engine (using Gtk#)
+* Linux: Gtk engine (using Gtk#)
+
+This means for example that you can write code for Xwt on Windows that
+can be hosted on an existing WPF application (like Visual Studio) or
+an existing Gtk# application (like MonoDevelop). Or on Mac, you can
+host Xwt on an existing Cocoa/Xamarin.Mac application or you can host it
+in our own MonoDevelop IDE.
+
+Getting Started
+---------------
+
+Open the Xwt.sln with MonoDevelop (or VisualStudio on Windows) and
+build the solution. You should end up with the libraries that you
+can use in your project and a couple of sample applications.
+
+Using Xwt in your app
+---------------------
+
+Based on your platform and the backend that you want to use, you need
+to pick the libraries that you want to use in your project.
+
+* Windows+WPF: Xwt.dll + Xwt.WPF.dll (requires WPF)
+* Windows+Gtk: Xwt.dll + Xwt.Gtk.dll (requires Gtk#)
+* Linux+Gtk: Xwt.dll + Xwt.Gtk.dll (requires Gtk#)
+* Mac+Gtk: Xwt.dll + Xwt.Gtk.dll (requires Gtk#)
+* Mac+Cocoa: Xwt.dll + Xwt.XamMac.dll (requires Xamarin.Mac.dll)
+
+Hello World
+-----------
+
+To write your first application, create an empty .NET project in your
+favorite language in MonoDevelop or Visual Studio and reference the
+Xwt.dll library. This is the only library that you need to reference
+at compile time.
+
+This is the simplest Xwt program you can write:
+
+ using System;
+ using Xwt;
+
+ class XwtDemo {
+ [STAThread]
+ static void Main ()
+ {
+ Application.Initialize (ToolkitType.Gtk);
+ var mainWindow = new Window (){
+ Title = "Xwt Demo Application",
+ Width = 500,
+ Height = 400
+ };
+ mainWindow.Show ();
+ Application.Run ();
+ mainWindow.Dispose ();
+ }
+ }
+
+You use the Application.Initialize() method to get the backend
+initialized. In this example we are using the Gtk backend. If you
+want to use another backend, just change the parameter provided
+to the Initialize() method. Also make sure the appropiate backend
+DLL is available in the application directory.
+
+Then we create an instance of the Window class, this class exposes two
+interesting properties, MainMenu which can be used to set the Window's
+main menu and "Content" which is of type "Widget" and allows you to
+add some content to the window.
+
+Finally, the Application.Run method is called to get the UI events
+processing going.
+
+Widget Class Hierarchy
+======================
+
+You will be using widgets to create the contents for your
+application. Xwt.Widget is the abstract base class from which all
+the other components are created.
+
+Some Widgets can contain other widgets, these are container widgets,
+and in Xwt those are Canvas, Paned, HBox, VBox and Table. The first
+two implement a box layout system, while the last one implements a
+Table layout that allows widgets to be attached to different
+anchor-points in a grid.
+
+The layout system uses an auto-sizing system similar to what is
+availble in Gtk and HTML allowing the user interface to grow or shrink
+based on the contents of the childrens on it.
+
+* XwtComponent
+ * Menu
+ * MenuItem
+ * Widget
+ * Box (Container)
+ * HBox (Container)
+ * VBox (Container)
+ * Button
+ * MenuButton
+ * ToggleButton
+ * Calendar
+ * Canvas (Container)
+ * Checkbox
+ * ComboBox
+ * Frame
+ * ImageView
+ * Label
+ * ListView
+ * NoteBook
+ * Paned (Container)
+ * HPaned (Container)
+ * VPaned (Container)
+ * ProgressBar
+ * ScrollView
+ * Separator
+ * VSeparator
+ * HSeparator
+ * Table (Container)
+ * TextEntry
+ * TreeView
+ * WindowFrame
+ * Window
+ * Dialog
+
+For example, the following attaches various labels and data entries to
+a Table:
+
+ t = new Table ();
+ t.Attach (new Label ("One:"), 0, 1, 0, 1);
+ t.Attach (new TextEntry (), 1, 2, 0, 1);
+ t.Attach (new Label ("Two:"), 0, 1, 1, 2);
+ t.Attach (new TextEntry (), 1, 2, 1, 2);
+ t.Attach (new Label ("Three:"), 0, 1, 2, 3);
+ t.Attach (new TextEntry (), 1, 2, 2, 3);
+
+
+The Application Class
+=====================
+
+The Application class is a static class that provides services to run
+your application.
+
+Initialization
+--------------
+
+The Application.Initialize API will instruct Xwt to initialize its
+binding to the native toolkit. You can pass an optional parameter to
+this method that specifies the full type name to load as the backend.
+
+For example, you can force the initialization of the backend to be
+specifically Gtk+ or specifically Xamarin.Mac based on MacOS. This is
+currently done like this:
+
+ Application.Initialize ("Xwt.GtkBackend.GtkEngine, Xwt.Gtk, Version=1.0.0.0");
+
+or:
+
+ Application.Initialize ("Xwt.Mac.MacEngine, Xwt.XamMac, Version=1.0.0.0");
+
+As you saw from the Hello World sample, toplevel windows are created
+by creating an instance of the "Xwt.Window" class. This class
+exposes a couple of properties that you can use to spice it up. The
+MainMenu property is used to control the contents of the application
+menus while the "Content" property is used to hold a Widget.
+
+Timers
+------
+
+The Application.TimeoutInvoke method takes a timespan and a Func<bool>
+action method and invokes that method in the main user interface
+loop.
+
+If the provided function returns true, then the timer is restarted,
+otherwise the timer ends.
+
+Background Threads
+------------------
+
+It is very common to perform tasks in the background and for those
+tasks in the background to later update the user interface. The Xwt
+API is not thread safe, which means that calls to the Xwt API must
+only be done from the main user interface thread.
+
+This is a trait from the underlying toolkits used by Xwt.
+
+If you want a background thread to run some code on the main loop, you
+use the Application.Invoke (Action action) method. The provided
+"action" method is guaranteed to run on the main loop.
+
diff --git a/packages/Xwt.0.2.40/Xwt.0.2.40.nupkg b/packages/Xwt.0.2.40/Xwt.0.2.40.nupkg
new file mode 100644
index 0000000..f428a4c
--- /dev/null
+++ b/packages/Xwt.0.2.40/Xwt.0.2.40.nupkg
Binary files differ
diff --git a/packages/Xwt.0.2.40/lib/net40/Xwt.dll b/packages/Xwt.0.2.40/lib/net40/Xwt.dll
new file mode 100644
index 0000000..c50a574
--- /dev/null
+++ b/packages/Xwt.0.2.40/lib/net40/Xwt.dll
Binary files differ
diff --git a/packages/Xwt.Gtk.0.2.40/LICENSE.txt b/packages/Xwt.Gtk.0.2.40/LICENSE.txt
new file mode 100644
index 0000000..170a488
--- /dev/null
+++ b/packages/Xwt.Gtk.0.2.40/LICENSE.txt
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014 Xamarin, Inc
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/packages/Xwt.Gtk.0.2.40/README.markdown b/packages/Xwt.Gtk.0.2.40/README.markdown
new file mode 100644
index 0000000..54de416
--- /dev/null
+++ b/packages/Xwt.Gtk.0.2.40/README.markdown
@@ -0,0 +1,221 @@
+This document is an introduction to XWT, a cross-platform UI toolkit
+for creating desktop applications.
+
+If you have any question about XWT or do you want to contribute
+a discussion group for XWT is available here:
+
+http://groups.google.com/group/xwt-list
+
+Introduction
+============
+
+Xwt is a new .NET framework for creating desktop applications that run
+on multiple platforms from the same codebase. Xwt works by exposing
+one unified API across all environments that is mapped to a set of
+native controls on each platform.
+
+This means that Xwt tends to focus on providing controls that will
+work across all platforms. However, that doesn't mean that the
+functionality available is a common denominator of all platforms.
+If a specific feature or widget is not available in the
+native framework of a platform, it will be emulated or implemented
+as a set of native widgets.
+
+Xwt can be used as a standalone framework to power the entire application
+or it can be embedded into an existing host. This allows developers
+to develop their "shell" using native components (for example a Ribbon
+on Windows, toolbars on Linux) and use Xwt for specific bits of the
+application, like dialog boxes or cross platform surfaces.
+
+Xwt works by creating an engine at runtime that will map to the
+underlying platform. These are the engines that are supported on
+each platform:
+
+* Windows: WPF engine, Gtk engine (using Gtk#)
+* MacOS X: Cocoa engine (using Xamarin.Mac) and Gtk engine (using Gtk#)
+* Linux: Gtk engine (using Gtk#)
+
+This means for example that you can write code for Xwt on Windows that
+can be hosted on an existing WPF application (like Visual Studio) or
+an existing Gtk# application (like MonoDevelop). Or on Mac, you can
+host Xwt on an existing Cocoa/Xamarin.Mac application or you can host it
+in our own MonoDevelop IDE.
+
+Getting Started
+---------------
+
+Open the Xwt.sln with MonoDevelop (or VisualStudio on Windows) and
+build the solution. You should end up with the libraries that you
+can use in your project and a couple of sample applications.
+
+Using Xwt in your app
+---------------------
+
+Based on your platform and the backend that you want to use, you need
+to pick the libraries that you want to use in your project.
+
+* Windows+WPF: Xwt.dll + Xwt.WPF.dll (requires WPF)
+* Windows+Gtk: Xwt.dll + Xwt.Gtk.dll (requires Gtk#)
+* Linux+Gtk: Xwt.dll + Xwt.Gtk.dll (requires Gtk#)
+* Mac+Gtk: Xwt.dll + Xwt.Gtk.dll (requires Gtk#)
+* Mac+Cocoa: Xwt.dll + Xwt.XamMac.dll (requires Xamarin.Mac.dll)
+
+Hello World
+-----------
+
+To write your first application, create an empty .NET project in your
+favorite language in MonoDevelop or Visual Studio and reference the
+Xwt.dll library. This is the only library that you need to reference
+at compile time.
+
+This is the simplest Xwt program you can write:
+
+ using System;
+ using Xwt;
+
+ class XwtDemo {
+ [STAThread]
+ static void Main ()
+ {
+ Application.Initialize (ToolkitType.Gtk);
+ var mainWindow = new Window (){
+ Title = "Xwt Demo Application",
+ Width = 500,
+ Height = 400
+ };
+ mainWindow.Show ();
+ Application.Run ();
+ mainWindow.Dispose ();
+ }
+ }
+
+You use the Application.Initialize() method to get the backend
+initialized. In this example we are using the Gtk backend. If you
+want to use another backend, just change the parameter provided
+to the Initialize() method. Also make sure the appropiate backend
+DLL is available in the application directory.
+
+Then we create an instance of the Window class, this class exposes two
+interesting properties, MainMenu which can be used to set the Window's
+main menu and "Content" which is of type "Widget" and allows you to
+add some content to the window.
+
+Finally, the Application.Run method is called to get the UI events
+processing going.
+
+Widget Class Hierarchy
+======================
+
+You will be using widgets to create the contents for your
+application. Xwt.Widget is the abstract base class from which all
+the other components are created.
+
+Some Widgets can contain other widgets, these are container widgets,
+and in Xwt those are Canvas, Paned, HBox, VBox and Table. The first
+two implement a box layout system, while the last one implements a
+Table layout that allows widgets to be attached to different
+anchor-points in a grid.
+
+The layout system uses an auto-sizing system similar to what is
+availble in Gtk and HTML allowing the user interface to grow or shrink
+based on the contents of the childrens on it.
+
+* XwtComponent
+ * Menu
+ * MenuItem
+ * Widget
+ * Box (Container)
+ * HBox (Container)
+ * VBox (Container)
+ * Button
+ * MenuButton
+ * ToggleButton
+ * Calendar
+ * Canvas (Container)
+ * Checkbox
+ * ComboBox
+ * Frame
+ * ImageView
+ * Label
+ * ListView
+ * NoteBook
+ * Paned (Container)
+ * HPaned (Container)
+ * VPaned (Container)
+ * ProgressBar
+ * ScrollView
+ * Separator
+ * VSeparator
+ * HSeparator
+ * Table (Container)
+ * TextEntry
+ * TreeView
+ * WindowFrame
+ * Window
+ * Dialog
+
+For example, the following attaches various labels and data entries to
+a Table:
+
+ t = new Table ();
+ t.Attach (new Label ("One:"), 0, 1, 0, 1);
+ t.Attach (new TextEntry (), 1, 2, 0, 1);
+ t.Attach (new Label ("Two:"), 0, 1, 1, 2);
+ t.Attach (new TextEntry (), 1, 2, 1, 2);
+ t.Attach (new Label ("Three:"), 0, 1, 2, 3);
+ t.Attach (new TextEntry (), 1, 2, 2, 3);
+
+
+The Application Class
+=====================
+
+The Application class is a static class that provides services to run
+your application.
+
+Initialization
+--------------
+
+The Application.Initialize API will instruct Xwt to initialize its
+binding to the native toolkit. You can pass an optional parameter to
+this method that specifies the full type name to load as the backend.
+
+For example, you can force the initialization of the backend to be
+specifically Gtk+ or specifically Xamarin.Mac based on MacOS. This is
+currently done like this:
+
+ Application.Initialize ("Xwt.GtkBackend.GtkEngine, Xwt.Gtk, Version=1.0.0.0");
+
+or:
+
+ Application.Initialize ("Xwt.Mac.MacEngine, Xwt.XamMac, Version=1.0.0.0");
+
+As you saw from the Hello World sample, toplevel windows are created
+by creating an instance of the "Xwt.Window" class. This class
+exposes a couple of properties that you can use to spice it up. The
+MainMenu property is used to control the contents of the application
+menus while the "Content" property is used to hold a Widget.
+
+Timers
+------
+
+The Application.TimeoutInvoke method takes a timespan and a Func<bool>
+action method and invokes that method in the main user interface
+loop.
+
+If the provided function returns true, then the timer is restarted,
+otherwise the timer ends.
+
+Background Threads
+------------------
+
+It is very common to perform tasks in the background and for those
+tasks in the background to later update the user interface. The Xwt
+API is not thread safe, which means that calls to the Xwt API must
+only be done from the main user interface thread.
+
+This is a trait from the underlying toolkits used by Xwt.
+
+If you want a background thread to run some code on the main loop, you
+use the Application.Invoke (Action action) method. The provided
+"action" method is guaranteed to run on the main loop.
+
diff --git a/packages/Xwt.Gtk.0.2.40/Xwt.Gtk.0.2.40.nupkg b/packages/Xwt.Gtk.0.2.40/Xwt.Gtk.0.2.40.nupkg
new file mode 100644
index 0000000..82046f5
--- /dev/null
+++ b/packages/Xwt.Gtk.0.2.40/Xwt.Gtk.0.2.40.nupkg
Binary files differ
diff --git a/packages/Xwt.Gtk.0.2.40/build/Xwt.Gtk.dll.config b/packages/Xwt.Gtk.0.2.40/build/Xwt.Gtk.dll.config
new file mode 100644
index 0000000..f1630bb
--- /dev/null
+++ b/packages/Xwt.Gtk.0.2.40/build/Xwt.Gtk.dll.config
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+ <dllmap os="!windows,osx" dll="libglib-2.0-0.dll" target="libglib-2.0.so.0"/>
+ <dllmap os="!windows,osx" dll="libgobject-2.0-0.dll" target="libgobject-2.0.so.0"/>
+ <dllmap os="!windows,osx" dll="libatk-1.0-0.dll" target="libatk-1.0.so.0"/>
+ <dllmap os="!windows,osx" dll="libgtk-win32-2.0-0.dll" target="libgtk-x11-2.0.so.0"/>
+ <dllmap os="!windows,osx" dll="libgdk-win32-2.0-0.dll" target="libgdk-x11-2.0.so.0"/>
+ <dllmap os="!windows,osx" dll="libpango-1.0-0.dll" target="libpango-1.0.so.0"/>
+ <dllmap os="!windows,osx" dll="libpangocairo-1.0-0.dll" target="libpangocairo-1.0.so.0"/>
+ <dllmap os="!windows,osx" dll="libwebkitgtk-1.0-0.dll" target="libwebkitgtk-1.0.so.0"/>
+ <dllmap os="!windows,osx" dll="fontconfig" target="libfontconfig.so.1"/>
+
+ <dllmap os="osx" dll="libglib-2.0-0.dll" target="libglib-2.0.0.dylib"/>
+ <dllmap os="osx" dll="libgobject-2.0-0.dll" target="libgobject-2.0.0.dylib"/>
+ <dllmap os="osx" dll="libatk-1.0-0.dll" target="libatk-1.0.0.dylib"/>
+ <dllmap os="osx" dll="libgtk-win32-2.0-0.dll" target="libgtk-quartz-2.0.0.dylib"/>
+ <dllmap os="osx" dll="libgdk-win32-2.0-0.dll" target="libgdk-quartz-2.0.0.dylib"/>
+ <dllmap os="osx" dll="libpango-1.0-0.dll" target="libpango-1.0.0.dylib"/>
+ <dllmap os="osx" dll="libpangocairo-1.0-0.dll" target="libpangocairo-1.0.0.dylib"/>
+ <dllmap os="osx" dll="libwebkitgtk-1.0-0.dll" target="libwebkitgtk-1.0.0.dylib"/>
+ <dllmap os="osx" dll="fontconfig" target="libfontconfig.1.dylib"/>
+</configuration>
diff --git a/packages/Xwt.Gtk.0.2.40/build/Xwt.Gtk.props b/packages/Xwt.Gtk.0.2.40/build/Xwt.Gtk.props
new file mode 100644
index 0000000..f66dc3a
--- /dev/null
+++ b/packages/Xwt.Gtk.0.2.40/build/Xwt.Gtk.props
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <None Include="$(MSBuildThisFileDirectory)Xwt.Gtk.dll.config">
+ <Link>Xwt.Gtk.dll.config</Link>
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+ <Visible>False</Visible>
+ </None>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/packages/Xwt.Gtk.0.2.40/lib/net40/Xwt.Gtk.dll b/packages/Xwt.Gtk.0.2.40/lib/net40/Xwt.Gtk.dll
new file mode 100644
index 0000000..b80892c
--- /dev/null
+++ b/packages/Xwt.Gtk.0.2.40/lib/net40/Xwt.Gtk.dll
Binary files differ