예제 #1
0
        static void Main(string[] args)
        {
            System.Console.WriteLine("===== NW WORKER =====");
            System.Console.WriteLine("= client connecting");
            c = new TcpClient();
            c.Connect(r_ip, r_port);
            System.Console.WriteLine("= refer host");

            NetworkStream iostream = c.GetStream();
            string curP = "red";

            int i = 0;
            int i2 = 0;
            byte[] dataRead = new byte[1024]; // shpuld be large enough for my stuff
            DataStreamObject sendmessage;
            DataStreamObject recvdMessage;

            BinaryFormatter formatter = new BinaryFormatter();
            string mode = "recv";

            while (i <= 9000)
            {

                if (iostream.CanWrite && mode == "send") // eg us
                {
                    //System.Console.WriteLine("=begin send");
                    sendmessage = new DataStreamObject();
                    sendmessage.AddInfo = i2.ToString();
                    i2++;
                    formatter.Serialize(iostream, sendmessage);
                    //System.Console.WriteLine("=end send");
                    mode = "recv";

                }
                if (iostream.CanRead && mode == "recv") // them, read their move
                {
                    //System.Console.WriteLine("=begin read");
                    recvdMessage = (DataStreamObject) formatter.Deserialize(iostream);
                    System.Console.WriteLine("======= recvd: {0}", recvdMessage.AddInfo);
                    //System.Console.WriteLine("=end read");
                    mode = "send";
                }
                i++;
            }
            sendmessage = new DataStreamObject();
            sendmessage.AddInfo = "STOP";
            formatter.Serialize(iostream, sendmessage);
            //c.Close(); ~let the host close it

            System.Console.WriteLine("null | null | null");

            Console.ReadKey();
        }
예제 #2
0
        // specific to host (ability to end / determines intiial);
        private void hostsgamelogicloop()
        {
            // host and client are connected now
            // sharing the iostream
            // this logic loop will use a multiplayer gamestate var

            // Current player::
            // This player::
            // Remote player::
            // Multi state::
            // This Player Move::

            // Initial data:
            //      player assignments / who starts (current player)
            // Subsequent data:
            //      Move representation

            // after send/receive of this data,
            // use that info to set the appropriate states
            //

            DataStreamObject rcv = new DataStreamObject(); ;
            string gFlag = "send";
            System.Console.WriteLine("gflag set to send");
            int i = 10000;
            while (rcv.AddInfo != "STOP")
            {

               // System.Console.WriteLine("player {0} turn", data.Current_player);
                //System.Console.WriteLine(" recv bool is {0}", nw.IsRecv());
                // if data.localturncompleted
                // then turn move ready to be sent
                // send turn move
                // change state to data.waitingformoveresponse
                // if data.waitingformoveresponse && nw.Recv()
                // change data state to data.applyingmoveresponse
                // change state to data.localturn etc..

                if (data.Current_player == "red" && gFlag == "send") // and move ready to be sent
                {

                    nw.flag = "send";
                    System.Console.WriteLine("nw.flag set to send");

                    DataStreamObject dso = new DataStreamObject();
                    dso.AddInfo = i.ToString();
                    i--;
                    // send the move
                    nw.Send = dso;
                    // change the m state
                    while(!nw.IsSentItem)
                    {

                    }

                    // prepare to recv new again
                    // logical to clear sent here (since should hav esent due to while loop)
                    nw.IsRecvItem = false;
                    gFlag = "recv";
                    System.Console.WriteLine("gflag set to recv");

                    //System.Console.WriteLine("Send: {0}",  "some move");
                    // clear the move from data
                    // change the current player, so will now be waiting on response
                    //data.Current_player = "white";
                    //System.Console.WriteLine("sent a move ({0}), player is now white", dso.AddInfo);
                }
                if (data.Current_player == "red" && gFlag == "recv")
                {

                    nw.flag = "recv";
                    System.Console.WriteLine("nw.flag set to recv");
                    // receive
                    while (!nw.IsRecvItem)
                    {

                    }

                    rcv = nw.Recv();
                    System.Console.WriteLine("======= recvd: {0}", rcv.AddInfo);
                    // have recvd so now prepare to send
                    // clear the old has sent

                    nw.IsSentItem = false;
                    // clear the item from nw.recv too
                    gFlag = "processRecv";
                    System.Console.WriteLine("gflag set to processRecv");

                    //System.Console.WriteLine("i have received  {0}", rcv.AddInfo);
                    // apply the move

                    // change player
                    //data.Current_player = "red";
                    //System.Console.WriteLine("received a move ({0}), player is now red", rcv.AddInfo);
                }

                if (data.Current_player == "red" && gFlag == "processRecv")
                {
                    // if rcv.AddInfo == STOP {endgame}

                    // if recv.AddInfo == MOVE {apply move}(change state, apply, update gui)
                    // change state
                    // view.apply(MOVE(s)) {also updates gui}
                    // change state

                }

            }

            System.Console.WriteLine("end routine");
        }