예제 #1
0
        protected override void OnOperationRequest(OperationRequest operationRequest, SendParameters sendParameters)
        {
            Log.Debug("!!! STPhotonServer Recv Operation: " + operationRequest.OperationCode);
            //foreach(KeyValuePair<byte,Object> keypair in operationRequest.Parameters)
            //{
            //    Log.Debug(keypair.Key.ToString()+" - "+keypair.Value.ToString());
            //}

            //Console.WriteLine("STPhotonServer Recv Request: " + operationRequest.OperationCode);

            switch (operationRequest.OperationCode)
            {
            case 230:     // user log in

                Log.Warn("------------------- User LogIn !");
                //var info_param=new Dictionary<byte,object>{{1,game_app.cur_game},{2,game_app.checkAvailable()}};
                var info_param = new Dictionary <byte, object>();
                OperationResponse info_response = new OperationResponse((byte)STServerCode.CLogin_Success, info_param)
                {
                    ReturnCode   = (short)0,
                    DebugMessage = "server feedback"
                };
                this.fiber.Enqueue(() => SendOperationResponse(info_response, new SendParameters()));

                break;

            case 253:     //raise event:

                int ievent = Convert.ToInt32(operationRequest.Parameters[244]);

                //Log.Warn("Get Event: "+ievent);

                STClientCode event_code = (STClientCode)(ievent & 0xFF);
                Log.Warn("---------Get Event: " + event_code.ToString() + "---------- ");

                Object oparams = operationRequest.Parameters[245];
                //Log.Warn("params type: "+oparams.GetType());

                Hashtable eparams = (Hashtable)(operationRequest.Parameters[245]);

                Dictionary <byte, Object> event_params = new Dictionary <byte, Object>();
                if (eparams != null)
                {
                    foreach (DictionaryEntry entry in eparams)
                    {
                        try
                        {
                            Log.Debug(entry.Key + " " + entry.Key.GetType() + " - " + entry.Value + " " + entry.Value.GetType());
                        }
                        catch (Exception e)
                        {
                            Log.Error(e.ToString());
                        }
                        byte kbyte;
                        try{
                            kbyte = (byte)entry.Key;
                        }catch (InvalidCastException e) {
                            byte[] bkey = BitConverter.GetBytes((int)entry.Key);
                            Log.Debug("Unable to cast: " + bkey);
                            kbyte = bkey[0];
                        }

                        event_params.Add((byte)kbyte, entry.Value);
                    }
                }
                Log.Warn("--------------------------------- ");
                switch (event_code)
                {
                case STClientCode.LED_Join:

                    game_app.setupLedPeer(this);

                    event_params.Add((byte)1, game_app.getCurGame());
                    OperationResponse led_connected_response = new OperationResponse((byte)STServerCode.LConnected, event_params)
                    {
                        ReturnCode   = (short)0,
                        DebugMessage = "server feedback"
                    };
                    this.fiber.Enqueue(() => SendOperationResponse(led_connected_response, new SendParameters()));
                    is_led = true;

                    break;

                case STClientCode.APP_Check_Id:


                    Dictionary <byte, Object> id_params = new Dictionary <byte, Object>();
                    id_params.Add((byte)1, game_app.getCurGame());

                    String get_id = (String)event_params[(byte)100];

                    if (game_app.led_ready)
                    {
                        id_params.Add((byte)2, game_app.checkAvailable());

                        bool valid_id = game_app.getValidId(ref get_id);
                        Log.Debug("id: " + valid_id + " - " + get_id);

                        id_params.Add((byte)3, valid_id ? 1 : 0);
                        id_params.Add((byte)100, get_id);

                        id_params.Add((byte)200, game_app.getIosVersion());
                        id_params.Add((byte)201, game_app.getAndroidVersion());

                        this.client_id = get_id;
                    }

                    OperationResponse id_response = new OperationResponse((byte)STServerCode.Id_And_Game_Info, id_params)
                    {
                        ReturnCode   = (short)0,
                        DebugMessage = "server feedback"
                    };
                    this.fiber.Enqueue(() => SendOperationResponse(id_response, new SendParameters()));


                    this.client_id = get_id;

                    break;

                case STClientCode.LED_SwitchGame:
                    int switch_to_game = (int)event_params[(byte)1];
                    game_app.switchGame(switch_to_game);

                    break;

                default:
                    //Log.Warn("Undefined event code= "+event_code.ToString());

                    if (game_app.checkLed())
                    {
                        game_app.handleMessage(this, event_code, event_params);
                    }
                    else
                    {           // if no led available, kick them off!
                        Dictionary <byte, Object> _params = new Dictionary <byte, Object>();
                        _params.Add((byte)1, game_app.getCurGame());
                        OperationResponse _response = new OperationResponse((byte)STServerCode.Id_And_Game_Info, _params)
                        {
                            ReturnCode   = (short)0,
                            DebugMessage = "server feedback"
                        };
                        this.fiber.Enqueue(() => SendOperationResponse(_response, new SendParameters()));
                    }
                    break;
                }
                break;
            }
        }