void FinishSendDivisionRPC(int InDivState)
    {
        bGettingDivision = false;

        try
        {
            using (Stream stream = Global.GenerateStreamFromString(AllDataBuilderString))
                Global.AllData = TournamentData.Load(stream);
        }
        catch (Exception e)
        {
            Debug.Log("Exception in FinishSendDivisionRPC: " + e.Message);
        }
        Global.DivDataState = InDivState;
        LastSyncedDivState  = InDivState;

        JudgerBase Judger = Global.GetActiveJudger();

        if (Judger)
        {
            SendJudgeNameId(Judger.JudgeGuid, Judger.GetJudgeNameId());
        }

        //Debug.Log(" finished: ");
    }
    public void ClientSendFinishJudgingAI(string InAIData)
    {
        JudgerBase JudgeBase = Global.GetActiveJudger();

        if (JudgeBase)
        {
            GetComponent <NetworkView>().RPC("ClientSendFinishJudgingAIRPC", RPCMode.Others, JudgeBase.JudgeGuid, InAIData);
        }
    }
    void SendHeadJudgeState(int InDivState, int InCurState)
    {
        JudgerBase Judger = Global.GetActiveJudger();

        if (!Judger || !Judger.bIsJudging)
        {
            Global.CurDataState = InCurState;
            Global.DivDataState = InDivState;
        }
    }
 void CallForJudgesReadyRPC()
 {
     if (Network.isClient)
     {
         JudgerBase Judger = Global.GetActiveJudger();
         if (Judger && !Judger.bIsJudging && !Judger.bClientReadyToBeLocked)
         {
             Judger.bHeadJudgeRequestingReady = true;
         }
     }
 }
    void SendJudgerInfoRPC(string InGuid, int InJudgeCategoryIndex)
    {
        JudgerBase JudgeBase = Global.GetActiveJudger();

        if (JudgeBase && JudgeBase.JudgeGuid == InGuid)
        {
            JudgeBase.JudgeCategoryIndex = InJudgeCategoryIndex;
            JudgeBase.bIsDataDirty       = true;

            bClientInited = true;
        }
    }
    void SendLockJudgesRPC()
    {
        if (Network.isClient)
        {
            JudgerBase Judger = Global.GetActiveJudger();
            if (Judger && !Judger.bIsJudging && Judger.bClientReadyToBeLocked)
            {
                Judger.LockForJudging();

                SendJudgeLocked(Judger.JudgeGuid, true);
            }
        }
    }
    void SendCurDataRPC(int InCurState, int InDivision, int InRound, int InPool, int InTeam, int InActiveJudgingJudgers)
    {
        JudgerBase Judger = Global.GetActiveJudger();

        if (Judger)
        {
            Debug.Log(" got SendCurDataRPC " + Judger.bIsJudging + "  " + Judger.bLockedForJudging + "  " + Judger.bClientReadyToBeLocked +
                      " " + Judger.bHeadJudgeRequestingReady + " " + Judger.bIsEditing + " " + Judger.bRoutineTimeEnded);
        }

        if (Judger && !Judger.bIsJudging && !Judger.bIsEditing)
        {
            EPool newPool = (EPool)InPool;
            int   oldJudgeCategoryIndex = Judger.JudgeCategoryIndex;
            bool  bIsScoresPool         = newPool > EPool.Max;
            bool  bIsDiffJudger         = Global.ActiveInterface == EInterface.DiffJudger || Global.bOverrideInterfaceAiScores;

            Global.SetOverrideInterfaceAiScores(bIsScoresPool && bIsDiffJudger);
            Judger = Global.GetActiveJudger();
            Judger.JudgeCategoryIndex = oldJudgeCategoryIndex;
            Judger.ResetJudgeNameId();

            if (bIsScoresPool)
            {
                if (newPool == EPool.PostScoresAC)
                {
                    newPool = Global.bOverrideInterfaceAiScores ? EPool.A : EPool.C;
                }
                else if (newPool == EPool.PostScoresCA)
                {
                    newPool = Global.bOverrideInterfaceAiScores ? EPool.C : EPool.A;
                }
                else if (newPool == EPool.PostScoresBD)
                {
                    newPool = Global.bOverrideInterfaceAiScores ? EPool.B : EPool.D;
                }
                else
                {
                    newPool = Global.bOverrideInterfaceAiScores ? EPool.D : EPool.B;
                }
            }

            Judger.CurDivision           = (EDivision)InDivision;
            Judger.CurRound              = (ERound)InRound;
            Judger.CurPool               = newPool;
            Judger.CurTeam               = InTeam;
            Judger.WaitingForJudgesCount = InActiveJudgingJudgers;

            Global.CurDataState = InCurState;
            LastSyncedCurState  = InCurState;

            Debug.Log("!!!!!!!!!!!!!! set judge data");
        }

        if (Global.Obj.OverlayGo && Global.Obj.OverlayGo.activeSelf)
        {
            Overlay OverlayScript = Global.Obj.OverlayGo.GetComponent <Overlay>();
            if (OverlayScript)
            {
                OverlayScript.CurDivision = (EDivision)InDivision;
                OverlayScript.CurRound    = (ERound)InRound;
                OverlayScript.CurPool     = (EPool)InPool;
                OverlayScript.CurTeam     = InTeam;
            }
        }
    }
    public void UpdateUdpListener()
    {
        if (Client != null)
        {
            if (bGotMessage)
            {
                bGotMessage = false;

                Client.BeginReceive(ReceiveCallback, StateData);
            }

            if (!bIsServer && ServerIp.Length == 0)
            {
                PingServerTimer -= Time.deltaTime;
                if (PingServerTimer < 0)
                {
                    PingServerTimer = 3f;

                    string     PingString = "PingServer" + ClientPort;
                    IPEndPoint Group      = new IPEndPoint(IPAddress.Broadcast, ServerPort);
                    byte[]     Bytes      = Encoding.ASCII.GetBytes(PingString);
                    BroadcastSocket.SendTo(Bytes, Group);
                }
            }

            if (!IsConnectedToServer && ServerIp.Length > 0)
            {
                if (Network.Connect(ServerIp, 8765) == NetworkConnectionError.NoError)
                {
                    IsConnectedToServer   = true;
                    bSentConnectedMessage = false;

                    Debug.Log("Connected to: " + ServerIp);
                }
            }

            if (!bSentConnectedMessage && Network.isClient)
            {
                bSentConnectedMessage = true;

                JudgerBase JudgeBase = Global.GetActiveJudger();
                if (JudgeBase)
                {
                    JudgeBase.JudgeGuid = Network.player.guid;

                    //Debug.Log(" send connect message: " + bClientInited);

                    if (bClientInited)
                    {
                        SendJudgeReconnected(Network.player.guid, (int)Global.GetActiveJudgerType(), JudgeBase.JudgeCategoryIndex, JudgeBase.GetJudgeNameId(),
                                             JudgeBase.bClientReadyToBeLocked, JudgeBase.bLockedForJudging, JudgeBase.bIsJudging, JudgeBase.bIsEditing);
                    }
                    else
                    {
                        SendJudgeConnected(Network.player.guid, (int)Global.GetActiveJudgerType());
                    }
                }
            }

            if (Networking.bNeedSendCachedResults && bSentConnectedMessage)
            {
                JudgerBase JudgeBase = Global.GetActiveJudger();
                if (JudgeBase)
                {
                    JudgeBase.SendCachedResultsToHeadJudger();
                }
            }
        }
    }