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; } }