public void broadcastBeginAcked(POIUser u)
        {
            if (CheckEveryoneAckedBroadcastBegin())
            {
                SocketAsyncEventArgs sendArgs = new SocketAsyncEventArgs();

                sendArgs.RemoteEndPoint = new IPEndPoint(broadCastAddr, broadCastPort);
                sendArgs.SetBuffer(curBroadcastFrame[0], 0, curBroadcastFrame[0].Length);
                sendArgs.Completed += new EventHandler<SocketAsyncEventArgs>(broadcastContentPacketCompleted);
                sendArgs.UserToken = new Tuple<int, int>(0, 0);
                broadCastChannel.SendToAsync(sendArgs);

                myBroadcastState = BroadcastState.Broadcasting;
            }
        }
 public void broadcastEndAcked(POIUser u)
 {
     if (CheckEveryoneAckedBroadcastEnd())
     {
         myBroadcastState = BroadcastState.Idle;
     }
 }
        private void ParsingData(byte[] data, POIUser user)
        {
            //Start parsing data
            DataType myType = (DataType)data[0];
            byte[] packet = data.Skip(1).ToArray();

            //DataParsers myParser = user.myParser;
            POIRealtimeMsgCB dataHandler = user.RealtimeCtrlHandler;

            switch (myType)
            {
                case DataType.GESTURE:
                    GestureDataParser(packet, dataHandler);
                    break;
                case DataType.MOTION:
                    //myParser.MotionDataParser(packet);
                    break;
                case DataType.TOUCH:
                    TouchDataParser(packet, dataHandler);
                    break;
                case DataType.KEYBOARD:
                    //myParser.KeyboardParser(packet);
                    break;
            }
        }
 public POIInputEventArgs(char curKey, POIUser curUser)
 {
     myChar = curKey;
     myUser = curUser;
 }
 public POIRotateEventArgs(double degree, double velocity, POIUser curUser)
 {
     myDegree = degree;
     myVelocity = velocity;
     myUser = curUser;
 }
 public POIUserEventArgs(POIUser user, Point myOffset)
 {
     myUser = user;
     myX = myOffset.X;
     myY = myOffset.Y;
 }
 public POIZoomEventArgs(double scale, double velocity, POIUser curUser)
 {
     scaleFactor = scale;
     myVelocity = velocity;
     myUser = curUser;
 }
 public POITouchMoveEventArgs(POIUser curUser)
 {
     myUser = curUser;
 }
 public POITapEventArgs(POIUser curUser)
 {
     myUser = curUser;
 }
 public POISwipeEventArgs(int curDirection, POIUser curUser)
 {
     myDirection = (SwipeDirection)curDirection;
     myUser = curUser;
 }
 public POIScrollEventArgs(POIUser curUser)
 {
     myUser = curUser;
 }
        //Initialize the client
        public void helloMsgReceived(POIHelloMsg par, POITCPConnection connection)
        {
            //Notify data handler that authentication has been done
            //Proper CB functions are set here
            int userType = (int)par.UserType;
            int conType = (int)par.ConnType;
            string userName = par.UserName;

            //Handle the authentication

            POIWelcomeMsg.WelcomeStatus status = POIWelcomeMsg.WelcomeStatus.Failed;

            if (conType == POIMsgDefinition.POI_CONTROL_CHANNEL)
            {
                //Check if user already exists, create if not exists
                POIUser user;
                if (POIGlobalVar.UserProfiles.ContainsKey(userName))
                {
                    user = POIGlobalVar.UserProfiles[userName];
                }
                else
                {
                    user = new POIUser();
                    POIGlobalVar.UserProfiles[userName] = user;
                }

                //Initialize the user parameters
                user.UserID = userName;
                user.UserPrivilege = (POIUser.Privilege)userType;
                user.CtrlChannel = connection;

                if (user.Status == POIUser.ConnectionStatus.Disconnected)
                {
                    user.Status = POIUser.ConnectionStatus.Connected;
                }

                connection.Type = POIMsgParser.ParserType.Control;
                connection.Delegates = user;
                connection.AssociatedUser = user;

                try
                {
                    POIGlobalVar.SystemKernel.HandleUserJoin(user);
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                }

                status = POIWelcomeMsg.WelcomeStatus.CtrlChannelAuthenticated;
            }
            else if (conType == POIMsgDefinition.POI_DATA_CHANNEL)
            {
                if (POIGlobalVar.UserProfiles.ContainsKey(userName))
                {
                    POIUser user = POIGlobalVar.UserProfiles[userName];
                    if (user.Status == POIUser.ConnectionStatus.Connected)
                    {
                        user.DataChannel = connection;

                        connection.InitPayloadBufferForDataChannel();
                        connection.Type = POIMsgParser.ParserType.Data;
                        connection.Delegates = user;
                        connection.AssociatedUser = user;

                        status = POIWelcomeMsg.WelcomeStatus.DataChannelAuthenticated;
                    }
                }
            }

            //Send back the welcome message
            POIWelcomeMsg welcomeMsg = new POIWelcomeMsg(status);
            connection.SendData(welcomeMsg.getPacket());
        }