static void Main(string[] args) { String thisprocessname = Process.GetCurrentProcess().ProcessName; if (Process.GetProcesses().Count(p => p.ProcessName == thisprocessname) > 1) { return; } SQLiteConnection m_dbConnection; m_dbConnection = new SQLiteConnection("Data Source=SecConvDB.sqlite; Version=3;"); m_dbConnection.Open(); //create DataBase file if not exists DataBase.CreateDataBase(m_dbConnection); Communique.AddDelegateToDictionary(); m_dbConnection.Close(); //List<string> lista = new List<string>(); //lista.Add("Monika"); //lista.Add("Robert"); //lista.Add("2017-12-06-23:00:00"); //lista.Add("1:30:22"); //Communique.DelFriend(lista); //Communique.CallState(lista);*/ //Communique.CallState(lista); security.CreatePublicKey(); AsynchronousSocketListener.StartListening(); }
public static void ReadCallback(IAsyncResult ar) { String content = String.Empty; // Retrieve the state object and the handler socket // from the asynchronous state object. StateObject state = (StateObject)ar.AsyncState; Socket handler = state.workSocket; byte[] sessionKey = null; int bytesRead = 0; //SESSIONKEY_RETURN: // Read data from the client socket. bytesRead = handler.EndReceive(ar); if (bytesRead > 0) { // There might be more data, so store the data received so far. state.sb.Append(Encoding.ASCII.GetString( state.buffer, 0, bytesRead)); // Check for end-of-file tag. If it is not there, read // more data. content = state.sb.ToString(); if (content.IndexOf("<EOF>") > -1) { // All the data has been read from the // client. Display it on the console. Console.WriteLine("Read {0} bytes from socket. \nData : {1}", content.Length, content); string messageBits = Utilities.getBinaryMessage(content); //take 8 bits to recognize the communique int bits8 = Convert.ToInt32(messageBits.Substring(0, 8), 2);//decimal value if (bits8 == 17) { sessionKey = Program.security.SetSessionKey(Convert.FromBase64String(content.Substring(2, content.Length - 8))); state.sessionKey = sessionKey; Send(handler, (char)17 + " " + Convert.ToBase64String(Program.security.GetOwnerPublicKey().ToByteArray()) + " <EOF>"); //goto SESSIONKEY_RETURN; state.buffer = new byte[1024]; state.sb = new StringBuilder(); handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReadCallback), state); } else { content = Communique.ChooseCommunique(content, state.sessionKey, handler); // Echo the data back to the client. if (bits8 != 2 && bits8 != 11) { Send(handler, content); } if (bits8 == 1 && content == ((char)5).ToString() + " <EOF>") //logIn { string userAddressIP = ((IPEndPoint)handler.RemoteEndPoint).Address.ToString(); long userID = Communique.getUserIDHavingAdressIP(userAddressIP); if (userID == -1) { Send(handler, Communique.Fail()); } { Send(handler, Communique.LogIP(userID)); //data about friend Thread.Sleep(250); //miliseconds Send(handler, Communique.History(userID)); //userID history } } handler.Shutdown(SocketShutdown.Both); handler.Close(); if (bits8 == 0) { } } } else { // Not all data received. Get more. handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReadCallback), state); } } }