//#define LOCAL_SERVER
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using SzNPProjects;
namespace MSGer.tk
{
static class Program
{
///
/// The main entry point for the application.
///
public static MainForm MainF;
//public static ThreadSetVarTarget ThreadTarget;
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Console.WriteLine("Starting MSGer.tk...");
//ThreadTarget = new ThreadSetVarTarget();
/*ThreadSetVar.RunnerForm = new Form();
ThreadSetVar.RunnerForm.WindowState = FormWindowState.Minimized;
ThreadSetVar.RunnerForm.ShowInTaskbar = false;
ThreadSetVar.RunnerForm.Show();
ThreadSetVar.RunnerForm.Hide();*/
try
{
MainF = new MainForm();
Application.Run(MainF);
}
catch(FileNotFoundException e)
{
MessageBox.Show("Egy fájl nem található.\nA fájl neve:\n" + e.FileName+"\nEnnél a műveletnél: "+e.TargetSite);
}
catch(Exception e)
{
ErrorHandling.FormError(MainF, e);
}
}
private static readonly DateTime Epoch = new DateTime(1970, 1, 1, 0, 0, 0,
DateTimeKind.Utc);
public static DateTime UnixTimeToDateTime(string text)
{
double seconds = double.Parse(text, CultureInfo.InvariantCulture);
//return Epoch.AddSeconds(seconds);
//2014.04.25.
DateTime time = Epoch.AddSeconds(seconds);
time = DateTime.SpecifyKind(time, DateTimeKind.Utc);
return time.ToLocalTime();
}
public static void Exit()
{ //2014.04.12.
if (MainF != null)
{
MainF.Hide();
MainF.toolStripMenuItem4.Enabled = false; //2014.04.12.
MainF.toolStripMenuItem8.Enabled = false; //2014.04.12.
if (CurrentUser.UserID != 0) //2014.04.18.
{
MainF.SetOnlineState(null, null); //2014.04.12.)
if (MainF.WindowState == FormWindowState.Maximized) //2014.04.18.
Settings.Default.windowstate = 1;
else if (MainF.WindowState == FormWindowState.Minimized)
Settings.Default.windowstate = 2;
else if (MainF.WindowState == FormWindowState.Normal)
Settings.Default.windowstate = 3;
Settings.Default.Save();
}
}
CurrentUser.UserID = 0;
Application.Exit();
Application.ExitThread();
MessageBox.Show("Hiba: Nem sikerült leállítani a programot.");
}
}
static class Networking
{
private static int Tries = 0;
public static string SendRequest(string action, string data, int remnum, bool loggedin) //2014.02.18.
{
//HttpWebRequest httpWReq =
// (HttpWebRequest)WebRequest.Create("http://msger.tk/client.php");
#if LOCAL_SERVER //2014.07.07. 22:00
HttpWebRequest httpWReq =
(HttpWebRequest)WebRequest.Create("http://localhost/ChatWithWords/client.php");
#else
HttpWebRequest httpWReq =
(HttpWebRequest)WebRequest.Create("http://msger.url.ph/client.php");
#endif
ASCIIEncoding encoding = new ASCIIEncoding();
string postData = "action=" + action;
if (loggedin) //2014.03.14.
postData += "&uid=" + CurrentUser.UserID;
postData += "&key=cas1fe4a6feFEFEFE1616CE8099VFE1444cdasf48c1ase5dg";
if (loggedin) //2014.03.14.
postData += "&code=" + LoginForm.UserCode; //2014.02.13.
postData += "&data=" + Uri.EscapeUriString(data); //2014.02.13.
byte[] datax = encoding.GetBytes(postData);
httpWReq.Method = "POST";
httpWReq.ContentType = "application/x-www-form-urlencoded";
httpWReq.ContentLength = datax.Length;
using (Stream stream = httpWReq.GetRequestStream())
{
stream.Write(datax, 0, datax.Length);
}
//Lista betöltése folyamatban...
HttpWebResponse response;
try
{
response = (HttpWebResponse)httpWReq.GetResponse();
}
catch (Exception e)
{
//MessageBox.Show("Hiba az ismerőslista frissítésekor:\n", e.Message);
if (Tries > 10)
{
MessageBox.Show(Language.GetCuurentLanguage().Strings["error_network"] + ":\n" + e.Message + "\n\n" + Language.GetCuurentLanguage().Strings["error_network2"], Language.GetCuurentLanguage().Strings["error"]); //2014.04.25.
Tries = 0;
}
Tries++;
return SendRequest(action, data, remnum, loggedin); //Újrapróbálkozik
}
string responseString;
responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
return responseString;
}
}
/*class ThreadSetVarTarget
{
public object SetVarTarget;
public object SetVarValue;
public ThreadSetVarTarget()
{
}
}*/
#if THREAD_SET_VAR
class ThreadSetVar
{ //2014.04.11.
private delegate void SetVarDelegate();
//private ThreadSetVarTarget Target;
internal object SetVarTarget;
internal object SetVarValue;
internal string Mode;
/*public ThreadSetVar(Control variable, object value, Control sender, ThreadSetVarTarget target)
{
if (value is String)
{
target.SetVarTarget = variable;
target.SetVarValue = (string)value;
Target = target;
sender.Invoke(new SetVarDelegate(IntThreadSetVar));
}
}*//*
public ThreadSetVar(object variable, object value, Control sender, string mode)
{
if (sender.IsDisposed)
return;
//Target = target;
SetVarTarget = variable;
SetVarValue = value;
Mode = mode;
sender.Invoke(new SetVarDelegate(IntThreadSetVar));
}
private void IntThreadSetVar()
{ //Belső meghívás
switch (Mode)
{
case "control":
if (SetVarValue is String && SetVarTarget.GetType().IsSubclassOf(typeof(Control)))
{
((Control)SetVarTarget).Text = (string)SetVarValue;
}
break;
}*/
/*if (Target.SetVarTarget is RichListView && Target.SetVarValue is RichListViewItem)
{
var item = new RichListViewItem(((RichListView)Target.SetVarTarget).Columns.Length);
item.SubItems = ((RichListViewItem)Target.SetVarValue).SubItems;
((RichListView)Target.SetVarTarget).Items.Add(item);
}
if (Target.SetVarTarget is RichListView && Target.SetVarValue is String)
{
if ((String)Target.SetVarValue == "clear")
{
((RichListView)Target.SetVarTarget).Items.Clear();
}
}*/
public const int
UpdateMode_AddRichListViewItem = 0,
UpdateMode_BindingListClear = 1,
UpdateMode_SetText = 2;
public delegate void ObjectDelegate(object target, object value, int method);
public ObjectDelegate Del;
//public static Form RunnerForm;
public ThreadSetVar(object target, object value, int method)
{
/*RunnerForm = new Form();
RunnerForm.WindowState = FormWindowState.Minimized;
RunnerForm.ShowInTaskbar = false;
RunnerForm.Show();
RunnerForm.Hide();*/
// first thing we do is create a delegate pointing to update method
Del = new ObjectDelegate(UpdateObject);
// then simply enough, we invoke it
Del.Invoke(target, value, method);
// if we wanted to create a thread to use it, we'd use a
// params threadstart and pass the delegate as an object
//Thread th = new Thread(new ParameterizedThreadStart(WorkThread));
//th.Start(del);
}
/*private void WorkThread(object obj)
{
// we would then unbox the obj into the delegate
ObjectDelegate del = (ObjectDelegate)obj;
// and invoke it like before
del.Invoke("Hello from WorkThread!");
}*/
private void UpdateObject(object target, object value, int method)
{
// do we need to switch threads?
if (Program.MainF.InvokeRequired)
{
// we then create the delegate again
// if you've made it global then you won't need to do this
//ObjectDelegate method = new ObjectDelegate(UpdateTextBox);
// we then simply invoke it and return
Program.MainF.Invoke(Del, target, value, method);
return;
}
// ok so now we're here, this means we're able to update the control
// so we unbox the object into a string
//string text = (string)obj;
// and update
//((Control)obj).Text += text + "\r\n"; //-.lo
switch(method)
{
case UpdateMode_AddRichListViewItem:
var tmp = new Control[((Object[])value).Length];
for (int i = 0; i < ((Object[])value).Length; i++)
{
tmp[i] = (Control)(((Object[])value)[i]); //Egy kevés zárójelezés
}
var item = new RichListViewItem(((Object[])value).Length);
item.SubItems = tmp;
((BindingList)target).Add(item);
//((BindingList)target).Add((RichListViewItem)value);
break;
case UpdateMode_BindingListClear:
((BindingList)target).Clear();
break;
case UpdateMode_SetText:
((Control)target).Text = (string)value;
break;
}
}
}
#endif
}