예제 #1
0
        public static void L7P1_Calculator()
        {
            int    x         = int.Parse(Console.ReadLine());
            int    y         = int.Parse(Console.ReadLine());
            string str       = Console.ReadLine();
            del    operation = null;

            switch (str)
            {
            case "plus":
            {
                operation = (int x1, int y2) => x + y;
                break;
            }

            case "minus":
            {
                operation = Minus;
                break;
            }
            }
            var result = operation?.Invoke(x, y);

            Console.WriteLine(result);
        }
예제 #2
0
        void test_lamba()
        {
            del myDelegate = x => x * x;
            int i          = 0;
            int j          = myDelegate(5); //j = 25

            myDelegate = (int x) => {
                //公用外部的变量
                i = 5;
                return(x * x);
            };
            j = myDelegate(5);
            Console.WriteLine("i:" + i.ToString() + "j:" + j.ToString());
            TestDelegate xelegate = (string n) => {
                Console.WriteLine(n);
            };

            xelegate("rr");
            Action act = () =>
            {
                Console.WriteLine("aaa");
            };

            act();
        }
예제 #3
0
        public FrmPrincipal()
        {
            InitializeComponent();
            MyDlg = new del(Display);
            //Load haarcascades for face detection
            face = new HaarCascade("haarcascade_frontalface_default.xml");
            //eye = new HaarCascade("haarcascade_eye.xml");
            try
            {
                //Load of previus trainned faces and labels for each image
                string   Labelsinfo = File.ReadAllText(Application.StartupPath + "/TrainedFaces/TrainedLabels.txt");
                string[] Labels     = Labelsinfo.Split('%');
                NumLabels = Convert.ToInt16(Labels[0]);
                ContTrain = NumLabels;
                string LoadFaces;

                for (int tf = 1; tf < NumLabels + 1; tf++)
                {
                    LoadFaces = "face" + tf + ".bmp";
                    trainingImages.Add(new Image <Gray, byte>(Application.StartupPath + "/TrainedFaces/" + LoadFaces));
                    labels.Add(Labels[tf]);
                }
            }
            catch (Exception e)
            {
                //MessageBox.Show(e.ToString());
                MessageBox.Show("Nothing in binary database, please add at least a face(Simply train the prototype with the Add Face Button).", "Triained faces load", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
        }
예제 #4
0
        static void Main()
        {
            del d = a => a + 1;
            int k = d(3);

            Console.WriteLine("k = " + k);
        }
예제 #5
0
        public int MyLambdaOne(int value)
        {
            //(input-parameters) => expression-or-statement-block
            del myDelegate = x => x * x;

            return(myDelegate(value));
        }
예제 #6
0
        public void zad8()
        {
            del d1 = new del(silnia_iteracyjnie);
            del d2 = new del(silnia_rekurencja);
            del d3 = new del(fibbonacci_iteracyjnie);
            del d4 = new del(fibonacci_rekurencja);

            IAsyncResult ar1     = d1.BeginInvoke(20, null, null);
            long         result1 = d1.EndInvoke(ar1);

            Console.WriteLine("Silnia obliczona iteracyjnie: " + result1);

            IAsyncResult ar2     = d2.BeginInvoke(10, null, null);
            long         result2 = d2.EndInvoke(ar2);

            Console.WriteLine("Silnia obliczona rekurencyjnie: " + result2);

            IAsyncResult ar3     = d3.BeginInvoke(10, null, null);
            long         result3 = d3.EndInvoke(ar3);

            Console.WriteLine("Fibonacci obliczony iteracyjnie: " + result3);

            IAsyncResult ar4     = d4.BeginInvoke(10, null, null);
            long         result4 = d4.EndInvoke(ar4);

            Console.WriteLine("Fibonacci obliczony rekurencyjnie: " + result4);

            Console.ReadKey();
        }
예제 #7
0
    static void Main()
    {
        del o = new del(show);

        o(55);
        Console.ReadLine();
    }
예제 #8
0
파일: Program.cs 프로젝트: MadMaxD/integral
        public static double Integral(del f, double a, double b, int n, char c)
        {
            double x;
            double s = 0;
            double h;
            if (c == 'p')
            {
                h = (b - a) / n;
                for (double i = 1; i <= n; i++)
                {
                    x = a + h*(i - 0.5);
                    s += f(x);
                }

                s *= h;
            }
            else if (c == 't')
            {
                s = (f(a) + f(b)) / 2;
                h = (b - a) / n;
                for (int i = 1; i < n; i++)
                {
                    x = a + i * h;
                    s += f(x);
                }
                s *= h;
            }
            else
            {
                s = -1;
            }
            return s;
        }
예제 #9
0
        static void Main(string[] args)
        {
            Console.WriteLine("Enter First Number:");
            int value1 = Convert.ToInt32(Console.ReadLine());

            Console.WriteLine("Enter Second Number:");
            int value2 = Convert.ToInt32(Console.ReadLine());

            Class1 obj = new Class1();

            del dobj = new del(obj.Add);

            dobj += new del(obj.Sub);

            dobj += new del(obj.Mul);

            dobj += new del(obj.Div);

            Console.WriteLine("Division is:{0}", dobj(value1, value2));
            dobj -= new del(obj.Div);

            Console.WriteLine("Multiplication is:{0}", dobj(value1, value2));
            dobj -= new del(obj.Mul);

            Console.WriteLine("Substration is:{0}", dobj(value1, value2));
            dobj -= new del(obj.Sub);

            Console.WriteLine("Addition is:{0}", dobj(value1, value2));
            dobj -= new del(obj.Add);
        }
        public static void LambdaHello()
        {
            del myDelegate = x => x * x;
            int j          = myDelegate(5); //j = 25

            Console.WriteLine("Value of Num: {0}", j);
        }
예제 #11
0
        static void Main(string[] args)
        {
            //Use to search a list/collection
            List <int> Lst = new List <int>();

            Lst.Add(100);
            Lst.Add(200);
            Lst.Add(300);

            int Value = Lst.Find(m => m.Equals(100));

            //int value = Lst.Find()

            Console.WriteLine(Value);
            Console.ReadLine();

            //Find series of number
            List <int> numbers = new List <int> {
                1, 2, 3, 4, 5, 6, 7
            };
            var evens = numbers.FindAll(n => n % 2 == 0);

            foreach (int a in evens)
            {
                Console.WriteLine(a);
            }
            Console.ReadLine();

            del MyDelegate = X => X * X;

            Console.WriteLine("Result is := " + MyDelegate(5));
            Console.ReadLine();
        }
예제 #12
0
        // Gets a single movie based off an id number
        //
        // id - UrlParameter sent
        //
        // returns a Movie object
        public static Movie ById(int id)
        {
            del filter = (item) => int.Parse(item[0]) == id;
            var result = Database.AllWithFilter(filter)[0];

            return(CreateMovie(result));
        }
예제 #13
0
        public static void L7P1_Calculator()
        {
            Console.WriteLine("enter x");
            int x = int.Parse(Console.ReadLine());

            Console.WriteLine("enter y");
            int    y         = int.Parse(Console.ReadLine());
            string str       = Console.ReadLine();
            del    operation = null;

            switch (str)
            {
            case "plus":
            {
                operation = delegate(int x1, int y1)
                {
                    return(x + y);
                };
                break;
            }

            case "minus":
            {
                operation = Minus;
                break;
            }
            }
            var result = operation?.Invoke(x, y);

            Console.WriteLine(result);
        }
예제 #14
0
파일: main.cs 프로젝트: zxch3n/Leetcode
 public int locate(del indexer, int l, int r, int target)
 {
     while (l != r)
     {
         int m     = (l + r) / 2;
         int value = indexer(m);
         if (value == target)
         {
             return(m);
         }
         if (value < target)
         {
             if (l == m)
             {
                 return(l);
             }
             l = m;
         }
         else
         {
             r = m;
         }
     }
     return(l);
 }
예제 #15
0
        static void Main(string[] args)
        {
            int a = int.Parse(Console.ReadLine());
            del d = new del(area);

            Console.WriteLine(d(a));
        }
예제 #16
0
        static void Main(string[] args)
        {
            del d = x => Console.WriteLine(x);

            d.Invoke(Book.ToString());
            Console.ReadLine();
        }
예제 #17
0
        static void Main(string[] args)
        {
            //Generic types
            GenericList <int>    list1 = new GenericList <int>();
            GenericList <string> list2 = new GenericList <string>();
            GenericList <bool>   list3 = new GenericList <bool>();

            list1.Evaluate(1);
            list2.Evaluate("Hello, as you can see, I'm a string.");
            list3.Evaluate(true);

            //The lambda expression x => x * x specifies a parameter that’s named x and returns the value of x squared.
            //A lambda expression with an expression on the right side of the => operator is called an expression lambda. Expression lambdas are used extensively in the construction of Expression Trees (C# and Visual Basic).
            //An expression lambda returns the result of the expression and takes the following basic form: (input parameters) => expression

            del myDelegate = x => x * x;

            twodel mySecondDelegate = y => y * y;

            int c = mySecondDelegate(5);

            int j = myDelegate(6);

            Console.WriteLine("c = " + c);
            Console.WriteLine("j = " + j);

            Console.ReadLine();
        }
예제 #18
0
        private void Init(int slot)
        {
            this.Load  += new EventHandler(this.Notification_Load);
            this.Shown += new EventHandler(this.Notification_Shown);

            int offset = 5; /* space between two consecutive notifications */
            int y      = DISPLAY_START_POSITION_Y + slot * (this.Size.Height + offset);

            Screen screen;

            if (Program.MainWindow.InvokeRequired)
            {
                del GetScreen = () => Screen.FromControl(Program.MainWindow);
                screen = (Screen)Program.MainWindow.Invoke(GetScreen);
            }
            else
            {
                screen = Screen.FromControl(Program.MainWindow);
            }

            screen = screen ?? Screen.PrimaryScreen;

            this.Location = new Point(screen.Bounds.Right - this.Width, y);

            fadeTimer = new FadeTimer1(this, 3500, 1500);
        }
     static void Main(string[] args)
     {
         del d = new del(add);
         d += sub;
 
         d.Invoke();
     }
예제 #20
0
        public void TestLambda()
        {
            del myDelegate = x => x * x;
            int j          = myDelegate(5);

            Assert.AreEqual(j, 25);
        }
예제 #21
0
        /// <summary>
        /// Handles the Selecting event of the lds_sectoresseleccionados control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="LinqDataSourceSelectEventArgs"/> instance containing the event data.</param>
        protected void lds_sectoresseleccionados_Selecting(object sender, LinqDataSourceSelectEventArgs e)
        {
            del delegado = (string x, string y, int z) =>
            {
                string valor = string.Empty;

                if (z == 1)
                {
                    if (string.IsNullOrEmpty(x))
                    {
                        valor += " (Todos los sectores) ";
                    }
                    else
                    {
                        valor += x;
                    }
                }
                return(valor);
            };

            var secortes = (from k in consultas.Db.ConvocatoriaCriterioSectors
                            join s in consultas.Db.Sector on k.CodSector equals s.Id_Sector into r1
                            from c1 in r1.DefaultIfEmpty()
                            orderby c1.NomSector
                            where k.CodCriterio == codCriterio
                            select new
            {
                Id_Sector = c1.Id_Sector.ToString(),
                nomSector = delegado(c1.NomSector, "", 1)
            });

            e.Result = secortes.ToList();
        }
예제 #22
0
        public int MyLamdaOne(int val)
        {
            //input parameter =>expresstion or statment block
            del myDelegate = (x) => x * x;

            return(myDelegate(val));
        }
        public static void ThisMain()
        {
            del d = x => Console.WriteLine(x);

            d.Invoke(Book.ToString());
            Console.ReadLine();
        }
예제 #24
0
        private BDbMethods(IntPtr pdb, BDbOffsetOf offsetOf, BerkeleyDbType dbType)
        {
            _dbType = dbType;
            _offsetOf = offsetOf;

            foreach (BDbOffsetOfItem offsetOfItem in offsetOf.Db)
            {
                IntPtr funcptr = Marshal.ReadIntPtr(pdb + offsetOfItem.Offset);
                switch (offsetOfItem.Name)
                {
                    case "close":
                        _close = (close)Marshal.GetDelegateForFunctionPointer(funcptr, typeof(close));
                        break;
                    case "cursor":
                        _cursor = (cursor)Marshal.GetDelegateForFunctionPointer(funcptr, typeof(cursor));
                        break;
                    case "del":
                        _del = (del)Marshal.GetDelegateForFunctionPointer(funcptr, typeof(del));
                        break;
                    case "get_pagesize":
                        _get_pagesize = (get_pagesize)Marshal.GetDelegateForFunctionPointer(funcptr, typeof(get_pagesize));
                        break;
                    case "open":
                        _open = (open)Marshal.GetDelegateForFunctionPointer(funcptr, typeof(open));
                        break;
                    case "put":
                        _put = (put)Marshal.GetDelegateForFunctionPointer(funcptr, typeof(put));
                        break;
                    case "set_flags":
                        _set_flags = (set_flags)Marshal.GetDelegateForFunctionPointer(funcptr, typeof(set_flags));
                        break;
                }
            }
        }
예제 #25
0
        public void Test_LambdaExpression()
        {
            del myDelegate = x => x * x;
            int j          = myDelegate(5);

            Assert.AreEqual(j, 25);
        }
예제 #26
0
    void Start()
    {
        // delegate examples
        // defining delegates and executing them
        del sumValuesDelegate = sumValues;

        Debug.Log("sumValuesDelegate(10, 20) " + sumValuesDelegate(10, 20));
        Debug.Log("sumValuesDelegate(100, 200) " + sumValuesDelegate(100, 200));
        Debug.Log("sumValuesDelegate(100, -90) " + sumValuesDelegate(100, -90));

        del substractValuesDelegate = substractValues;

        Debug.Log("substractValuesDelegate(20, 10) " + substractValuesDelegate(20, 10));
        Debug.Log("substractValuesDelegate(200, 150) " + substractValuesDelegate(200, 150));

        // call back examples
        messagesDel messages = displayMessages;

        FindGameObject("Video5", displayMessages);

        // lambda examples

        // Lambda expressions are not limited to LINQ queries.
        // You can use them anywhere a delegate value is expected, that is,
        // wherever an anonymous method can be used.
        messagesDel messagesWithLambda = (x) =>
        {
            x = x + " " + " in hierarchy...";
            Debug.Log(x);
        };

        FindGameObject("Video5", messagesWithLambda);
        Debug.Log("FindGameObjectWithLambda(Video5) : " + FindGameObjectWithLambda("Video5"));
        Debug.Log("Property FullName: " + FullName);

        // linq examples and lambdas
        List <Player> players = new List <Player>
        {
            new Player("John", "Doe", 20, "*****@*****.**"),
            new Player("Bruny", "Toner", 20, "*****@*****.**"),
            new Player("Steve", "Doe", 30, "*****@*****.**"),
            new Player("Jason", "Doe", 40, "*****@*****.**"),
            new Player("Luis", "Toner", 50, "*****@*****.**"),
            new Player("Henry", "Doe", 60, "*****@*****.**"),
        };

        // linq
        List <Player> playersWithTheAgeOfTwenty      = players.Where(p => p.Age == 20).ToList();
        int           playersWithTheAgeOfTwentyCount = players.Count(p => p.Age == 20);

        Debug.Log("playersWithTheAgeOfTwentyCount: " + playersWithTheAgeOfTwentyCount);

        Player playerWithAgeOfTwenty = players.FirstOrDefault(p => p.Age == 20);

        Debug.Log("playerWithAgeOfTwenty: " + playerWithAgeOfTwenty.FirstName);

        Player playerWithAgeOfTwentyLast = players.LastOrDefault(p => p.Age == 20);

        Debug.Log("playerWithAgeOfTwenty: " + playerWithAgeOfTwentyLast.FirstName);
    }
예제 #27
0
        public int MyLambdaOne(int val)
        {
            //(input -parameters) => expression or statement block
            del myDelegate = (x) => x * x;

            return(myDelegate(val));
        }
예제 #28
0
        static void Main(string[] args)
        {
            del  _del1 = List.FindNumOfSymbs2;
            List lst   = new List("HHHEerwerHET");
            del  _del2 = lst.FindNumOfSymbs1;

            res1 = _del1();
            res2 = _del2();
            message m = Message1;

            Console.WriteLine("result of delegates:" + res2);
            if (res1 != 0)
            {
                m = new message(Message2);
                m();
            }
            if (res2 != 0)
            {
                m = new message(Message1);
                m();
            }
            MathOperations math = new MathOperations();

            math.Notify += DisplayMessage;
            math.Add(2, -2);
            math.Divide(0, 3);

            Console.ReadKey();
        }
예제 #29
0
    public static void Main()
    {
        AnotherMain();

        Func <int, int> g = x => x + 3;
        int             p = g(7);

        Console.WriteLine("sample 1 : " + p);

        del myDelegate = x => x * x;
        int j          = myDelegate(5);

        Console.WriteLine("sample 2 : " + p);

        Func <int> f = () => 20;

        Console.WriteLine("sample 3 : " + f());

        Func <int> f1 = () => Cal();

        Console.WriteLine("sample 4 : " + f1());

        Action <int> ff = x => { Cal(x); };

        ff(3);

        Action <string> myDel = n =>
        {
            string s = n + " " + "World";
            Console.WriteLine("sample 6 : " + s);
        };

        myDel("Hello");
    }
예제 #30
0
        static void Main(string[] args)
        {
            del <Int16>  delegem  = delegate(Int16 k) { return((short)(k + k)); };
            del <string> delegem2 = delegate(string k) { return(k + k); };

            Console.WriteLine("Hangi tip ile değer gireceksiniz...\n 1- Sayı \n 2- Metin");
            int sorgu = Convert.ToInt32(Console.ReadLine());

            Console.WriteLine("Bir değer giriniz...");
            switch (sorgu)
            {
            case 1:
                Console.WriteLine(delegem((Convert.ToInt16(Console.ReadLine()))));
                break;

            case 2:

                Console.WriteLine(delegem2((Console.ReadLine())));
                break;

            default:
                Console.WriteLine("Yanlış bir değer girdiniz...!");

                break;
            }
            Console.ReadLine();
        }
예제 #31
0
        static void Main(string[] args)
        {
            del myDelegate = x => x * x;
            int j          = myDelegate(5);

            Console.WriteLine(j);
        }
예제 #32
0
        private BDbcMethods(IntPtr pdbc, BDbOffsetOf offsetOf, BerkeleyDbType dbType)
        {
            _offsetOf = offsetOf;
            _dbType = dbType;

            foreach (BDbOffsetOfItem offsetOfItem in offsetOf.Dbc)
            {
                IntPtr funcptr = Marshal.ReadIntPtr(pdbc + offsetOfItem.Offset);
                switch (offsetOfItem.Name)
                {
                    case "close":
                        _close = (close)Marshal.GetDelegateForFunctionPointer(funcptr, typeof(close));
                        break;
                    case "del":
                        _del = (del)Marshal.GetDelegateForFunctionPointer(funcptr, typeof(del));
                        break;
                    case "get":
                        _get = (get)Marshal.GetDelegateForFunctionPointer(funcptr, typeof(get));
                        break;
                    case "put":
                        _put = (put)Marshal.GetDelegateForFunctionPointer(funcptr, typeof(put));
                        break;
                }
            }
        }
예제 #33
0
        public static void Main(string[] args)
        {
            del    str1 = new del(sample.DelegateSample);
            string str  = str1("Welcome,,friends,,to,,TechBeamers");

            Console.WriteLine(str);
        }
예제 #34
0
 public Lonesystem()
 {
     InitializeComponent();
     refreshDel = FillLists;
     checkFileThread = new Thread(CheckFile);
     checkFileThread.IsBackground = true;
     checkFileThread.Start();
 }
예제 #35
0
        public CountDown(int hours, int minutes, int seconds, del callBack)
        {
            this.hours = hours;
            this.minutes = minutes;
            this.seconds = seconds;
            this.SetText();

            this.callBack = callBack;

            this.timer = new Timer();
            this.timer.Interval = 1000;
            this.timer.Tick += new EventHandler(TimerTick);
        }
예제 #36
0
 static double funk(del Fotx, double a, double b, double E)
 {
     double f = 0, g = 0;
     {
         double x = a, d = 0.1;
         while (Math.Abs(d) > E / 4)
         {
             if (x > b) { break; }
             g = Fotx(x);
             f = Fotx(x + d);
             if (g > f) { x = x + d; d = -d / 4; x = x + d; }
             else { x = x + d; }
         }
     }
     return f;
 }
예제 #37
0
파일: Face.cs 프로젝트: raftelti/flamewars
 public Face(string spriteName, del verify, int priority)
 {
     this.spriteName = spriteName;
     this.verify = verify;
     this.priority = priority;
 }
예제 #38
0
        /// <summary>
        /// Форма для вывода задачи на экран с повтором выполнения
        /// </summary>
        /// <param name="ChoosedFunc">Указатель на выбранный пользователем метод</param>
        /// <param name="TitleFunc">Название выбранной задачи</param>
        static void Form(del ChoosedFunc,string TitleFunc)
        {
            Console.WriteLine("---------------------------------------------------------");
            Console.WriteLine(TitleFunc);
            while (true)
            {
                ChoosedFunc();//Переданный метод
                Console.WriteLine("\n");
                Console.WriteLine(@"Для повторения решения задачи нажмите ""ПРОБЕЛ""
Для выхода в меню нажмите любую другую клавишу");
                Console.WriteLine("---------------------------------------------------------");

                //Ожидание нажатся какой-либо клавиши
                keyState = Console.ReadKey();

                //Возрат каретки для эстетичности визуализации данных на экране
                Console.WriteLine("\r");
                
                //Условия для выхода из цикла
                if (keyState.Key != ConsoleKey.Spacebar)
                {
                    return;
                }
            }
        }
예제 #39
0
    static void Main(string[] args)
    {
        del firstDel = new del(RationalNumber.noException);
        del secondDel = delegate(uint a)
        {   
            return a;
        };

        Func<uint, uint> anonM = RationalNumber.noException;


        RationalNumber first = RationalNumber.createFromString(Console.ReadLine());
        RationalNumber second = new RationalNumber(20, 0);

        Console.Write("Input first number: ");
        try
        {
            int i = first.N / Convert.ToInt32(first.M);
        }
        catch (DivideByZeroException)
        {   
            first.M = firstDel(1);
            //first.M = anonM(1);
        }

        try
        {
            int i = second.N / Convert.ToInt32(second.M);
        }
        catch (DivideByZeroException)
        {
            second.M = secondDel(1);
        }


        Console.WriteLine("\nFirst number: " + first.ToString());
        Console.WriteLine("Second number: " + second.ToString());
 

        Console.WriteLine(first.ToString()+ " + " + second.ToString()+ " = " + (first + second).ToString());
        Console.WriteLine(first.ToString() + " - " + second.ToString() + " = " + (first - second).ToString());
        Console.WriteLine(first.ToString() + " * " + second.ToString() + " = " + (first * second).ToString());
        Console.WriteLine(first.ToString() + " / " + second.ToString() + " = " + (first / second).ToString());
        
        Console.Write("Press any key to exit...");
        Console.ReadKey();
    }
예제 #40
0
 public Form2(del d)
 {
     InitializeComponent();
     this.d=d;
 }
 private void changeStatusLabel(string txt)
 {
     if (lblState.InvokeRequired)
     {
         del d = new del(changeStatusLabel);
         this.Invoke(d, new object[] { txt });
         return;
     }
     lblState.Text = txt;
 }
예제 #42
0
 static void Main()
 {
     del myDelegate=new del(hello);
     myDelegate(20);
     Console.WriteLine(getNum());
 }
예제 #43
0
 private void Output(String Message)
 {
     if (output != null)
     {
         if (this.output.InvokeRequired)
         {
             Delegate d = new del(Output);
             output.Invoke(d, new object[] { Message });
         }
         else
         {
             this.output.Items.Add(Message);
             this.output.SelectedIndex = output.Items.Count - 1;
             this.output.ClearSelected();
         }
     }
 }
예제 #44
0
            /// <summary>
            /// Callbacks for Receiving Message from Client and Handle it.
            /// </summary>
            private void RecvrMsgCallback()
            {
                while (running)
                {
                    while (waitConfirmation) { };
                    try
                    {

                        Console.WriteLine(time);
                        if (time >= maxTime)
                        {
                            Close();
                            running = false;
                            lock (Tracker.ClientHandlers)
                            {
                                Tracker.ClientHandlers.Remove(IP);
                            }
                            break;
                        }

                        byte[] bytes = new byte[1024];
                        int bytesRec = handler.Receive(bytes);
                        time = 0; // time

                        // Message
                        UNOS_Sister.Message msg = new UNOS_Sister.Message();
                        msg.parseMe(bytes);

                        Console.WriteLine(bytes[bytes.Length - 1]);
                        Console.WriteLine("Message : {0}", Encoding.ASCII.GetString(bytes, 0, bytesRec));

                        List<byte> response = new List<byte>();
                        response.AddRange(Encoding.ASCII.GetBytes("GunbondGame00000000"));

                        UNOS_Sister.Message msgResponse = new UNOS_Sister.Message();

                        // TO DO INITIAL MESSAGE RESPONSE

                        string log = "";

                        msgResponse.msgPeerID = PeerID;
                        // Message Handling
                        // Handsake
                        if (msg.msgCode == UNOS_Sister.Message.HANDSHAKE)
                        {
                            response.Add(135);
                            response.AddRange(Encoding.ASCII.GetBytes(PeerID)); ;
                            log += "Handshake from " + (handler.RemoteEndPoint as IPEndPoint).Address.ToString() +
                                ", Peer ID : " + PeerID + "\n";
                            msgResponse.msgCode = UNOS_Sister.Message.HANDSHAKE;
                        }
                        else if (msg.msgCode == UNOS_Sister.Message.QUIT) // Quit Room
                        {
                            bool found = false;
                            int i = 0;
                            Room room = null;
                            while (!found)
                            {
                                room = Tracker.Rooms.ElementAt(i).Value;
                                foreach (string id in room.PeerIDs)
                                {
                                    if (id.Equals(msg.msgPeerID))
                                    {
                                        Console.WriteLine("Peer " + msg.msgPeerID + "is found in " + room.getRoomID());
                                        found = true;
                                    }
                                }
                            }
                            if (found)
                            {
                                Console.WriteLine("QUIT");
                                string sRoom = room.getPeerID();
                                Console.WriteLine("Peer ID : " + sRoom);

                                string s = Tracker.IPPeers[sRoom];

                                Console.WriteLine("Key : " + s);

                                ClientHandler handlerCreatorPeer = Tracker.ClientHandlers[s];
                                UNOS_Sister.Message msgConfirmation = msg;
                                msgResponse.msgCode = handlerCreatorPeer.SentForConfirmation(msgConfirmation.Construct()).msgCode;
                                if (msgResponse.msgCode == Message.SUCCESS)
                                {
                                    Console.WriteLine("Sukses");
                                    room.PeerIDs.Remove(msg.msgPeerID);
                                    if (room.PeerIDs.Count == 0) Tracker.Rooms.Remove(room.getRoomID());
                                }
                                else if (msgResponse.msgCode == Message.FAILED)
                                {
                                    Console.WriteLine("Failed");
                                }
                                else
                                {
                                    Console.WriteLine("APA ? " + msgResponse.msgCode);
                                    msgResponse.msgCode = Message.FAILED;
                                }

                            }
                            else
                                msgResponse.msgCode = UNOS_Sister.Message.FAILED;
                            Console.WriteLine("Quit Room");
                        }
                        else if (msg.msgCode == UNOS_Sister.Message.START) // Start Room
                        {
                            Room sRoom = Tracker.GetRoom(msg.msgPeerID);
                            if (sRoom != null)
                            {
                                msgResponse.msgCode = UNOS_Sister.Message.SUCCESS;
                                foreach (string id in sRoom.PeerIDs)
                                {
                                    if (!id.Equals(msg.msgPeerID))
                                    {
                                        Console.WriteLine("Sent Start to : " + id);
                                        if (Tracker.IPPeers.ContainsKey(id))
                                        {
                                            if (Tracker.ClientHandlers.ContainsKey(Tracker.IPPeers[id]))
                                            {
                                                Tracker.ClientHandlers[Tracker.IPPeers[id]].handler.Send(msg.Construct());
                                                Console.WriteLine("Sent");
                                            }
                                        }
                                    }
                                }
                                Thread.Sleep(500);
                            } else {
                                msgResponse.msgCode = UNOS_Sister.Message.FAILED;

                            }
                            Console.WriteLine("Start Room");
                        }
                        else if (msg.msgCode == UNOS_Sister.Message.KEEP_ALIVE) // Keep Alive
                        {
                            //response = "OK, I will not kill you this time";
                            msgResponse.msgCode = UNOS_Sister.Message.SUCCESS;
                            log += PeerID + ":" + "Still Alive\n";
                            time = 0;
                        }
                        else if (msg.msgCode == UNOS_Sister.Message.LIST) // Listing Room
                        {
                            //response = "Oke list of room will be sent sooon";
                            log += PeerID + ":" + "Request List of Room\n";
                            msgResponse.msgCode = UNOS_Sister.Message.ROOM;
                            msgResponse.Rooms.Clear();
                            msgResponse.Rooms.AddRange(Tracker.Rooms.Values);
                        }
                        else if (msg.msgCode == UNOS_Sister.Message.CREATE_ROOM) //Create Room
                        {
                            // Create Room
                            // response = "Oke Room will be created";
                            if (Tracker.Rooms.Count() + 1 <= Tracker.max_room)
                            {
                                msgResponse.msgCode = UNOS_Sister.Message.SUCCESS;
                                response.Add(127);
                                msg.printMsg();
                                lock (Tracker.Rooms)
                                {
                                    Console.WriteLine("Peer ID :" + msg.msgPeerID);
                                    msg.Rooms.ElementAt(0).PeerIDs.Add(msg.msgPeerID);
                                    Tracker.Rooms.Add(msg.Rooms[0].getRoomID(), msg.Rooms.ElementAt(0));
                                }
                            }
                            else
                            {
                                response.Add(128);
                                msgResponse.msgCode = UNOS_Sister.Message.FAILED;
                            }

                            Console.WriteLine("Max Player :" + msg.Rooms[0].getMaxPlayer());
                            log += PeerID + ":" + "Created Room ID :" + msg.Rooms[0].getRoomID().Substring(0, msg.Rooms[0].getRoomID().IndexOf('\0')) + ", MaxPlayer :" +
                                 msg.Rooms[0].getMaxPlayer().ToString() + "\n";
                            Console.WriteLine(log);
                        }
                        else if (msg.msgCode == Message.JOIN) // Join Room
                        {
                            Console.WriteLine("Join Room");
                            Console.WriteLine("Room ID : " + msg.Rooms[0].getRoomID());

                            string sRoom = Tracker.Rooms[msg.Rooms[0].getRoomID()].getPeerID();
                            if (sRoom != null)
                            {
                                Console.WriteLine("Peer ID : " + sRoom);

                                string s = Tracker.IPPeers[sRoom];

                                Console.WriteLine("Key : " + s);

                                ClientHandler handlerCreatorPeer = Tracker.ClientHandlers[s];
                                UNOS_Sister.Message msgConfirmation = new UNOS_Sister.Message();
                                msgConfirmation.msgCode = Message.CHECK;
                                msgConfirmation.msgPeerID = msg.msgPeerID;
                                msgConfirmation.IP = this.IP;
                                msgResponse.msgCode = handlerCreatorPeer.SentForConfirmation(msgConfirmation.Construct()).msgCode;
                                if (msgResponse.msgCode == Message.SUCCESS)
                                {
                                    Console.WriteLine("Sukses");
                                    Room room = Tracker.Rooms[msg.Rooms[0].getRoomID()];
                                    room.PeerIDs.Add(msg.msgPeerID);
                                }
                                else if (msgResponse.msgCode == Message.FAILED)
                                {
                                    Console.WriteLine("Failed");
                                }
                                else
                                {
                                    Console.WriteLine("APA ? " + msgResponse.msgCode);
                                    msgResponse.msgCode = Message.FAILED;
                                }
                            }
                            else
                            {
                                Room room = Tracker.Rooms[msg.Rooms[0].getRoomID()];
                                room.PeerIDs.Add(msg.msgPeerID);
                                msgResponse.msgCode = Message.SUCCESS;
                            }
                        }

                        response.Clear();
                        Console.WriteLine("Message to Write : " + msgResponse.msgCode);

                        response.AddRange(msgResponse.Construct());

                        if (Tracker.log)
                        {
                            Console.WriteLine("Write Log");
                            lock (Tracker.fileLog)
                            {
                                Tracker.fileLog.Write(Encoding.ASCII.GetBytes(log), 0, log.Length);
                                Tracker.fileLog.Write(Encoding.ASCII.GetBytes("->"), 0, 2);
                                Tracker.fileLog.Write(response.ToArray(), 0, response.Count);
                                Tracker.fileLog.Write(Encoding.ASCII.GetBytes("\n"), 0, 1);
                            }

                            if (Tracker.LogText != null)
                            {
                                lock (Tracker.LogText)
                                {
                                    del update_log_text = new del(() =>
                                    {
                                        Tracker.LogText.Text += log;
                                        Tracker.LogText.Text += "->" + Encoding.ASCII.GetString(response.ToArray()) + "\n";
                                    });
                                    Tracker.LogText.Invoke(update_log_text);
                                }
                            }
                        }

                        // Send Response
                        handler.Send(response.ToArray());
                    }
                    catch (SocketException se)
                    {
                        running = false;
                        lock (Tracker.ClientHandlers)
                        {
                            Tracker.ClientHandlers.Remove(IP);
                        }
                    }
                }
            }
예제 #45
0
        void sendMessage()
        {
            while (connected)
            {
                lock (sendMsg)
                {
                    while (sendMsg.Count > 0)
                    {
                        try
                        {
                            byte[] MsgToBeSent = sendMsg.Dequeue();
                            Console.WriteLine("Sending : " + Encoding.ASCII.GetString(MsgToBeSent));
                            sendDel printSendMsg = new sendDel(() =>
                            {
                                peerUI.textBox4.Text = Encoding.ASCII.GetString(MsgToBeSent);
                            });
                            peerUI.Invoke(printSendMsg);

                            int byteSent = sender.Send(MsgToBeSent); // kirim ke tracker

                            //Receive response from tracker
                            byte[] bytes = new byte[1024];
                            int byteRec = sender.Receive(bytes);
                            recvDel printRecvMsg = new recvDel(() =>
                            {
                                peerUI.textBox5.Text = Encoding.ASCII.GetString(bytes);
                            });
                            peerUI.Invoke(printRecvMsg);

                            Message mSent = new Message();
                            mSent.parseMe(MsgToBeSent);

                            Message m = new Message();
                            m.parseMe(bytes);

                            if (m.msgCode == Message.START)
                            {
                                //start game here
                                playStatus = 1;
                                sendDel printCurrentRoom = new sendDel(() =>
                                {
                                    peerUI.Close();
                                });
                                peerUI.Invoke(printCurrentRoom);
                            }
                            else
                            if (m.msgCode == Message.SUCCESS)
                            {
                                if (mSent.msgCode == Message.START)
                                {
                                    //start game here
                                    playStatus = 2;
                                    sendDel printCurrentRoom = new sendDel(() =>
                                    {
                                        peerUI.Close();
                                    });
                                    peerUI.Invoke(printCurrentRoom);
                                }
                                else if (mSent.msgCode == Message.CREATE_ROOM)
                                {
                                    //create room success
                                    Console.WriteLine("Create Room Success");
                                    //masukin ke myRoom
                                    myRoom = mSent.Rooms[0];
                                    inRoom = true; //masuk ke room yang di create
                                    canQuit = false;
                                    Console.WriteLine("my Room : " + myRoom.getRoomID());
                                    peerList.Add(this.PeerID);

                                    sendDel printCurrentRoom = new sendDel(() =>
                                    {
                                        peerUI.textBox6.Text = myRoom.getRoomID();
                                    });
                                    peerUI.Invoke(printCurrentRoom);
                                }
                                else if (mSent.msgCode == Message.JOIN)
                                {
                                    //join success
                                    inRoom = true;

                                    sendDel printCurrentRoom = new sendDel(() =>
                                    {
                                        peerUI.textBox6.Text = joininRoom;
                                    });
                                    peerUI.Invoke(printCurrentRoom);

                                    //Print Room Member
                                    del printRoomMember = new del(() =>
                                    {
                                        for (int i = 0; i < peerList.Count; i++)
                                        {
                                            peerUI.richTextBox1.Text += peerList[i];
                                            peerUI.richTextBox1.Text += "\n";
                                        }

                                    });
                                    peerUI.Invoke(printRoomMember);

                                    Console.WriteLine("Join Room Success");
                                    //TO DO : koneksi dengan GameConnection
                                }
                                else if (mSent.msgCode == Message.KEEP_ALIVE)
                                {
                                    //keep alive success
                                    Console.WriteLine("Keep Alive Success");
                                }
                                else if (mSent.msgCode == Message.QUIT)
                                {

                                    //quit success
                                    inRoom = false;
                                    sendDel printCurrentRoom = new sendDel(() =>
                                    {
                                        peerUI.textBox6.Text = "-";
                                    });
                                    peerUI.Invoke(printCurrentRoom);
                                    Console.WriteLine("Quit Success");
                                }
                            }
                            else if (m.msgCode == Message.ROOM) {
                                //get list room
                                roomList.Clear();
                                roomList.AddRange(m.Rooms);
                                Console.WriteLine("Room List : ");
                                List<string> roomString = new List<string>();
                                del printRoomList = new del(() => {
                                    Console.WriteLine("Room List : ");
                                    for (int i = 0; i < roomList.Count; i++)
                                    {
                                        Console.WriteLine(roomList[i].getRoomID());
                                        roomString.Add(roomList[i].getRoomID());
                                    }
                                    peerUI.listBox1.DataSource = roomString;
                                });
                                peerUI.Invoke(printRoomList);
                            }
                            else if (m.msgCode == Message.FAILED)
                            {
                                if (mSent.msgCode == Message.CREATE_ROOM)
                                {
                                    //create room success
                                    Console.WriteLine("Create Room FAILED");
                                }
                                else if (mSent.msgCode == Message.JOIN)
                                {
                                    //join success
                                    Console.WriteLine("Join Room FAILED");
                                }
                                else if (mSent.msgCode == Message.KEEP_ALIVE)
                                {
                                    //keep alive success
                                    Console.WriteLine("Keep Alive FAILED");
                                }
                                else if (mSent.msgCode == Message.QUIT)
                                {
                                    //quit success
                                    Console.WriteLine("Quit FAILED");
                                }
                            }
                            else if (m.msgCode == 100) //Check if myRoom masih muat
                            {
                                Console.WriteLine("jumlah peer : " + peerList.Count());
                                Console.WriteLine("max player : " + myRoom.getMaxPlayer());
                                if (peerList.Count() < myRoom.getMaxPlayer())
                                {
                                    Console.WriteLine("Masih bisa join");
                                    IPTable.Add(m.msgPeerID, m.IP);
                                    byte[] msg = Encoding.ASCII.GetBytes("GunbondGame00000000");
                                    List<byte> byteList = new List<byte>();
                                    byteList.AddRange(msg);
                                    byteList.Add(Message.SUCCESS);
                                    msg = byteList.ToArray();
                                    int byteSent_ = sender.Send(msg);

                                    //Receive response from tracker
                                    byte[] join_msg = new byte[1024];
                                    int byteRecs = sender.Receive(join_msg);
                                    Message m_ = new Message();
                                    m_.parseMe(join_msg);
                                    if (m_.msgCode == Message.SUCCESS)
                                    {
                                        peerList.Add(m.msgPeerID);

                                        //Print Room Member
                                        del printRoomMember = new del(() =>
                                        {
                                            Console.WriteLine("RoomMember : ");
                                            for (int i = 0; i < peerList.Count; i++)
                                            {
                                                peerUI.richTextBox1.Text += peerList[i];
                                                peerUI.richTextBox1.Text += "\n";
                                                Console.WriteLine(peerList[i]);
                                            }

                                        });
                                        peerUI.Invoke(printRoomMember);
                                    }
                                    else
                                    {
                                        Console.WriteLine("Sudah join room lain");
                                    }
                                }
                                else
                                {
                                    Console.WriteLine("Room already full");
                                    byte[] msg = Encoding.ASCII.GetBytes("GunbondGame00000000");
                                    List<byte> byteList = new List<byte>();
                                    byteList.AddRange(msg);
                                    byteList.Add(Message.FAILED);
                                    msg = byteList.ToArray();
                                    int byteSent_ = sender.Send(msg);
                                }
                            }
                            else if (m.msgCode == Message.QUIT) {
                                peerList.Remove(m.msgPeerID);
                                Console.WriteLine("Peer " + m.msgPeerID + " quit from your room. Boo!");
                                IPTable.Remove(m.msgPeerID);
                                byte[] msg = Encoding.ASCII.GetBytes("GunbondGame00000000");
                                List<byte> byteList = new List<byte>();
                                byteList.AddRange(msg);
                                byteList.Add(Message.SUCCESS);
                                msg = byteList.ToArray();
                                int byteSent_ = sender.Send(msg);

                                //Print Room Member
                                del printRoomMember = new del(() =>
                                {
                                    Console.WriteLine("RoomMember : ");
                                    peerUI.richTextBox1.Text = "";
                                    for (int i = 0; i < peerList.Count; i++)
                                    {
                                        peerUI.richTextBox1.Text += peerList[i];
                                        peerUI.richTextBox1.Text += "\n";
                                        Console.WriteLine(peerList[i]);
                                    }

                                });
                                peerUI.Invoke(printRoomMember);
                            }
                        }
                        catch (SocketException se)
                        {
                            Console.WriteLine(se.ToString());
                            if (se.SocketErrorCode == SocketError.ConnectionAborted)
                            {
                                connected = false;
                            }
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine(e.ToString());
                        }
                    }
                }
            }
        }